[{"data":1,"prerenderedAt":173548},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch07-css-yin-ru-fang-shi-yu-xuan-ze-qi-jin-jie":3,"wiki-doc-nav":731},{"id":4,"title":5,"body":6,"description":723,"extension":724,"meta":725,"navigation":726,"path":727,"seo":728,"stem":729,"__hash__":730},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":8,"toc":704},"minimark",[9,13,18,23,107,115,126,129,132,136,165,169,172,175,178,181,184,188,191,194,242,245,275,281,284,288,292,298,301,304,307,310,313,316,363,367,370,373,377,381,410,413,418,421,424,427,430,434,438,441,443,446,450,453,457,460,463,466,470,474,480,491,494,497,500,503,506,643,651,660,701],[10,11,5],"h1",{"id":12},"_7-css引入方式与选择器进阶",[14,15,17],"h2",{"id":16},"_71-css引入方式","7.1 css引入方式",[19,20,22],"h3",{"id":21},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[24,25,30],"pre",{"className":26,"code":27,"language":28,"meta":29,"style":29},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html","",[31,32,33,49,58,74,91,97],"code",{"__ignoreMap":29},[34,35,38,42,46],"span",{"class":36,"line":37},"line",1,[34,39,41],{"class":40},"sVt8B","\u003C",[34,43,45],{"class":44},"s9eBZ","style",[34,47,48],{"class":40},">\n",[34,50,52,55],{"class":36,"line":51},2,[34,53,54],{"class":44},"  h1",[34,56,57],{"class":40}," {\n",[34,59,61,65,68,71],{"class":36,"line":60},3,[34,62,64],{"class":63},"sj4cs","    color",[34,66,67],{"class":40},": ",[34,69,70],{"class":63},"blue",[34,72,73],{"class":40},";\n",[34,75,77,80,82,85,89],{"class":36,"line":76},4,[34,78,79],{"class":63},"    font-size",[34,81,67],{"class":40},[34,83,84],{"class":63},"24",[34,86,88],{"class":87},"szBVR","px",[34,90,73],{"class":40},[34,92,94],{"class":36,"line":93},5,[34,95,96],{"class":40},"  }\n",[34,98,100,103,105],{"class":36,"line":99},6,[34,101,102],{"class":40},"\u003C\u002F",[34,104,45],{"class":44},[34,106,48],{"class":40},[108,109,110,114],"p",{},[111,112,113],"strong",{},"注意点"," ：",[108,116,117,118,121,122,125],{},"①",[31,119,120],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[31,123,124],{},"\u003Chead>","标签中",[108,127,128],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[108,130,131],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[19,133,135],{"id":134},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[24,137,139],{"className":26,"code":138,"language":28,"meta":29,"style":29},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[31,140,141],{"__ignoreMap":29},[34,142,143,145,147,151,154,158,161,163],{"class":36,"line":37},[34,144,41],{"class":40},[34,146,108],{"class":44},[34,148,150],{"class":149},"sScJk"," style",[34,152,153],{"class":40},"=",[34,155,157],{"class":156},"sZZnC","\"color: red; font-size: 16px;\"",[34,159,160],{"class":40},">这是一个段落\u003C\u002F",[34,162,108],{"class":44},[34,164,48],{"class":40},[108,166,167,114],{},[111,168,113],{},[108,170,171],{},"①style其实就是标签的属性",[108,173,174],{},"②在双引号中间，写法要符合css规范",[108,176,177],{},"③可以控制当前的标签设置样式",[108,179,180],{},"④书写繁琐，简单时才用",[108,182,183],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[19,185,187],{"id":186},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[108,189,190],{},"使用最多，单独建一个css文件，然后html引用",[108,192,193],{},"①css文件部分： style.css",[24,195,199],{"className":196,"code":197,"language":198,"meta":29,"style":29},"language-Css shiki shiki-themes github-light github-dark","\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n","Css",[31,200,201,207,213,224,237],{"__ignoreMap":29},[34,202,203],{"class":36,"line":37},[34,204,206],{"class":205},"sJ8bj","\u002F* style.css *\u002F\n",[34,208,209,211],{"class":36,"line":51},[34,210,10],{"class":44},[34,212,57],{"class":40},[34,214,215,218,220,222],{"class":36,"line":60},[34,216,217],{"class":63},"  color",[34,219,67],{"class":40},[34,221,70],{"class":63},[34,223,73],{"class":40},[34,225,226,229,231,233,235],{"class":36,"line":76},[34,227,228],{"class":63},"  font-size",[34,230,67],{"class":40},[34,232,84],{"class":63},[34,234,88],{"class":87},[34,236,73],{"class":40},[34,238,239],{"class":36,"line":93},[34,240,241],{"class":40},"}\n",[108,243,244],{},"②html部分",[24,246,248],{"className":26,"code":247,"language":28,"meta":29,"style":29},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[31,249,250],{"__ignoreMap":29},[34,251,252,254,257,260,262,265,268,270,273],{"class":36,"line":37},[34,253,41],{"class":40},[34,255,256],{"class":44},"link",[34,258,259],{"class":149}," rel",[34,261,153],{"class":40},[34,263,264],{"class":156},"\"stylesheet\"",[34,266,267],{"class":149}," href",[34,269,153],{"class":40},[34,271,272],{"class":156},"\"style.css\"",[34,274,48],{"class":40},[108,276,277,280],{},[31,278,279],{},"\u003Chr>","水平线标签（但是不常用！）",[108,282,283],{},"ctrl+0回到页面原来大小",[14,285,287],{"id":286},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[19,289,291],{"id":290},"_721-快速生成html","7.2.1 快速生成html",[108,293,294,295],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[31,296,297],{},"\u003Cdiv>``\u003C\u002Fdiv>",[108,299,300],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[108,302,303],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[108,305,306],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[108,308,309],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[108,311,312],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[108,314,315],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[24,317,319],{"className":26,"code":318,"language":28,"meta":29,"style":29},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[31,320,321,326,331,336,341,346,351,357],{"__ignoreMap":29},[34,322,323],{"class":36,"line":37},[34,324,325],{"class":205},"\u003C!-- Emmet 语法示例 -->\n",[34,327,328],{"class":36,"line":51},[34,329,330],{"class":205},"\u003C!-- div*3        → 生成3个div -->\n",[34,332,333],{"class":36,"line":60},[34,334,335],{"class":205},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[34,337,338],{"class":36,"line":76},[34,339,340],{"class":205},"\u003C!-- div+p        → 兄弟div和p -->\n",[34,342,343],{"class":36,"line":93},[34,344,345],{"class":205},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[34,347,348],{"class":36,"line":99},[34,349,350],{"class":205},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[34,352,354],{"class":36,"line":353},7,[34,355,356],{"class":205},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[34,358,360],{"class":36,"line":359},8,[34,361,362],{"class":205},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[19,364,366],{"id":365},"_722-快速生成css","7.2.2 快速生成css",[108,368,369],{},"简写开头",[108,371,372],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,374,376],{"id":375},"_73-css复合选择器","7.3 css复合选择器",[19,378,380],{"id":379},"_731-后代选择器","7.3.1 后代选择器",[24,382,384],{"className":196,"code":383,"language":198,"meta":29,"style":29},".parent .child {\n  color: blue;\n}\n",[31,385,386,396,406],{"__ignoreMap":29},[34,387,388,391,394],{"class":36,"line":37},[34,389,390],{"class":149},".parent",[34,392,393],{"class":149}," .child",[34,395,57],{"class":40},[34,397,398,400,402,404],{"class":36,"line":51},[34,399,217],{"class":63},[34,401,67],{"class":40},[34,403,70],{"class":63},[34,405,73],{"class":40},[34,407,408],{"class":36,"line":60},[34,409,241],{"class":40},[108,411,412],{},"元素1 元素2 {样式声明}",[108,414,415],{},[111,416,417],{},"注意点:",[108,419,420],{},"①元素1和元素2中间用空格隔开",[108,422,423],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[108,425,426],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[108,428,429],{},"④元素1和元素2可以是任意基础选择器",[19,431,433],{"id":432},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[108,435,436],{},[111,437,417],{},[108,439,440],{},"①元素1和元素2中间用大于号隔开",[108,442,423],{},[108,444,445],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[19,447,449],{"id":448},"_733-并集选择器","7.3.3 并集选择器",[108,451,452],{},"元素1，元素2 {样式声明}",[108,454,455],{},[111,456,417],{},[108,458,459],{},"①元素1和元素2中间用逗号隔开",[108,461,462],{},"②逗号可以理解为和的意思",[108,464,465],{},"③并集选择器通常用于集体声明",[19,467,469],{"id":468},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[108,471,472],{},[111,473,417],{},[108,475,476,477,479],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[256,478],{},"－:visited－:hover－:active。",[108,481,482,483,486,487,490],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[484,485],"hover",{}," 、 ",[488,489],"first-child",{}," 。",[108,492,493],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[108,495,496],{},"link对没访问的进行设置",[108,498,499],{},"vistied对已访问的进行改变",[108,501,502],{},"hover鼠标经过就会变",[108,504,505],{},"active常按(点)就会变",[24,507,509],{"className":196,"code":508,"language":198,"meta":29,"style":29},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[31,510,511,516,526,537,549,553,562,573,577,587,599,611,616,626,638],{"__ignoreMap":29},[34,512,513],{"class":36,"line":37},[34,514,515],{"class":205},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[34,517,518,521,524],{"class":36,"line":51},[34,519,520],{"class":44},"a",[34,522,523],{"class":149},":link",[34,525,57],{"class":40},[34,527,528,530,532,535],{"class":36,"line":60},[34,529,217],{"class":63},[34,531,67],{"class":40},[34,533,534],{"class":63},"#333",[34,536,73],{"class":40},[34,538,539,542,544,547],{"class":36,"line":76},[34,540,541],{"class":63},"  text-decoration",[34,543,67],{"class":40},[34,545,546],{"class":63},"none",[34,548,73],{"class":40},[34,550,551],{"class":36,"line":93},[34,552,241],{"class":40},[34,554,555,557,560],{"class":36,"line":99},[34,556,520],{"class":44},[34,558,559],{"class":149},":visited",[34,561,57],{"class":40},[34,563,564,566,568,571],{"class":36,"line":353},[34,565,217],{"class":63},[34,567,67],{"class":40},[34,569,570],{"class":63},"purple",[34,572,73],{"class":40},[34,574,575],{"class":36,"line":359},[34,576,241],{"class":40},[34,578,580,582,585],{"class":36,"line":579},9,[34,581,520],{"class":44},[34,583,584],{"class":149},":hover",[34,586,57],{"class":40},[34,588,590,592,594,597],{"class":36,"line":589},10,[34,591,217],{"class":63},[34,593,67],{"class":40},[34,595,596],{"class":63},"skyblue",[34,598,73],{"class":40},[34,600,602,604,606,609],{"class":36,"line":601},11,[34,603,541],{"class":63},[34,605,67],{"class":40},[34,607,608],{"class":63},"underline",[34,610,73],{"class":40},[34,612,614],{"class":36,"line":613},12,[34,615,241],{"class":40},[34,617,619,621,624],{"class":36,"line":618},13,[34,620,520],{"class":44},[34,622,623],{"class":149},":active",[34,625,57],{"class":40},[34,627,629,631,633,636],{"class":36,"line":628},14,[34,630,217],{"class":63},[34,632,67],{"class":40},[34,634,635],{"class":63},"green",[34,637,73],{"class":40},[34,639,641],{"class":36,"line":640},15,[34,642,241],{"class":40},[19,644,646,647,650],{"id":645},"_735-伪类选择器","7.3.5 ",[648,649],"focus",{},"伪类选择器",[108,652,653,655,656,659],{},[648,654],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[31,657,658],{},"\u003Cinput>"," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[24,661,663],{"className":196,"code":662,"language":198,"meta":29,"style":29},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[31,664,665,675,686,697],{"__ignoreMap":29},[34,666,667,670,673],{"class":36,"line":37},[34,668,669],{"class":44},"input",[34,671,672],{"class":149},":focus",[34,674,57],{"class":40},[34,676,677,680,682,684],{"class":36,"line":51},[34,678,679],{"class":63},"  border-color",[34,681,67],{"class":40},[34,683,596],{"class":63},[34,685,73],{"class":40},[34,687,688,691,693,695],{"class":36,"line":60},[34,689,690],{"class":63},"  outline",[34,692,67],{"class":40},[34,694,546],{"class":63},[34,696,73],{"class":40},[34,698,699],{"class":36,"line":76},[34,700,241],{"class":40},[45,702,703],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":705},[706,711,715],{"id":16,"depth":51,"text":17,"children":707},[708,709,710],{"id":21,"depth":60,"text":22},{"id":134,"depth":60,"text":135},{"id":186,"depth":60,"text":187},{"id":286,"depth":51,"text":287,"children":712},[713,714],{"id":290,"depth":60,"text":291},{"id":365,"depth":60,"text":366},{"id":375,"depth":51,"text":376,"children":716},[717,718,719,720,721],{"id":379,"depth":60,"text":380},{"id":432,"depth":60,"text":433},{"id":448,"depth":60,"text":449},{"id":468,"depth":60,"text":469},{"id":645,"depth":60,"text":722},"7.3.5 伪类选择器",null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":5,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",[732,5815,6923,8343,11332,12683,14172,15261,24023,24035,24634,24660,24784,25025,25090,25108,25121,25168,25292,25461,25660,25840,26045,26181,26276,26313,26326,26635,27375,28083,28104,29124,30755,30906,30919,30931,31232,51044,51059,51076,51109,53976,77309,93453,93474,93587,93708,94478,95141,95502,95540,95646,95746,95789,95815,95876,97530,97631,97656,98147,98647,99727,100010,100752,101254,101266,103282,104946,106449,108147,110064,111983,114005,117475,117907,118370,119119,122063,122411,122433,122789,126096,126108,126511,126534,126681,126848,127053,127350,127906,128439,130370,131968,132617,134111,135542,136777,138471,140223,142633,142749,143684,143895,144780,146015,146243,146256,147411,149823,152191,155512,157989,159633,161410,163423,166475,168655,171182,173376],{"id":733,"title":734,"body":735,"description":29,"extension":724,"meta":5810,"navigation":726,"path":5811,"seo":5812,"stem":5813,"__hash__":5814},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":736,"toc":5782},[737,740,744,747,751,764,768,772,775,778,781,784,787,815,819,822,825,828,831,881,885,903,905,919,922,930,933,1792,1799,1816,1820,1906,1910,1916,2001,2005,2043,2047,2111,2115,2119,2126,2137,2141,2146,2150,2155,2159,2164,2168,2172,2177,2441,2446,2584,2589,2845,2848,2856,2860,2865,2968,2971,3277,3286,3387,3390,3393,3396,3399,3659,3664,3804,3807,3986,3989,4117,4120,4272,4276,4281,4284,4295,4303,4306,4413,4417,4421,4426,4476,4481,4486,4510,4515,4568,4571,4576,4753,4758,5043,5048,5445,5449,5454,5511,5516,5524,5527,5667,5670,5779],[10,738,734],{"id":739},"_1基础入门",[14,741,743],{"id":742},"_11注释","1.1注释",[108,745,746],{},"\u002F\u002F或者\u002F* *\u002F",[14,748,750],{"id":749},"_12命名","1.2命名",[752,753,754,758,761],"ol",{},[755,756,757],"li",{},"字母数字下划线",[755,759,760],{},"开头必须是字母或_",[755,762,763],{},"不能使用关键词",[14,765,767],{"id":766},"_13数据类型","1.3数据类型",[19,769,771],{"id":770},"_131整形","1.3.1整形",[108,773,774],{},"short 短整形 2",[108,776,777],{},"int 整形 4",[108,779,780],{},"long 长整形 win4 linux32位4 linux64位8",[108,782,783],{},"long long 长长整形 8",[108,785,786],{},"利用sizeof可以求数据类型占用的内存空间大小",[24,788,792],{"className":789,"code":790,"language":791,"meta":29,"style":29},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[31,793,794,808],{"__ignoreMap":29},[34,795,796,799,802,805],{"class":36,"line":37},[34,797,798],{"class":87},"sizeof",[34,800,801],{"class":40},"(",[34,803,804],{"class":87},"int",[34,806,807],{"class":40},")\n",[34,809,810,812],{"class":36,"line":51},[34,811,798],{"class":87},[34,813,814],{"class":40},"(num)\n",[19,816,818],{"id":817},"_132浮点型","1.3.2浮点型",[108,820,821],{},"float 单精度 4节 7位有效数字",[108,823,824],{},"double 双精度 8节 15-16有效数字",[108,826,827],{},"默认情况下，输出一个小数，会显示6位有效数字",[108,829,830],{},"注意点：",[24,832,834],{"className":789,"code":833,"language":791,"meta":29,"style":29},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[31,835,836,858],{"__ignoreMap":29},[34,837,838,841,844,846,849,852,855],{"class":36,"line":37},[34,839,840],{"class":87},"float",[34,842,843],{"class":40}," f1",[34,845,153],{"class":87},[34,847,848],{"class":63},"3.14",[34,850,851],{"class":87},"f",[34,853,854],{"class":40},";",[34,856,857],{"class":205}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[34,859,860,862,865,867,870,873,876,878],{"class":36,"line":51},[34,861,840],{"class":87},[34,863,864],{"class":40}," f2",[34,866,153],{"class":87},[34,868,869],{"class":63},"3",[34,871,872],{"class":87},"e",[34,874,875],{"class":63},"2",[34,877,854],{"class":40},[34,879,880],{"class":205}," \u002F\u002F科学记数法\n",[19,882,884],{"id":883},"_133字符型","1.3.3字符型",[24,886,888],{"className":789,"code":887,"language":791,"meta":29,"style":29},"char ch='a'\n",[31,889,890],{"__ignoreMap":29},[34,891,892,895,898,900],{"class":36,"line":37},[34,893,894],{"class":87},"char",[34,896,897],{"class":40}," ch",[34,899,153],{"class":87},[34,901,902],{"class":156},"'a'\n",[108,904,830],{},[752,906,907,910,913,916],{},[755,908,909],{},"在显示字符型变量时，只能单引号，双引号x",[755,911,912],{},"单引号内只能一个字符，不能字符串",[755,914,915],{},"c和c++字符型变量只占用一个字符",[755,917,918],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[108,920,921],{},"ASCII码大致由以下两部分组成：",[752,923,924,927],{},[755,925,926],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[755,928,929],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[108,931,932],{},"ASCII码表格：",[934,935,936,979],"table",{},[937,938,939],"thead",{},[940,941,942,949,954,958,963,967,971,975],"tr",{},[943,944,945,948],"th",{},[111,946,947],{},"ASCII","值",[943,950,951],{},[111,952,953],{},"控制字符",[943,955,956,948],{},[111,957,947],{},[943,959,960],{},[111,961,962],{},"字符",[943,964,965,948],{},[111,966,947],{},[943,968,969],{},[111,970,962],{},[943,972,973,948],{},[111,974,947],{},[943,976,977],{},[111,978,962],{},[980,981,982,1009,1034,1059,1084,1110,1135,1160,1186,1211,1237,1263,1289,1314,1340,1366,1392,1416,1441,1466,1491,1516,1541,1566,1591,1615,1640,1666,1691,1715,1740,1766],"tbody",{},[940,983,984,988,991,994,997,1000,1003,1006],{},[985,986,987],"td",{},"0",[985,989,990],{},"NUT",[985,992,993],{},"32",[985,995,996],{},"(space)",[985,998,999],{},"64",[985,1001,1002],{},"@",[985,1004,1005],{},"96",[985,1007,1008],{},"、",[940,1010,1011,1014,1017,1020,1023,1026,1029,1032],{},[985,1012,1013],{},"1",[985,1015,1016],{},"SOH",[985,1018,1019],{},"33",[985,1021,1022],{},"!",[985,1024,1025],{},"65",[985,1027,1028],{},"A",[985,1030,1031],{},"97",[985,1033,520],{},[940,1035,1036,1038,1041,1044,1047,1050,1053,1056],{},[985,1037,875],{},[985,1039,1040],{},"STX",[985,1042,1043],{},"34",[985,1045,1046],{},"\"",[985,1048,1049],{},"66",[985,1051,1052],{},"B",[985,1054,1055],{},"98",[985,1057,1058],{},"b",[940,1060,1061,1063,1066,1069,1072,1075,1078,1081],{},[985,1062,869],{},[985,1064,1065],{},"ETX",[985,1067,1068],{},"35",[985,1070,1071],{},"#",[985,1073,1074],{},"67",[985,1076,1077],{},"C",[985,1079,1080],{},"99",[985,1082,1083],{},"c",[940,1085,1086,1089,1092,1095,1098,1101,1104,1107],{},[985,1087,1088],{},"4",[985,1090,1091],{},"EOT",[985,1093,1094],{},"36",[985,1096,1097],{},"$",[985,1099,1100],{},"68",[985,1102,1103],{},"D",[985,1105,1106],{},"100",[985,1108,1109],{},"d",[940,1111,1112,1115,1118,1121,1124,1127,1130,1133],{},[985,1113,1114],{},"5",[985,1116,1117],{},"ENQ",[985,1119,1120],{},"37",[985,1122,1123],{},"%",[985,1125,1126],{},"69",[985,1128,1129],{},"E",[985,1131,1132],{},"101",[985,1134,872],{},[940,1136,1137,1140,1143,1146,1149,1152,1155,1158],{},[985,1138,1139],{},"6",[985,1141,1142],{},"ACK",[985,1144,1145],{},"38",[985,1147,1148],{},"&",[985,1150,1151],{},"70",[985,1153,1154],{},"F",[985,1156,1157],{},"102",[985,1159,851],{},[940,1161,1162,1165,1168,1171,1174,1177,1180,1183],{},[985,1163,1164],{},"7",[985,1166,1167],{},"BEL",[985,1169,1170],{},"39",[985,1172,1173],{},",",[985,1175,1176],{},"71",[985,1178,1179],{},"G",[985,1181,1182],{},"103",[985,1184,1185],{},"g",[940,1187,1188,1191,1194,1197,1199,1202,1205,1208],{},[985,1189,1190],{},"8",[985,1192,1193],{},"BS",[985,1195,1196],{},"40",[985,1198,801],{},[985,1200,1201],{},"72",[985,1203,1204],{},"H",[985,1206,1207],{},"104",[985,1209,1210],{},"h",[940,1212,1213,1216,1219,1222,1225,1228,1231,1234],{},[985,1214,1215],{},"9",[985,1217,1218],{},"HT",[985,1220,1221],{},"41",[985,1223,1224],{},")",[985,1226,1227],{},"73",[985,1229,1230],{},"I",[985,1232,1233],{},"105",[985,1235,1236],{},"i",[940,1238,1239,1242,1245,1248,1251,1254,1257,1260],{},[985,1240,1241],{},"10",[985,1243,1244],{},"LF",[985,1246,1247],{},"42",[985,1249,1250],{},"*",[985,1252,1253],{},"74",[985,1255,1256],{},"J",[985,1258,1259],{},"106",[985,1261,1262],{},"j",[940,1264,1265,1268,1271,1274,1277,1280,1283,1286],{},[985,1266,1267],{},"11",[985,1269,1270],{},"VT",[985,1272,1273],{},"43",[985,1275,1276],{},"+",[985,1278,1279],{},"75",[985,1281,1282],{},"K",[985,1284,1285],{},"107",[985,1287,1288],{},"k",[940,1290,1291,1294,1297,1300,1302,1305,1308,1311],{},[985,1292,1293],{},"12",[985,1295,1296],{},"FF",[985,1298,1299],{},"44",[985,1301,1173],{},[985,1303,1304],{},"76",[985,1306,1307],{},"L",[985,1309,1310],{},"108",[985,1312,1313],{},"l",[940,1315,1316,1319,1322,1325,1328,1331,1334,1337],{},[985,1317,1318],{},"13",[985,1320,1321],{},"CR",[985,1323,1324],{},"45",[985,1326,1327],{},"-",[985,1329,1330],{},"77",[985,1332,1333],{},"M",[985,1335,1336],{},"109",[985,1338,1339],{},"m",[940,1341,1342,1345,1348,1351,1354,1357,1360,1363],{},[985,1343,1344],{},"14",[985,1346,1347],{},"SO",[985,1349,1350],{},"46",[985,1352,1353],{},".",[985,1355,1356],{},"78",[985,1358,1359],{},"N",[985,1361,1362],{},"110",[985,1364,1365],{},"n",[940,1367,1368,1371,1374,1377,1380,1383,1386,1389],{},[985,1369,1370],{},"15",[985,1372,1373],{},"SI",[985,1375,1376],{},"47",[985,1378,1379],{},"\u002F",[985,1381,1382],{},"79",[985,1384,1385],{},"O",[985,1387,1388],{},"111",[985,1390,1391],{},"o",[940,1393,1394,1397,1400,1403,1405,1408,1411,1414],{},[985,1395,1396],{},"16",[985,1398,1399],{},"DLE",[985,1401,1402],{},"48",[985,1404,987],{},[985,1406,1407],{},"80",[985,1409,1410],{},"P",[985,1412,1413],{},"112",[985,1415,108],{},[940,1417,1418,1421,1424,1427,1429,1432,1435,1438],{},[985,1419,1420],{},"17",[985,1422,1423],{},"DCI",[985,1425,1426],{},"49",[985,1428,1013],{},[985,1430,1431],{},"81",[985,1433,1434],{},"Q",[985,1436,1437],{},"113",[985,1439,1440],{},"q",[940,1442,1443,1446,1449,1452,1454,1457,1460,1463],{},[985,1444,1445],{},"18",[985,1447,1448],{},"DC2",[985,1450,1451],{},"50",[985,1453,875],{},[985,1455,1456],{},"82",[985,1458,1459],{},"R",[985,1461,1462],{},"114",[985,1464,1465],{},"r",[940,1467,1468,1471,1474,1477,1479,1482,1485,1488],{},[985,1469,1470],{},"19",[985,1472,1473],{},"DC3",[985,1475,1476],{},"51",[985,1478,869],{},[985,1480,1481],{},"83",[985,1483,1484],{},"S",[985,1486,1487],{},"115",[985,1489,1490],{},"s",[940,1492,1493,1496,1499,1502,1504,1507,1510,1513],{},[985,1494,1495],{},"20",[985,1497,1498],{},"DC4",[985,1500,1501],{},"52",[985,1503,1088],{},[985,1505,1506],{},"84",[985,1508,1509],{},"T",[985,1511,1512],{},"116",[985,1514,1515],{},"t",[940,1517,1518,1521,1524,1527,1529,1532,1535,1538],{},[985,1519,1520],{},"21",[985,1522,1523],{},"NAK",[985,1525,1526],{},"53",[985,1528,1114],{},[985,1530,1531],{},"85",[985,1533,1534],{},"U",[985,1536,1537],{},"117",[985,1539,1540],{},"u",[940,1542,1543,1546,1549,1552,1554,1557,1560,1563],{},[985,1544,1545],{},"22",[985,1547,1548],{},"SYN",[985,1550,1551],{},"54",[985,1553,1139],{},[985,1555,1556],{},"86",[985,1558,1559],{},"V",[985,1561,1562],{},"118",[985,1564,1565],{},"v",[940,1567,1568,1571,1574,1577,1579,1582,1585,1588],{},[985,1569,1570],{},"23",[985,1572,1573],{},"TB",[985,1575,1576],{},"55",[985,1578,1164],{},[985,1580,1581],{},"87",[985,1583,1584],{},"W",[985,1586,1587],{},"119",[985,1589,1590],{},"w",[940,1592,1593,1595,1598,1601,1603,1606,1609,1612],{},[985,1594,84],{},[985,1596,1597],{},"CAN",[985,1599,1600],{},"56",[985,1602,1190],{},[985,1604,1605],{},"88",[985,1607,1608],{},"X",[985,1610,1611],{},"120",[985,1613,1614],{},"x",[940,1616,1617,1620,1623,1626,1628,1631,1634,1637],{},[985,1618,1619],{},"25",[985,1621,1622],{},"EM",[985,1624,1625],{},"57",[985,1627,1215],{},[985,1629,1630],{},"89",[985,1632,1633],{},"Y",[985,1635,1636],{},"121",[985,1638,1639],{},"y",[940,1641,1642,1645,1648,1651,1654,1657,1660,1663],{},[985,1643,1644],{},"26",[985,1646,1647],{},"SUB",[985,1649,1650],{},"58",[985,1652,1653],{},":",[985,1655,1656],{},"90",[985,1658,1659],{},"Z",[985,1661,1662],{},"122",[985,1664,1665],{},"z",[940,1667,1668,1671,1674,1677,1679,1682,1685,1688],{},[985,1669,1670],{},"27",[985,1672,1673],{},"ESC",[985,1675,1676],{},"59",[985,1678,854],{},[985,1680,1681],{},"91",[985,1683,1684],{},"[",[985,1686,1687],{},"123",[985,1689,1690],{},"{",[940,1692,1693,1696,1699,1702,1704,1707,1709,1712],{},[985,1694,1695],{},"28",[985,1697,1698],{},"FS",[985,1700,1701],{},"60",[985,1703,41],{},[985,1705,1706],{},"92",[985,1708,1379],{},[985,1710,1711],{},"124",[985,1713,1714],{},"|",[940,1716,1717,1720,1723,1726,1728,1731,1734,1737],{},[985,1718,1719],{},"29",[985,1721,1722],{},"GS",[985,1724,1725],{},"61",[985,1727,153],{},[985,1729,1730],{},"93",[985,1732,1733],{},"]",[985,1735,1736],{},"125",[985,1738,1739],{},"}",[940,1741,1742,1745,1748,1751,1754,1757,1760,1763],{},[985,1743,1744],{},"30",[985,1746,1747],{},"RS",[985,1749,1750],{},"62",[985,1752,1753],{},">",[985,1755,1756],{},"94",[985,1758,1759],{},"^",[985,1761,1762],{},"126",[985,1764,1765],{},"`",[940,1767,1768,1771,1774,1777,1780,1783,1786,1789],{},[985,1769,1770],{},"31",[985,1772,1773],{},"US",[985,1775,1776],{},"63",[985,1778,1779],{},"?",[985,1781,1782],{},"95",[985,1784,1785],{},"_",[985,1787,1788],{},"127",[985,1790,1791],{},"DEL",[108,1793,1794,1795,1798],{},"ASCII 码大致由以下",[111,1796,1797],{},"两部分组","成：",[1800,1801,1802,1809],"ul",{},[755,1803,1804,1805,1808],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[111,1806,1807],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[755,1810,1811,1812,1815],{},"ASCII 打印字符：数字 ",[111,1813,1814],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[19,1817,1819],{"id":1818},"_134转义字符","1.3.4转义字符",[24,1821,1823],{"className":789,"code":1822,"language":791,"meta":29,"style":29},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[31,1824,1825,1830,1846,1860,1865,1878,1883],{"__ignoreMap":29},[34,1826,1827],{"class":36,"line":37},[34,1828,1829],{"class":205},"\u002F\u002F换行符\n",[34,1831,1832,1835,1838,1841,1843],{"class":36,"line":51},[34,1833,1834],{"class":40},"cout ",[34,1836,1837],{"class":87},"\u003C\u003C",[34,1839,1840],{"class":156},"\"hello world\u002Fn\"",[34,1842,854],{"class":40},[34,1844,1845],{"class":205}," \u002F\u002F就等同于如下：\n",[34,1847,1848,1850,1852,1855,1857],{"class":36,"line":60},[34,1849,1834],{"class":40},[34,1851,1837],{"class":87},[34,1853,1854],{"class":156},"\"hello world\"",[34,1856,1837],{"class":87},[34,1858,1859],{"class":40},"endl;\n",[34,1861,1862],{"class":36,"line":76},[34,1863,1864],{"class":205},"\u002F\u002F反斜杠\n",[34,1866,1867,1869,1871,1874,1876],{"class":36,"line":93},[34,1868,1834],{"class":40},[34,1870,1837],{"class":87},[34,1872,1873],{"class":156},"\"\u002F\u002F\"",[34,1875,1837],{"class":87},[34,1877,1859],{"class":40},[34,1879,1880],{"class":36,"line":99},[34,1881,1882],{"class":205},"\u002F\u002F水平制表符\n",[34,1884,1885,1887,1889,1892,1895,1898,1900,1903],{"class":36,"line":353},[34,1886,1834],{"class":40},[34,1888,1837],{"class":87},[34,1890,1891],{"class":156},"\"aaaa",[34,1893,1894],{"class":63},"\\t",[34,1896,1897],{"class":156},"helloworld\"",[34,1899,1837],{"class":87},[34,1901,1902],{"class":40},"endl;",[34,1904,1905],{"class":205}," \u002F\u002F输出窗口时有对齐效果\n",[19,1907,1909],{"id":1908},"_135字符串型","1.3.5字符串型",[108,1911,1912,1913,1915],{},"char 变量名",[34,1914],{},"=\"字符串值\"",[24,1917,1919],{"className":789,"code":1918,"language":791,"meta":29,"style":29},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[31,1920,1921,1926,1931,1936,1941,1954,1967,1972,1977,1988],{"__ignoreMap":29},[34,1922,1923],{"class":36,"line":37},[34,1924,1925],{"class":205},"\u002F\u002Fc风格字符串\n",[34,1927,1928],{"class":36,"line":51},[34,1929,1930],{"class":205},"\u002F\u002F注意事项：\n",[34,1932,1933],{"class":36,"line":60},[34,1934,1935],{"class":205},"\u002F\u002F1.char字符串名[]\n",[34,1937,1938],{"class":36,"line":76},[34,1939,1940],{"class":205},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[34,1942,1943,1945,1948,1950,1952],{"class":36,"line":93},[34,1944,894],{"class":87},[34,1946,1947],{"class":40}," str[]",[34,1949,153],{"class":87},[34,1951,1854],{"class":156},[34,1953,73],{"class":40},[34,1955,1956,1958,1960,1963,1965],{"class":36,"line":99},[34,1957,1834],{"class":40},[34,1959,1837],{"class":87},[34,1961,1962],{"class":40},"str",[34,1964,1837],{"class":87},[34,1966,1859],{"class":40},[34,1968,1969],{"class":36,"line":353},[34,1970,1971],{"class":205},"\u002F\u002Fc++风格字符串\n",[34,1973,1974],{"class":36,"line":359},[34,1975,1976],{"class":205},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[34,1978,1979,1982,1984,1986],{"class":36,"line":579},[34,1980,1981],{"class":40},"string str2",[34,1983,153],{"class":87},[34,1985,1854],{"class":156},[34,1987,73],{"class":40},[34,1989,1990,1992,1994,1997,1999],{"class":36,"line":589},[34,1991,1834],{"class":40},[34,1993,1837],{"class":87},[34,1995,1996],{"class":40},"str2",[34,1998,1837],{"class":87},[34,2000,1859],{"class":40},[19,2002,2004],{"id":2003},"_136布尔类型bool","1.3.6布尔类型bool",[24,2006,2008],{"className":789,"code":2007,"language":791,"meta":29,"style":29},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[31,2009,2010,2025],{"__ignoreMap":29},[34,2011,2012,2015,2018,2020,2023],{"class":36,"line":37},[34,2013,2014],{"class":87},"bool",[34,2016,2017],{"class":40}," flag",[34,2019,153],{"class":87},[34,2021,2022],{"class":63},"true",[34,2024,73],{"class":40},[34,2026,2027,2030,2033,2036,2038,2040],{"class":36,"line":51},[34,2028,2029],{"class":40},"cout",[34,2031,2032],{"class":87},"\u003C\u003Csizeof",[34,2034,2035],{"class":40},"(flag)",[34,2037,1837],{"class":87},[34,2039,1902],{"class":40},[34,2041,2042],{"class":205}," \u002F\u002F查看布尔占内存空间\n",[14,2044,2046],{"id":2045},"_14键盘输入cin","1.4键盘输入cin",[24,2048,2050],{"className":789,"code":2049,"language":791,"meta":29,"style":29},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[31,2051,2052,2065,2082,2093],{"__ignoreMap":29},[34,2053,2054,2056,2059,2061,2063],{"class":36,"line":37},[34,2055,804],{"class":87},[34,2057,2058],{"class":40}," a",[34,2060,153],{"class":87},[34,2062,987],{"class":63},[34,2064,73],{"class":40},[34,2066,2067,2069,2071,2074,2076,2078,2080],{"class":36,"line":51},[34,2068,2029],{"class":40},[34,2070,1837],{"class":87},[34,2072,2073],{"class":156},"\"请给整型变量a赋值\"",[34,2075,1837],{"class":87},[34,2077,520],{"class":40},[34,2079,1837],{"class":87},[34,2081,1859],{"class":40},[34,2083,2084,2087,2090],{"class":36,"line":60},[34,2085,2086],{"class":40},"cin ",[34,2088,2089],{"class":87},">>",[34,2091,2092],{"class":40}," a;\n",[34,2094,2095,2097,2099,2102,2105,2107,2109],{"class":36,"line":76},[34,2096,1834],{"class":40},[34,2098,1837],{"class":87},[34,2100,2101],{"class":156}," \"整型变量a=\"",[34,2103,2104],{"class":87}," \u003C\u003C",[34,2106,520],{"class":40},[34,2108,1837],{"class":87},[34,2110,1859],{"class":40},[14,2112,2114],{"id":2113},"_15运算符","1.5运算符",[19,2116,2118],{"id":2117},"_151算术运算符","1.5.1算术运算符",[108,2120,2121,2125],{},[2122,2123],"img",{"alt":29,"src":2124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[752,2127,2128,2131,2134],{},[755,2129,2130],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[755,2132,2133],{},"两个小数不可以做取模运算",[755,2135,2136],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[19,2138,2140],{"id":2139},"_152赋值运算符","1.5.2赋值运算符",[108,2142,2143],{},[2122,2144],{"alt":29,"src":2145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[19,2147,2149],{"id":2148},"_153比较运算符","1.5.3比较运算符",[108,2151,2152],{},[2122,2153],{"alt":29,"src":2154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[19,2156,2158],{"id":2157},"_154逻辑运算符","1.5.4逻辑运算符",[108,2160,2161],{},[2122,2162],{"alt":29,"src":2163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2165,2167],{"id":2166},"_16程序流程结构","1.6程序流程结构",[19,2169,2171],{"id":2170},"_161选择结构","1.6.1选择结构",[752,2173,2174],{},[755,2175,2176],{},"if语句\n单行、多行、多条件if语句",[24,2178,2180],{"className":789,"code":2179,"language":791,"meta":29,"style":29},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[31,2181,2182,2187,2202,2207,2221,2225,2230,2239,2252,2256,2269,2273,2278,2282,2295,2299,2305,2326,2331,2345,2350,2379,2384,2401,2406,2411,2416,2430,2435],{"__ignoreMap":29},[34,2183,2184],{"class":36,"line":37},[34,2185,2186],{"class":205},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[34,2188,2189,2192,2195,2197,2200],{"class":36,"line":51},[34,2190,2191],{"class":87},"if",[34,2193,2194],{"class":40},"(score",[34,2196,1753],{"class":87},[34,2198,2199],{"class":63},"600",[34,2201,807],{"class":40},[34,2203,2204],{"class":36,"line":60},[34,2205,2206],{"class":40},"{\n",[34,2208,2209,2212,2214,2217,2219],{"class":36,"line":76},[34,2210,2211],{"class":40},"    cout",[34,2213,1837],{"class":87},[34,2215,2216],{"class":156},"'这是单行if语句'",[34,2218,1837],{"class":87},[34,2220,1859],{"class":40},[34,2222,2223],{"class":36,"line":93},[34,2224,241],{"class":40},[34,2226,2227],{"class":36,"line":99},[34,2228,2229],{"class":205},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[34,2231,2232,2234,2236],{"class":36,"line":353},[34,2233,2086],{"class":40},[34,2235,2089],{"class":87},[34,2237,2238],{"class":40}," score\n",[34,2240,2241,2243,2245,2248,2250],{"class":36,"line":359},[34,2242,2191],{"class":87},[34,2244,2194],{"class":40},[34,2246,2247],{"class":87},"\u003C=",[34,2249,2199],{"class":63},[34,2251,807],{"class":40},[34,2253,2254],{"class":36,"line":579},[34,2255,2206],{"class":40},[34,2257,2258,2260,2262,2265,2267],{"class":36,"line":589},[34,2259,2211],{"class":40},[34,2261,2089],{"class":87},[34,2263,2264],{"class":156},"\"小于等于600\"",[34,2266,1837],{"class":87},[34,2268,1859],{"class":40},[34,2270,2271],{"class":36,"line":601},[34,2272,241],{"class":40},[34,2274,2275],{"class":36,"line":613},[34,2276,2277],{"class":87},"else\n",[34,2279,2280],{"class":36,"line":618},[34,2281,2206],{"class":40},[34,2283,2284,2286,2288,2291,2293],{"class":36,"line":628},[34,2285,2211],{"class":40},[34,2287,2089],{"class":87},[34,2289,2290],{"class":156},"\"大于600\"",[34,2292,2089],{"class":87},[34,2294,1859],{"class":40},[34,2296,2297],{"class":36,"line":640},[34,2298,241],{"class":40},[34,2300,2302],{"class":36,"line":2301},16,[34,2303,2304],{"class":205},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[34,2306,2308,2310,2313,2315,2317,2320,2322,2324],{"class":36,"line":2307},17,[34,2309,2191],{"class":87},[34,2311,2312],{"class":40}," (",[34,2314,987],{"class":63},[34,2316,41],{"class":87},[34,2318,2319],{"class":40},"num",[34,2321,41],{"class":87},[34,2323,1106],{"class":63},[34,2325,807],{"class":40},[34,2327,2329],{"class":36,"line":2328},18,[34,2330,2206],{"class":40},[34,2332,2334,2336,2338,2341,2343],{"class":36,"line":2333},19,[34,2335,2211],{"class":40},[34,2337,1837],{"class":87},[34,2339,2340],{"class":156},"\"小于100\"",[34,2342,1837],{"class":87},[34,2344,1859],{"class":40},[34,2346,2348],{"class":36,"line":2347},20,[34,2349,241],{"class":40},[34,2351,2353,2356,2359,2362,2365,2367,2370,2372,2374,2377],{"class":36,"line":2352},21,[34,2354,2355],{"class":87},"else",[34,2357,2358],{"class":87}," if",[34,2360,2361],{"class":40}," (nmu",[34,2363,2364],{"class":87},">=",[34,2366,1106],{"class":63},[34,2368,2369],{"class":87},"&&",[34,2371,2319],{"class":40},[34,2373,41],{"class":87},[34,2375,2376],{"class":63},"200",[34,2378,807],{"class":40},[34,2380,2382],{"class":36,"line":2381},22,[34,2383,2206],{"class":40},[34,2385,2387,2389,2391,2394,2396,2398],{"class":36,"line":2386},23,[34,2388,2211],{"class":40},[34,2390,1837],{"class":87},[34,2392,2393],{"class":156},"\"不小于100且小于200\"",[34,2395,1837],{"class":87},[34,2397,1902],{"class":40},[34,2399,2400],{"class":205}," \u002F\u002F可以无限else if,python中是elif：\n",[34,2402,2404],{"class":36,"line":2403},24,[34,2405,241],{"class":40},[34,2407,2409],{"class":36,"line":2408},25,[34,2410,2277],{"class":87},[34,2412,2414],{"class":36,"line":2413},26,[34,2415,2206],{"class":40},[34,2417,2419,2421,2423,2426,2428],{"class":36,"line":2418},27,[34,2420,2211],{"class":40},[34,2422,1837],{"class":87},[34,2424,2425],{"class":156},"\"不小于200\"",[34,2427,1837],{"class":87},[34,2429,1859],{"class":40},[34,2431,2433],{"class":36,"line":2432},28,[34,2434,241],{"class":40},[34,2436,2438],{"class":36,"line":2437},29,[34,2439,2440],{"class":205},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[752,2442,2443],{"start":51},[755,2444,2445],{},"三目运算符",[24,2447,2449],{"className":789,"code":2448,"language":791,"meta":29,"style":29},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[31,2450,2451,2456,2461,2487,2509,2526,2531,2554,2569],{"__ignoreMap":29},[34,2452,2453],{"class":36,"line":37},[34,2454,2455],{"class":205},"\u002F\u002F创建三个变量a,b,c\n",[34,2457,2458],{"class":36,"line":51},[34,2459,2460],{"class":205},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[34,2462,2463,2465,2467,2469,2471,2474,2476,2478,2481,2483,2485],{"class":36,"line":60},[34,2464,804],{"class":87},[34,2466,2058],{"class":40},[34,2468,153],{"class":87},[34,2470,1495],{"class":63},[34,2472,2473],{"class":40},",b",[34,2475,153],{"class":87},[34,2477,1241],{"class":63},[34,2479,2480],{"class":40},",c",[34,2482,153],{"class":87},[34,2484,987],{"class":63},[34,2486,73],{"class":40},[34,2488,2489,2491,2493,2496,2498,2500,2502,2504,2506],{"class":36,"line":76},[34,2490,1083],{"class":40},[34,2492,153],{"class":87},[34,2494,2495],{"class":40},"(a",[34,2497,1753],{"class":87},[34,2499,1058],{"class":40},[34,2501,1779],{"class":87},[34,2503,520],{"class":40},[34,2505,1653],{"class":87},[34,2507,2508],{"class":40},"b)\n",[34,2510,2511,2513,2515,2518,2520,2522,2524],{"class":36,"line":93},[34,2512,2029],{"class":40},[34,2514,1837],{"class":87},[34,2516,2517],{"class":156},"\"c=\"",[34,2519,1837],{"class":87},[34,2521,1083],{"class":40},[34,2523,1837],{"class":87},[34,2525,1859],{"class":40},[34,2527,2528],{"class":36,"line":99},[34,2529,2530],{"class":205},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[34,2532,2533,2535,2537,2539,2541,2543,2545,2548,2550,2552],{"class":36,"line":353},[34,2534,2495],{"class":40},[34,2536,1753],{"class":87},[34,2538,1058],{"class":40},[34,2540,1779],{"class":87},[34,2542,520],{"class":40},[34,2544,1653],{"class":87},[34,2546,2547],{"class":40},"b)",[34,2549,153],{"class":87},[34,2551,1106],{"class":63},[34,2553,73],{"class":40},[34,2555,2556,2558,2560,2562,2564,2566],{"class":36,"line":359},[34,2557,2029],{"class":40},[34,2559,1837],{"class":87},[34,2561,520],{"class":40},[34,2563,1837],{"class":87},[34,2565,1902],{"class":40},[34,2567,2568],{"class":205}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[34,2570,2571,2573,2575,2577,2579,2581],{"class":36,"line":579},[34,2572,2029],{"class":40},[34,2574,1837],{"class":87},[34,2576,1058],{"class":40},[34,2578,1837],{"class":87},[34,2580,1902],{"class":40},[34,2582,2583],{"class":205}," \u002F\u002F10   a>b,b还是原值\n",[752,2585,2586],{"start":60},[755,2587,2588],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[24,2590,2592],{"className":789,"code":2591,"language":791,"meta":29,"style":29},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[31,2593,2594,2599,2607,2620,2630,2634,2648,2661,2671,2679,2684,2709,2730,2752,2773,2795,2816,2836,2841],{"__ignoreMap":29},[34,2595,2596],{"class":36,"line":37},[34,2597,2598],{"class":205},"\u002F\u002F案例-电影打分\n",[34,2600,2601,2604],{"class":36,"line":51},[34,2602,2603],{"class":87},"#include",[34,2605,2606],{"class":156},"\u003Ciostream>\n",[34,2608,2609,2612,2615,2618],{"class":36,"line":60},[34,2610,2611],{"class":87},"using",[34,2613,2614],{"class":87}," namespace",[34,2616,2617],{"class":149}," std",[34,2619,73],{"class":40},[34,2621,2622,2624,2627],{"class":36,"line":76},[34,2623,804],{"class":87},[34,2625,2626],{"class":149}," main",[34,2628,2629],{"class":40},"()\n",[34,2631,2632],{"class":36,"line":93},[34,2633,2206],{"class":40},[34,2635,2636,2639,2642,2644,2646],{"class":36,"line":99},[34,2637,2638],{"class":87},"    int",[34,2640,2641],{"class":40}," score",[34,2643,153],{"class":87},[34,2645,987],{"class":63},[34,2647,73],{"class":40},[34,2649,2650,2652,2654,2657,2659],{"class":36,"line":353},[34,2651,2211],{"class":40},[34,2653,1837],{"class":87},[34,2655,2656],{"class":156},"\"电影打分：\"",[34,2658,1837],{"class":87},[34,2660,1859],{"class":40},[34,2662,2663,2666,2668],{"class":36,"line":359},[34,2664,2665],{"class":40},"    cin",[34,2667,2089],{"class":87},[34,2669,2670],{"class":40},"score;\n",[34,2672,2673,2676],{"class":36,"line":579},[34,2674,2675],{"class":87},"    switch",[34,2677,2678],{"class":40},"(score)\n",[34,2680,2681],{"class":36,"line":589},[34,2682,2683],{"class":40},"    {\n",[34,2685,2686,2689,2692,2695,2697,2700,2702,2704,2707],{"class":36,"line":601},[34,2687,2688],{"class":87},"        case",[34,2690,2691],{"class":63}," 10",[34,2693,2694],{"class":40},":cout",[34,2696,1837],{"class":87},[34,2698,2699],{"class":156},"\"经典\"",[34,2701,1837],{"class":87},[34,2703,1902],{"class":40},[34,2705,2706],{"class":87},"break",[34,2708,73],{"class":40},[34,2710,2711,2713,2716,2718,2720,2722,2724,2726,2728],{"class":36,"line":613},[34,2712,2688],{"class":87},[34,2714,2715],{"class":63}," 9",[34,2717,2694],{"class":40},[34,2719,1837],{"class":87},[34,2721,2699],{"class":156},[34,2723,1837],{"class":87},[34,2725,1902],{"class":40},[34,2727,2706],{"class":87},[34,2729,73],{"class":40},[34,2731,2732,2734,2737,2739,2741,2744,2746,2748,2750],{"class":36,"line":618},[34,2733,2688],{"class":87},[34,2735,2736],{"class":63}," 8",[34,2738,2694],{"class":40},[34,2740,1837],{"class":87},[34,2742,2743],{"class":156},"\"非常好\"",[34,2745,1837],{"class":87},[34,2747,1902],{"class":40},[34,2749,2706],{"class":87},[34,2751,73],{"class":40},[34,2753,2754,2756,2759,2761,2763,2765,2767,2769,2771],{"class":36,"line":628},[34,2755,2688],{"class":87},[34,2757,2758],{"class":63}," 7",[34,2760,2694],{"class":40},[34,2762,1837],{"class":87},[34,2764,2743],{"class":156},[34,2766,1837],{"class":87},[34,2768,1902],{"class":40},[34,2770,2706],{"class":87},[34,2772,73],{"class":40},[34,2774,2775,2777,2780,2782,2784,2787,2789,2791,2793],{"class":36,"line":640},[34,2776,2688],{"class":87},[34,2778,2779],{"class":63}," 6",[34,2781,2694],{"class":40},[34,2783,1837],{"class":87},[34,2785,2786],{"class":156},"\"一般\"",[34,2788,1837],{"class":87},[34,2790,1902],{"class":40},[34,2792,2706],{"class":87},[34,2794,73],{"class":40},[34,2796,2797,2799,2802,2804,2806,2808,2810,2812,2814],{"class":36,"line":2301},[34,2798,2688],{"class":87},[34,2800,2801],{"class":63}," 5",[34,2803,2694],{"class":40},[34,2805,1837],{"class":87},[34,2807,2786],{"class":156},[34,2809,1837],{"class":87},[34,2811,1902],{"class":40},[34,2813,2706],{"class":87},[34,2815,73],{"class":40},[34,2817,2818,2821,2823,2825,2828,2830,2832,2834],{"class":36,"line":2307},[34,2819,2820],{"class":87},"        default",[34,2822,2694],{"class":40},[34,2824,1837],{"class":87},[34,2826,2827],{"class":156},"\"烂片\"",[34,2829,1837],{"class":87},[34,2831,1902],{"class":40},[34,2833,2706],{"class":87},[34,2835,73],{"class":40},[34,2837,2838],{"class":36,"line":2328},[34,2839,2840],{"class":40},"    }\n",[34,2842,2843],{"class":36,"line":2333},[34,2844,241],{"class":40},[108,2846,2847],{},"if和switch区别：",[1800,2849,2850,2853],{},[755,2851,2852],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[755,2854,2855],{},"switch优点：结构清晰，执行效率高",[19,2857,2859],{"id":2858},"_162循环结构","1.6.2循环结构",[752,2861,2862],{},[755,2863,2864],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[24,2866,2868],{"className":789,"code":2867,"language":791,"meta":29,"style":29},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[31,2869,2870,2875,2883,2887,2900,2914,2918,2938,2948,2952,2964],{"__ignoreMap":29},[34,2871,2872],{"class":36,"line":37},[34,2873,2874],{"class":205},"\u002F\u002F打印0-9数字\n",[34,2876,2877,2879,2881],{"class":36,"line":51},[34,2878,804],{"class":87},[34,2880,2626],{"class":149},[34,2882,2629],{"class":40},[34,2884,2885],{"class":36,"line":60},[34,2886,2206],{"class":40},[34,2888,2889,2891,2894,2896,2898],{"class":36,"line":76},[34,2890,2638],{"class":87},[34,2892,2893],{"class":40}," num",[34,2895,153],{"class":87},[34,2897,987],{"class":63},[34,2899,73],{"class":40},[34,2901,2902,2905,2908,2910,2912],{"class":36,"line":93},[34,2903,2904],{"class":87},"    while",[34,2906,2907],{"class":40},"(num",[34,2909,41],{"class":87},[34,2911,1241],{"class":63},[34,2913,807],{"class":40},[34,2915,2916],{"class":36,"line":99},[34,2917,2683],{"class":40},[34,2919,2920,2923,2926,2928,2930,2932,2935],{"class":36,"line":353},[34,2921,2922],{"class":149},"       std",[34,2924,2925],{"class":40},"::cout",[34,2927,1837],{"class":87},[34,2929,2319],{"class":40},[34,2931,1837],{"class":87},[34,2933,2934],{"class":149},"std",[34,2936,2937],{"class":40},"::endl;\n",[34,2939,2940,2943,2946],{"class":36,"line":359},[34,2941,2942],{"class":40},"        num",[34,2944,2945],{"class":87},"++",[34,2947,73],{"class":40},[34,2949,2950],{"class":36,"line":579},[34,2951,2840],{"class":40},[34,2953,2954,2957,2959,2962],{"class":36,"line":589},[34,2955,2956],{"class":149},"    system",[34,2958,801],{"class":40},[34,2960,2961],{"class":156},"\"pause\"",[34,2963,807],{"class":40},[34,2965,2966],{"class":36,"line":601},[34,2967,241],{"class":40},[108,2969,2970],{},"注意：写好循环条件，避免死循环情况",[24,2972,2974],{"className":789,"code":2973,"language":791,"meta":29,"style":29},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[31,2975,2976,2981,2988,2995,3005,3013,3017,3022,3049,3054,3059,3067,3094,3099,3104,3117,3127,3131,3141,3146,3159,3164,3178,3183,3198,3202,3215,3219,3224,3228,3242,3250,3255,3261,3267,3272],{"__ignoreMap":29},[34,2977,2978],{"class":36,"line":37},[34,2979,2980],{"class":205},"\u002F\u002F循环结构-猜数字\n",[34,2982,2983,2985],{"class":36,"line":51},[34,2984,2603],{"class":87},[34,2986,2987],{"class":156}," \u003Ciostream>\n",[34,2989,2990,2992],{"class":36,"line":60},[34,2991,2603],{"class":87},[34,2993,2994],{"class":156}," \u003Cctime>\n",[34,2996,2997,2999,3001,3003],{"class":36,"line":76},[34,2998,2611],{"class":87},[34,3000,2614],{"class":87},[34,3002,2617],{"class":149},[34,3004,73],{"class":40},[34,3006,3007,3009,3011],{"class":36,"line":93},[34,3008,804],{"class":87},[34,3010,2626],{"class":149},[34,3012,2629],{"class":40},[34,3014,3015],{"class":36,"line":99},[34,3016,2206],{"class":40},[34,3018,3019],{"class":36,"line":353},[34,3020,3021],{"class":205},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[34,3023,3024,3027,3030,3033,3036,3038,3041,3043,3046],{"class":36,"line":359},[34,3025,3026],{"class":149},"    srand",[34,3028,3029],{"class":40},"((",[34,3031,3032],{"class":87},"unsigned",[34,3034,3035],{"class":87}," int",[34,3037,1224],{"class":40},[34,3039,3040],{"class":149},"time",[34,3042,801],{"class":40},[34,3044,3045],{"class":63},"NULL",[34,3047,3048],{"class":40},"));\n",[34,3050,3051],{"class":36,"line":579},[34,3052,3053],{"emptyLinePlaceholder":726},"\n",[34,3055,3056],{"class":36,"line":589},[34,3057,3058],{"class":205},"    \u002F\u002F1.系统生成随机数\n",[34,3060,3061,3064],{"class":36,"line":601},[34,3062,3063],{"class":205},"    \u002F\u002Frand()%100",[34,3065,3066],{"class":205}," \u002F\u002F生成0-99的随机数\n",[34,3068,3069,3071,3073,3075,3078,3081,3083,3085,3087,3089,3091],{"class":36,"line":613},[34,3070,2638],{"class":87},[34,3072,2893],{"class":40},[34,3074,153],{"class":87},[34,3076,3077],{"class":149},"rand",[34,3079,3080],{"class":40},"()",[34,3082,1123],{"class":87},[34,3084,1106],{"class":63},[34,3086,1276],{"class":87},[34,3088,1013],{"class":63},[34,3090,854],{"class":40},[34,3092,3093],{"class":205}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[34,3095,3096],{"class":36,"line":618},[34,3097,3098],{"class":205},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[34,3100,3101],{"class":36,"line":628},[34,3102,3103],{"class":205},"    \u002F\u002F2.玩家猜测\n",[34,3105,3106,3108,3111,3113,3115],{"class":36,"line":640},[34,3107,2638],{"class":87},[34,3109,3110],{"class":40}," val",[34,3112,153],{"class":87},[34,3114,987],{"class":63},[34,3116,73],{"class":40},[34,3118,3119,3121,3123,3125],{"class":36,"line":2301},[34,3120,2904],{"class":87},[34,3122,2312],{"class":40},[34,3124,1013],{"class":63},[34,3126,807],{"class":40},[34,3128,3129],{"class":36,"line":2307},[34,3130,2683],{"class":40},[34,3132,3133,3136,3138],{"class":36,"line":2328},[34,3134,3135],{"class":40},"        cin",[34,3137,2089],{"class":87},[34,3139,3140],{"class":40},"val;\n",[34,3142,3143],{"class":36,"line":2333},[34,3144,3145],{"class":205},"        \u002F\u002F3.判断玩家猜测\n",[34,3147,3148,3151,3154,3156],{"class":36,"line":2347},[34,3149,3150],{"class":87},"        if",[34,3152,3153],{"class":40},"(val",[34,3155,41],{"class":87},[34,3157,3158],{"class":40},"num) \n",[34,3160,3161],{"class":36,"line":2352},[34,3162,3163],{"class":40},"        {\n",[34,3165,3166,3169,3171,3174,3176],{"class":36,"line":2381},[34,3167,3168],{"class":40},"            cout",[34,3170,1837],{"class":87},[34,3172,3173],{"class":156},"\"猜小了！\"",[34,3175,1837],{"class":87},[34,3177,1859],{"class":40},[34,3179,3180],{"class":36,"line":2386},[34,3181,3182],{"class":40},"        }\n",[34,3184,3185,3188,3190,3193,3195],{"class":36,"line":2403},[34,3186,3187],{"class":87},"        else",[34,3189,2358],{"class":87},[34,3191,3192],{"class":40}," (val",[34,3194,1753],{"class":87},[34,3196,3197],{"class":40},"num)\n",[34,3199,3200],{"class":36,"line":2408},[34,3201,3163],{"class":40},[34,3203,3204,3206,3208,3211,3213],{"class":36,"line":2413},[34,3205,3168],{"class":40},[34,3207,1837],{"class":87},[34,3209,3210],{"class":156},"\"猜大了！\"",[34,3212,1837],{"class":87},[34,3214,1859],{"class":40},[34,3216,3217],{"class":36,"line":2418},[34,3218,3182],{"class":40},[34,3220,3221],{"class":36,"line":2432},[34,3222,3223],{"class":87},"        else\n",[34,3225,3226],{"class":36,"line":2437},[34,3227,3163],{"class":40},[34,3229,3231,3233,3235,3238,3240],{"class":36,"line":3230},30,[34,3232,3168],{"class":40},[34,3234,1837],{"class":87},[34,3236,3237],{"class":156},"\"猜对了！\"",[34,3239,1837],{"class":87},[34,3241,1859],{"class":40},[34,3243,3245,3248],{"class":36,"line":3244},31,[34,3246,3247],{"class":87},"            break",[34,3249,73],{"class":40},[34,3251,3253],{"class":36,"line":3252},32,[34,3254,3182],{"class":40},[34,3256,3258],{"class":36,"line":3257},33,[34,3259,3260],{"class":205},"        \u002F\u002F猜对 退出游戏\n",[34,3262,3264],{"class":36,"line":3263},34,[34,3265,3266],{"class":205},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[34,3268,3270],{"class":36,"line":3269},35,[34,3271,2840],{"class":40},[34,3273,3275],{"class":36,"line":3274},36,[34,3276,241],{"class":40},[752,3278,3279],{"start":51},[755,3280,3281,3282,3285],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[111,3283,3284],{},"do...while会先执行一次循环语句","，在判断循环语句",[24,3287,3289],{"className":789,"code":3288,"language":791,"meta":29,"style":29},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[31,3290,3291,3296,3304,3308,3320,3328,3332,3349,3356,3360,3373,3383],{"__ignoreMap":29},[34,3292,3293],{"class":36,"line":37},[34,3294,3295],{"class":205},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[34,3297,3298,3300,3302],{"class":36,"line":51},[34,3299,804],{"class":87},[34,3301,2626],{"class":149},[34,3303,2629],{"class":40},[34,3305,3306],{"class":36,"line":60},[34,3307,2206],{"class":40},[34,3309,3310,3312,3314,3316,3318],{"class":36,"line":76},[34,3311,2638],{"class":87},[34,3313,2893],{"class":40},[34,3315,153],{"class":87},[34,3317,987],{"class":63},[34,3319,73],{"class":40},[34,3321,3322,3325],{"class":36,"line":93},[34,3323,3324],{"class":87},"    do",[34,3326,3327],{"class":40}," \n",[34,3329,3330],{"class":36,"line":99},[34,3331,2683],{"class":40},[34,3333,3334,3337,3339,3341,3343,3345,3347],{"class":36,"line":353},[34,3335,3336],{"class":149},"        std",[34,3338,2925],{"class":40},[34,3340,1837],{"class":87},[34,3342,2319],{"class":40},[34,3344,1837],{"class":87},[34,3346,2934],{"class":149},[34,3348,2937],{"class":40},[34,3350,3351,3353],{"class":36,"line":359},[34,3352,2942],{"class":40},[34,3354,3355],{"class":87},"++\n",[34,3357,3358],{"class":36,"line":579},[34,3359,2840],{"class":40},[34,3361,3362,3364,3366,3368,3370],{"class":36,"line":589},[34,3363,2904],{"class":87},[34,3365,2907],{"class":40},[34,3367,41],{"class":87},[34,3369,1241],{"class":63},[34,3371,3372],{"class":40},");\n",[34,3374,3375,3377,3379,3381],{"class":36,"line":601},[34,3376,2956],{"class":149},[34,3378,801],{"class":40},[34,3380,2961],{"class":156},[34,3382,3372],{"class":40},[34,3384,3385],{"class":36,"line":613},[34,3386,241],{"class":40},[108,3388,3389],{},"案例-水仙花数",[108,3391,3392],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[108,3394,3395],{},"例如：1^3+5^3+3^3=153",[108,3397,3398],{},"请用do...while语句，求出所有3位数的水仙花数",[24,3400,3402],{"className":789,"code":3401,"language":791,"meta":29,"style":29},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[31,3403,3404,3410,3420,3428,3432,3437,3449,3455,3459,3464,3480,3496,3512,3527,3546,3561,3609,3613,3625,3629,3637,3641,3655],{"__ignoreMap":29},[34,3405,3406,3408],{"class":36,"line":37},[34,3407,2603],{"class":87},[34,3409,2987],{"class":156},[34,3411,3412,3414,3416,3418],{"class":36,"line":51},[34,3413,2611],{"class":87},[34,3415,2614],{"class":87},[34,3417,2617],{"class":149},[34,3419,73],{"class":40},[34,3421,3422,3424,3426],{"class":36,"line":60},[34,3423,804],{"class":87},[34,3425,2626],{"class":149},[34,3427,2629],{"class":40},[34,3429,3430],{"class":36,"line":76},[34,3431,2206],{"class":40},[34,3433,3434],{"class":36,"line":93},[34,3435,3436],{"class":205},"    \u002F\u002F1.先打印所有三位数字\n",[34,3438,3439,3441,3443,3445,3447],{"class":36,"line":99},[34,3440,2638],{"class":87},[34,3442,2893],{"class":40},[34,3444,153],{"class":87},[34,3446,1106],{"class":63},[34,3448,73],{"class":40},[34,3450,3451,3453],{"class":36,"line":353},[34,3452,3324],{"class":87},[34,3454,3327],{"class":40},[34,3456,3457],{"class":36,"line":359},[34,3458,2683],{"class":40},[34,3460,3461],{"class":36,"line":579},[34,3462,3463],{"class":205},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[34,3465,3466,3469,3471,3473,3475,3477],{"class":36,"line":589},[34,3467,3468],{"class":87},"        int",[34,3470,2058],{"class":40},[34,3472,153],{"class":87},[34,3474,987],{"class":63},[34,3476,854],{"class":40},[34,3478,3479],{"class":205}," \u002F\u002F个位\n",[34,3481,3482,3484,3487,3489,3491,3493],{"class":36,"line":601},[34,3483,3468],{"class":87},[34,3485,3486],{"class":40}," b",[34,3488,153],{"class":87},[34,3490,987],{"class":63},[34,3492,854],{"class":40},[34,3494,3495],{"class":205}," \u002F\u002F十位\n",[34,3497,3498,3500,3503,3505,3507,3509],{"class":36,"line":613},[34,3499,3468],{"class":87},[34,3501,3502],{"class":40}," c",[34,3504,153],{"class":87},[34,3506,987],{"class":63},[34,3508,854],{"class":40},[34,3510,3511],{"class":205}," \u002F\u002F百位\n",[34,3513,3514,3517,3519,3521,3523,3525],{"class":36,"line":618},[34,3515,3516],{"class":40},"        a",[34,3518,153],{"class":87},[34,3520,2319],{"class":40},[34,3522,1123],{"class":87},[34,3524,1241],{"class":63},[34,3526,73],{"class":40},[34,3528,3529,3532,3534,3536,3538,3540,3542,3544],{"class":36,"line":628},[34,3530,3531],{"class":40},"        b",[34,3533,153],{"class":87},[34,3535,2319],{"class":40},[34,3537,1379],{"class":87},[34,3539,1241],{"class":63},[34,3541,1123],{"class":87},[34,3543,1241],{"class":63},[34,3545,73],{"class":40},[34,3547,3548,3551,3553,3555,3557,3559],{"class":36,"line":640},[34,3549,3550],{"class":40},"        c",[34,3552,153],{"class":87},[34,3554,2319],{"class":40},[34,3556,1379],{"class":87},[34,3558,1106],{"class":63},[34,3560,73],{"class":40},[34,3562,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3600,3603,3606],{"class":36,"line":2301},[34,3564,3150],{"class":87},[34,3566,2495],{"class":40},[34,3568,1250],{"class":87},[34,3570,520],{"class":40},[34,3572,1250],{"class":87},[34,3574,520],{"class":40},[34,3576,1276],{"class":87},[34,3578,1058],{"class":40},[34,3580,1250],{"class":87},[34,3582,1058],{"class":40},[34,3584,1250],{"class":87},[34,3586,1058],{"class":40},[34,3588,1276],{"class":87},[34,3590,1083],{"class":40},[34,3592,1250],{"class":87},[34,3594,1083],{"class":40},[34,3596,1250],{"class":87},[34,3598,3599],{"class":40},"c ",[34,3601,3602],{"class":87},"==",[34,3604,3605],{"class":40}," num)",[34,3607,3608],{"class":205}," \u002F\u002F如果是水仙花数，才打印\n",[34,3610,3611],{"class":36,"line":2307},[34,3612,3163],{"class":40},[34,3614,3615,3617,3619,3621,3623],{"class":36,"line":2328},[34,3616,3168],{"class":40},[34,3618,1837],{"class":87},[34,3620,2319],{"class":40},[34,3622,1837],{"class":87},[34,3624,1859],{"class":40},[34,3626,3627],{"class":36,"line":2333},[34,3628,3182],{"class":40},[34,3630,3631,3633,3635],{"class":36,"line":2347},[34,3632,2942],{"class":40},[34,3634,2945],{"class":87},[34,3636,73],{"class":40},[34,3638,3639],{"class":36,"line":2352},[34,3640,2840],{"class":40},[34,3642,3643,3645,3648,3650,3653],{"class":36,"line":2381},[34,3644,2904],{"class":87},[34,3646,3647],{"class":40}," (num ",[34,3649,41],{"class":87},[34,3651,3652],{"class":63}," 1000",[34,3654,3372],{"class":40},[34,3656,3657],{"class":36,"line":2386},[34,3658,241],{"class":40},[752,3660,3661],{"start":60},[755,3662,3663],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[24,3665,3667],{"className":789,"code":3666,"language":791,"meta":29,"style":29},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[31,3668,3669,3674,3703,3707,3719,3723,3728,3739,3746,3750,3764,3768,3775,3779,3791,3800],{"__ignoreMap":29},[34,3670,3671],{"class":36,"line":37},[34,3672,3673],{"class":205},"\u002F\u002F从数字0-9打印\n",[34,3675,3676,3679,3681,3683,3686,3688,3690,3693,3695,3697,3699,3701],{"class":36,"line":51},[34,3677,3678],{"class":87},"for",[34,3680,801],{"class":40},[34,3682,804],{"class":87},[34,3684,3685],{"class":40}," i",[34,3687,153],{"class":87},[34,3689,987],{"class":63},[34,3691,3692],{"class":40},";i",[34,3694,41],{"class":87},[34,3696,1241],{"class":63},[34,3698,3692],{"class":40},[34,3700,2945],{"class":87},[34,3702,807],{"class":40},[34,3704,3705],{"class":36,"line":60},[34,3706,2206],{"class":40},[34,3708,3709,3711,3713,3715,3717],{"class":36,"line":76},[34,3710,2211],{"class":40},[34,3712,1837],{"class":87},[34,3714,1236],{"class":40},[34,3716,1837],{"class":87},[34,3718,1859],{"class":40},[34,3720,3721],{"class":36,"line":93},[34,3722,241],{"class":40},[34,3724,3725],{"class":36,"line":99},[34,3726,3727],{"class":205},"\u002F\u002F上式可以进行拆分\n",[34,3729,3730,3732,3734,3736],{"class":36,"line":353},[34,3731,804],{"class":87},[34,3733,3685],{"class":40},[34,3735,153],{"class":87},[34,3737,3738],{"class":63},"0\n",[34,3740,3741,3743],{"class":36,"line":359},[34,3742,3678],{"class":87},[34,3744,3745],{"class":40},"(;;;)\n",[34,3747,3748],{"class":36,"line":579},[34,3749,2206],{"class":40},[34,3751,3752,3755,3758,3760,3762],{"class":36,"line":589},[34,3753,3754],{"class":87},"    if",[34,3756,3757],{"class":40},"(i",[34,3759,2364],{"class":87},[34,3761,1241],{"class":63},[34,3763,807],{"class":40},[34,3765,3766],{"class":36,"line":601},[34,3767,2683],{"class":40},[34,3769,3770,3773],{"class":36,"line":613},[34,3771,3772],{"class":87},"        break",[34,3774,73],{"class":40},[34,3776,3777],{"class":36,"line":618},[34,3778,2840],{"class":40},[34,3780,3781,3783,3785,3787,3789],{"class":36,"line":628},[34,3782,2211],{"class":40},[34,3784,1837],{"class":87},[34,3786,1236],{"class":40},[34,3788,1837],{"class":87},[34,3790,1859],{"class":40},[34,3792,3793,3796,3798],{"class":36,"line":640},[34,3794,3795],{"class":40},"    i",[34,3797,2945],{"class":87},[34,3799,73],{"class":40},[34,3801,3802],{"class":36,"line":2301},[34,3803,241],{"class":40},[108,3805,3806],{},"小练习",[24,3808,3810],{"className":789,"code":3809,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[31,3811,3812,3818,3828,3836,3840,3845,3850,3878,3882,3887,3892,3933,3937,3950,3954,3958,3962,3974,3978,3982],{"__ignoreMap":29},[34,3813,3814,3816],{"class":36,"line":37},[34,3815,2603],{"class":87},[34,3817,2606],{"class":156},[34,3819,3820,3822,3824,3826],{"class":36,"line":51},[34,3821,2611],{"class":87},[34,3823,2614],{"class":87},[34,3825,2617],{"class":149},[34,3827,73],{"class":40},[34,3829,3830,3832,3834],{"class":36,"line":60},[34,3831,804],{"class":87},[34,3833,2626],{"class":149},[34,3835,2629],{"class":40},[34,3837,3838],{"class":36,"line":76},[34,3839,2206],{"class":40},[34,3841,3842],{"class":36,"line":93},[34,3843,3844],{"class":205},"    \u002F\u002F敲桌子案例\n",[34,3846,3847],{"class":36,"line":99},[34,3848,3849],{"class":205},"    \u002F\u002F1.先输出1-100的数字\n",[34,3851,3852,3855,3857,3859,3861,3863,3865,3868,3870,3872,3874,3876],{"class":36,"line":353},[34,3853,3854],{"class":87},"    for",[34,3856,801],{"class":40},[34,3858,804],{"class":87},[34,3860,3685],{"class":40},[34,3862,153],{"class":87},[34,3864,1013],{"class":63},[34,3866,3867],{"class":40},"; i",[34,3869,2247],{"class":87},[34,3871,1106],{"class":63},[34,3873,3867],{"class":40},[34,3875,2945],{"class":87},[34,3877,807],{"class":40},[34,3879,3880],{"class":36,"line":359},[34,3881,2683],{"class":40},[34,3883,3884],{"class":36,"line":579},[34,3885,3886],{"class":205},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[34,3888,3889],{"class":36,"line":589},[34,3890,3891],{"class":205},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[34,3893,3894,3896,3898,3900,3902,3904,3906,3909,3911,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931],{"class":36,"line":601},[34,3895,3150],{"class":87},[34,3897,3757],{"class":40},[34,3899,1123],{"class":87},[34,3901,1164],{"class":63},[34,3903,3602],{"class":87},[34,3905,987],{"class":63},[34,3907,3908],{"class":87}," ||",[34,3910,3685],{"class":40},[34,3912,1123],{"class":87},[34,3914,1241],{"class":63},[34,3916,3602],{"class":87},[34,3918,1164],{"class":63},[34,3920,3908],{"class":87},[34,3922,3685],{"class":40},[34,3924,1379],{"class":87},[34,3926,1241],{"class":63},[34,3928,3602],{"class":87},[34,3930,1164],{"class":63},[34,3932,807],{"class":40},[34,3934,3935],{"class":36,"line":613},[34,3936,3163],{"class":40},[34,3938,3939,3941,3943,3946,3948],{"class":36,"line":618},[34,3940,3168],{"class":40},[34,3942,1837],{"class":87},[34,3944,3945],{"class":156},"\"敲桌子\"",[34,3947,1837],{"class":87},[34,3949,1859],{"class":40},[34,3951,3952],{"class":36,"line":628},[34,3953,3182],{"class":40},[34,3955,3956],{"class":36,"line":640},[34,3957,3223],{"class":87},[34,3959,3960],{"class":36,"line":2301},[34,3961,3163],{"class":40},[34,3963,3964,3966,3968,3970,3972],{"class":36,"line":2307},[34,3965,3168],{"class":40},[34,3967,1837],{"class":87},[34,3969,1236],{"class":40},[34,3971,1837],{"class":87},[34,3973,1859],{"class":40},[34,3975,3976],{"class":36,"line":2328},[34,3977,3182],{"class":40},[34,3979,3980],{"class":36,"line":2333},[34,3981,2840],{"class":40},[34,3983,3984],{"class":36,"line":2347},[34,3985,241],{"class":40},[108,3987,3988],{},"嵌套实现星图",[24,3990,3992],{"className":789,"code":3991,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[31,3993,3994,4000,4010,4018,4022,4048,4052,4081,4085,4096,4100,4109,4113],{"__ignoreMap":29},[34,3995,3996,3998],{"class":36,"line":37},[34,3997,2603],{"class":87},[34,3999,2606],{"class":156},[34,4001,4002,4004,4006,4008],{"class":36,"line":51},[34,4003,2611],{"class":87},[34,4005,2614],{"class":87},[34,4007,2617],{"class":149},[34,4009,73],{"class":40},[34,4011,4012,4014,4016],{"class":36,"line":60},[34,4013,804],{"class":87},[34,4015,2626],{"class":149},[34,4017,2629],{"class":40},[34,4019,4020],{"class":36,"line":76},[34,4021,2206],{"class":40},[34,4023,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046],{"class":36,"line":93},[34,4025,3854],{"class":87},[34,4027,2312],{"class":40},[34,4029,804],{"class":87},[34,4031,3685],{"class":40},[34,4033,153],{"class":87},[34,4035,987],{"class":63},[34,4037,3692],{"class":40},[34,4039,41],{"class":87},[34,4041,1241],{"class":63},[34,4043,3692],{"class":40},[34,4045,2945],{"class":87},[34,4047,807],{"class":40},[34,4049,4050],{"class":36,"line":99},[34,4051,2683],{"class":40},[34,4053,4054,4057,4059,4061,4064,4066,4068,4071,4073,4075,4077,4079],{"class":36,"line":353},[34,4055,4056],{"class":87},"        for",[34,4058,2312],{"class":40},[34,4060,804],{"class":87},[34,4062,4063],{"class":40}," j",[34,4065,153],{"class":87},[34,4067,987],{"class":63},[34,4069,4070],{"class":40},";j",[34,4072,41],{"class":87},[34,4074,1241],{"class":63},[34,4076,4070],{"class":40},[34,4078,2945],{"class":87},[34,4080,807],{"class":40},[34,4082,4083],{"class":36,"line":359},[34,4084,3163],{"class":40},[34,4086,4087,4089,4091,4094],{"class":36,"line":579},[34,4088,3168],{"class":40},[34,4090,1837],{"class":87},[34,4092,4093],{"class":156},"\"*\"",[34,4095,73],{"class":40},[34,4097,4098],{"class":36,"line":589},[34,4099,3182],{"class":40},[34,4101,4102,4105,4107],{"class":36,"line":601},[34,4103,4104],{"class":40},"        cout",[34,4106,1837],{"class":87},[34,4108,1859],{"class":40},[34,4110,4111],{"class":36,"line":613},[34,4112,2840],{"class":40},[34,4114,4115],{"class":36,"line":618},[34,4116,241],{"class":40},[108,4118,4119],{},"乘法口诀表",[24,4121,4123],{"className":789,"code":4122,"language":791,"meta":29,"style":29},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[31,4124,4125,4131,4141,4149,4153,4179,4183,4208,4212,4252,4256,4264,4268],{"__ignoreMap":29},[34,4126,4127,4129],{"class":36,"line":37},[34,4128,2603],{"class":87},[34,4130,2987],{"class":156},[34,4132,4133,4135,4137,4139],{"class":36,"line":51},[34,4134,2611],{"class":87},[34,4136,2614],{"class":87},[34,4138,2617],{"class":149},[34,4140,73],{"class":40},[34,4142,4143,4145,4147],{"class":36,"line":60},[34,4144,804],{"class":87},[34,4146,2626],{"class":149},[34,4148,2629],{"class":40},[34,4150,4151],{"class":36,"line":76},[34,4152,2206],{"class":40},[34,4154,4155,4157,4159,4161,4163,4165,4167,4169,4171,4173,4175,4177],{"class":36,"line":93},[34,4156,3854],{"class":87},[34,4158,801],{"class":40},[34,4160,804],{"class":87},[34,4162,3685],{"class":40},[34,4164,153],{"class":87},[34,4166,1013],{"class":63},[34,4168,3692],{"class":40},[34,4170,41],{"class":87},[34,4172,1241],{"class":63},[34,4174,3692],{"class":40},[34,4176,2945],{"class":87},[34,4178,807],{"class":40},[34,4180,4181],{"class":36,"line":99},[34,4182,2683],{"class":40},[34,4184,4185,4187,4189,4191,4193,4195,4197,4199,4201,4204,4206],{"class":36,"line":353},[34,4186,4056],{"class":87},[34,4188,801],{"class":40},[34,4190,804],{"class":87},[34,4192,4063],{"class":40},[34,4194,153],{"class":87},[34,4196,1013],{"class":63},[34,4198,4070],{"class":40},[34,4200,2247],{"class":87},[34,4202,4203],{"class":40},"i;j",[34,4205,2945],{"class":87},[34,4207,807],{"class":40},[34,4209,4210],{"class":36,"line":359},[34,4211,3163],{"class":40},[34,4213,4214,4216,4218,4220,4222,4224,4226,4228,4230,4233,4235,4237,4239,4241,4243,4246,4248,4250],{"class":36,"line":579},[34,4215,3168],{"class":40},[34,4217,1837],{"class":87},[34,4219,1262],{"class":40},[34,4221,1837],{"class":87},[34,4223,4093],{"class":156},[34,4225,1837],{"class":87},[34,4227,1236],{"class":40},[34,4229,1837],{"class":87},[34,4231,4232],{"class":156},"\"=\"",[34,4234,1837],{"class":87},[34,4236,1236],{"class":40},[34,4238,1250],{"class":87},[34,4240,1262],{"class":40},[34,4242,1837],{"class":87},[34,4244,4245],{"class":156},"'",[34,4247,1894],{"class":63},[34,4249,4245],{"class":156},[34,4251,73],{"class":40},[34,4253,4254],{"class":36,"line":589},[34,4255,3182],{"class":40},[34,4257,4258,4260,4262],{"class":36,"line":601},[34,4259,4104],{"class":40},[34,4261,1837],{"class":87},[34,4263,1859],{"class":40},[34,4265,4266],{"class":36,"line":613},[34,4267,2840],{"class":40},[34,4269,4270],{"class":36,"line":618},[34,4271,241],{"class":40},[19,4273,4275],{"id":4274},"_163跳出语句","1.6.3跳出语句",[752,4277,4278],{},[755,4279,4280],{},"break语句\n作用：用于跳出选择结构或者循环结构",[108,4282,4283],{},"break使用时机：",[1800,4285,4286,4289,4292],{},[755,4287,4288],{},"出现在switch条件语句中，作用是终止case并跳出switch",[755,4290,4291],{},"出现在循环结构中，作用是跳出当前的循环结构",[755,4293,4294],{},"出现在嵌套循环中，跳出最近的内层循环语句",[752,4296,4297,4300],{"start":51},[755,4298,4299],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[755,4301,4302],{},"goto语句\n语法：goto 标记;",[108,4304,4305],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[24,4307,4309],{"className":789,"code":4308,"language":791,"meta":29,"style":29},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[31,4310,4311,4319,4323,4336,4346,4359,4372,4385,4393,4409],{"__ignoreMap":29},[34,4312,4313,4315,4317],{"class":36,"line":37},[34,4314,804],{"class":87},[34,4316,2626],{"class":149},[34,4318,2629],{"class":40},[34,4320,4321],{"class":36,"line":51},[34,4322,2206],{"class":40},[34,4324,4325,4327,4329,4332,4334],{"class":36,"line":60},[34,4326,2211],{"class":40},[34,4328,1837],{"class":87},[34,4330,4331],{"class":156},"\"1\"",[34,4333,1837],{"class":87},[34,4335,1859],{"class":40},[34,4337,4338,4341,4344],{"class":36,"line":76},[34,4339,4340],{"class":87},"    goto",[34,4342,4343],{"class":149}," FLAG",[34,4345,73],{"class":40},[34,4347,4348,4350,4352,4355,4357],{"class":36,"line":93},[34,4349,2211],{"class":40},[34,4351,1837],{"class":87},[34,4353,4354],{"class":156},"\"2\"",[34,4356,1837],{"class":87},[34,4358,1859],{"class":40},[34,4360,4361,4363,4365,4368,4370],{"class":36,"line":99},[34,4362,2211],{"class":40},[34,4364,1837],{"class":87},[34,4366,4367],{"class":156},"\"3\"",[34,4369,1837],{"class":87},[34,4371,1859],{"class":40},[34,4373,4374,4376,4378,4381,4383],{"class":36,"line":353},[34,4375,2211],{"class":40},[34,4377,1837],{"class":87},[34,4379,4380],{"class":156},"\"4\"",[34,4382,1837],{"class":87},[34,4384,1859],{"class":40},[34,4386,4387,4390],{"class":36,"line":359},[34,4388,4389],{"class":149},"    FLAG",[34,4391,4392],{"class":40},":\n",[34,4394,4395,4397,4399,4402,4404,4406],{"class":36,"line":579},[34,4396,2211],{"class":40},[34,4398,1837],{"class":87},[34,4400,4401],{"class":156},"\"5\"",[34,4403,1837],{"class":87},[34,4405,1902],{"class":40},[34,4407,4408],{"class":205},"\u002F\u002F跳过了2,3,4,直接到5\n",[34,4410,4411],{"class":36,"line":589},[34,4412,241],{"class":40},[14,4414,4416],{"id":4415},"_17数组","1.7数组",[19,4418,4420],{"id":4419},"_171一维数组","1.7.1一维数组",[752,4422,4423],{},[755,4424,4425],{},"一维数组定义方式",[934,4427,4428,4438],{},[937,4429,4430],{},[940,4431,4432,4435],{},[943,4433,4434],{},"方式",[943,4436,4437],{},"注意事项",[980,4439,4440,4454,4464],{},[940,4441,4442,4448],{},[985,4443,4444,4445,854],{},"数据类型 数组名",[34,4446,4447],{},"数组长度",[985,4449,4450,4451,4453],{},"这种方式是先定义再arr",[34,4452,1236],{},"赋值",[940,4455,4456,4461],{},[985,4457,4444,4458,4460],{},[34,4459,4447],{},"={值1,值2....};",[985,4462,4463],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[940,4465,4466,4470],{},[985,4467,4444,4468,4460],{},[34,4469],{},[985,4471,4472,4473,4475],{},"int arr",[34,4474],{},";这是不正确的，按照这样的方式定义必须有初始长度",[752,4477,4478],{"start":51},[755,4479,4480],{},"一维数组数组名\n用途：",[1800,4482,4483],{},[755,4484,4485],{},"1.可以统计整个数组在内存中的长度：",[24,4487,4489],{"className":789,"code":4488,"language":791,"meta":29,"style":29},"sizeof(arr);\nsizeof(arr[0]);\n",[31,4490,4491,4498],{"__ignoreMap":29},[34,4492,4493,4495],{"class":36,"line":37},[34,4494,798],{"class":87},[34,4496,4497],{"class":40},"(arr);\n",[34,4499,4500,4502,4505,4507],{"class":36,"line":51},[34,4501,798],{"class":87},[34,4503,4504],{"class":40},"(arr[",[34,4506,987],{"class":63},[34,4508,4509],{"class":40},"]);\n",[1800,4511,4512],{},[755,4513,4514],{},"2.可以获取数组在内存中的首地址:",[24,4516,4518],{"className":789,"code":4517,"language":791,"meta":29,"style":29},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[31,4519,4520,4525,4538,4543],{"__ignoreMap":29},[34,4521,4522],{"class":36,"line":37},[34,4523,4524],{"class":205},"\u002F\u002F查看16进制的首地址\n",[34,4526,4527,4529,4531,4534,4536],{"class":36,"line":51},[34,4528,2029],{"class":40},[34,4530,1837],{"class":87},[34,4532,4533],{"class":40},"arr",[34,4535,1837],{"class":87},[34,4537,1859],{"class":40},[34,4539,4540],{"class":36,"line":60},[34,4541,4542],{"class":205},"\u002F\u002F看10进制数\n",[34,4544,4545,4547,4549,4551,4553,4555,4557,4560,4562,4564,4566],{"class":36,"line":76},[34,4546,2029],{"class":40},[34,4548,1837],{"class":87},[34,4550,801],{"class":40},[34,4552,804],{"class":87},[34,4554,1224],{"class":40},[34,4556,1148],{"class":87},[34,4558,4559],{"class":40},"arr[",[34,4561,987],{"class":63},[34,4563,1733],{"class":40},[34,4565,1837],{"class":87},[34,4567,1859],{"class":40},[108,4569,4570],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1800,4572,4573],{},[755,4574,4575],{},"1️⃣五只小猪称体重",[24,4577,4579],{"className":789,"code":4578,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[31,4580,4581,4587,4597,4605,4609,4649,4662,4688,4692,4704,4708,4718,4722,4726,4739,4749],{"__ignoreMap":29},[34,4582,4583,4585],{"class":36,"line":37},[34,4584,2603],{"class":87},[34,4586,2606],{"class":156},[34,4588,4589,4591,4593,4595],{"class":36,"line":51},[34,4590,2611],{"class":87},[34,4592,2614],{"class":87},[34,4594,2617],{"class":149},[34,4596,73],{"class":40},[34,4598,4599,4601,4603],{"class":36,"line":60},[34,4600,804],{"class":87},[34,4602,2626],{"class":149},[34,4604,2629],{"class":40},[34,4606,4607],{"class":36,"line":76},[34,4608,2206],{"class":40},[34,4610,4611,4613,4616,4618,4620,4622,4624,4627,4629,4632,4634,4636,4638,4641,4643,4646],{"class":36,"line":93},[34,4612,2638],{"class":87},[34,4614,4615],{"class":40}," arr[",[34,4617,1114],{"class":63},[34,4619,1733],{"class":40},[34,4621,153],{"class":87},[34,4623,1690],{"class":40},[34,4625,4626],{"class":63},"300",[34,4628,1173],{"class":40},[34,4630,4631],{"class":63},"350",[34,4633,1173],{"class":40},[34,4635,2376],{"class":63},[34,4637,1173],{"class":40},[34,4639,4640],{"class":63},"400",[34,4642,1173],{"class":40},[34,4644,4645],{"class":63},"250",[34,4647,4648],{"class":40},"};\n",[34,4650,4651,4653,4656,4658,4660],{"class":36,"line":99},[34,4652,2638],{"class":87},[34,4654,4655],{"class":40}," tmp",[34,4657,153],{"class":87},[34,4659,987],{"class":63},[34,4661,73],{"class":40},[34,4663,4664,4666,4668,4670,4672,4674,4676,4678,4680,4682,4684,4686],{"class":36,"line":353},[34,4665,3854],{"class":87},[34,4667,2312],{"class":40},[34,4669,804],{"class":87},[34,4671,3685],{"class":40},[34,4673,153],{"class":87},[34,4675,987],{"class":63},[34,4677,3692],{"class":40},[34,4679,41],{"class":87},[34,4681,1114],{"class":63},[34,4683,3692],{"class":40},[34,4685,2945],{"class":87},[34,4687,807],{"class":40},[34,4689,4690],{"class":36,"line":359},[34,4691,2683],{"class":40},[34,4693,4694,4696,4699,4701],{"class":36,"line":579},[34,4695,3150],{"class":87},[34,4697,4698],{"class":40},"(tmp",[34,4700,41],{"class":87},[34,4702,4703],{"class":40},"arr[i])\n",[34,4705,4706],{"class":36,"line":589},[34,4707,3163],{"class":40},[34,4709,4710,4713,4715],{"class":36,"line":601},[34,4711,4712],{"class":40},"            tmp",[34,4714,153],{"class":87},[34,4716,4717],{"class":40},"arr[i];\n",[34,4719,4720],{"class":36,"line":613},[34,4721,3182],{"class":40},[34,4723,4724],{"class":36,"line":618},[34,4725,2840],{"class":40},[34,4727,4728,4730,4732,4735,4737],{"class":36,"line":628},[34,4729,2211],{"class":40},[34,4731,1837],{"class":87},[34,4733,4734],{"class":40},"tmp",[34,4736,1837],{"class":87},[34,4738,1859],{"class":40},[34,4740,4741,4744,4747],{"class":36,"line":640},[34,4742,4743],{"class":87},"    return",[34,4745,4746],{"class":63}," 0",[34,4748,73],{"class":40},[34,4750,4751],{"class":36,"line":2301},[34,4752,241],{"class":40},[1800,4754,4755],{},[755,4756,4757],{},"2️⃣数组元素逆置",[24,4759,4761],{"className":789,"code":4760,"language":791,"meta":29,"style":29},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[31,4762,4763,4768,4774,4784,4792,4796,4831,4847,4879,4892,4897,4902,4914,4924,4934,4939,4948,4958,4963,4968,4995,4999,5015,5019,5030,5039],{"__ignoreMap":29},[34,4764,4765],{"class":36,"line":37},[34,4766,4767],{"class":205},"\u002F\u002F元素逆置\n",[34,4769,4770,4772],{"class":36,"line":51},[34,4771,2603],{"class":87},[34,4773,2606],{"class":156},[34,4775,4776,4778,4780,4782],{"class":36,"line":60},[34,4777,2611],{"class":87},[34,4779,2614],{"class":87},[34,4781,2617],{"class":149},[34,4783,73],{"class":40},[34,4785,4786,4788,4790],{"class":36,"line":76},[34,4787,804],{"class":87},[34,4789,2626],{"class":149},[34,4791,2629],{"class":40},[34,4793,4794],{"class":36,"line":93},[34,4795,2206],{"class":40},[34,4797,4798,4801,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829],{"class":36,"line":99},[34,4799,4800],{"class":87},"   int",[34,4802,4615],{"class":40},[34,4804,1114],{"class":63},[34,4806,1733],{"class":40},[34,4808,153],{"class":87},[34,4810,1690],{"class":40},[34,4812,1013],{"class":63},[34,4814,1173],{"class":40},[34,4816,875],{"class":63},[34,4818,1173],{"class":40},[34,4820,869],{"class":63},[34,4822,1173],{"class":40},[34,4824,1088],{"class":63},[34,4826,1173],{"class":40},[34,4828,1114],{"class":63},[34,4830,4648],{"class":40},[34,4832,4833,4835,4838,4840,4842,4844],{"class":36,"line":353},[34,4834,4800],{"class":87},[34,4836,4837],{"class":40}," start",[34,4839,153],{"class":87},[34,4841,987],{"class":63},[34,4843,854],{"class":40},[34,4845,4846],{"class":205},"\u002F\u002F起始下标\n",[34,4848,4849,4851,4854,4857,4860,4863,4865,4867,4870,4872,4874,4876],{"class":36,"line":359},[34,4850,4800],{"class":87},[34,4852,4853],{"class":40}," end",[34,4855,4856],{"class":87},"=sizeof",[34,4858,4859],{"class":40},"(arr)",[34,4861,4862],{"class":87},"\u002Fsizeof",[34,4864,4504],{"class":40},[34,4866,987],{"class":63},[34,4868,4869],{"class":40},"])",[34,4871,1327],{"class":87},[34,4873,1013],{"class":63},[34,4875,854],{"class":40},[34,4877,4878],{"class":205},"\u002F\u002F结束下标\n",[34,4880,4881,4884,4887,4889],{"class":36,"line":579},[34,4882,4883],{"class":87},"   while",[34,4885,4886],{"class":40}," (start",[34,4888,41],{"class":87},[34,4890,4891],{"class":40},"end)\n",[34,4893,4894],{"class":36,"line":589},[34,4895,4896],{"class":40},"   {\n",[34,4898,4899],{"class":36,"line":601},[34,4900,4901],{"class":205},"    \u002F\u002F实现元素互换代码\n",[34,4903,4904,4906,4909,4911],{"class":36,"line":613},[34,4905,2638],{"class":87},[34,4907,4908],{"class":40}," temp",[34,4910,153],{"class":87},[34,4912,4913],{"class":40},"arr[start];\n",[34,4915,4916,4919,4921],{"class":36,"line":618},[34,4917,4918],{"class":40},"    arr[start]",[34,4920,153],{"class":87},[34,4922,4923],{"class":40},"arr[end];\n",[34,4925,4926,4929,4931],{"class":36,"line":628},[34,4927,4928],{"class":40},"    arr[end]",[34,4930,153],{"class":87},[34,4932,4933],{"class":40},"temp;\n",[34,4935,4936],{"class":36,"line":640},[34,4937,4938],{"class":205},"    \u002F\u002F下标更新\n",[34,4940,4941,4944,4946],{"class":36,"line":2301},[34,4942,4943],{"class":40},"    start",[34,4945,2945],{"class":87},[34,4947,73],{"class":40},[34,4949,4950,4953,4956],{"class":36,"line":2307},[34,4951,4952],{"class":40},"    end",[34,4954,4955],{"class":87},"--",[34,4957,73],{"class":40},[34,4959,4960],{"class":36,"line":2328},[34,4961,4962],{"class":40},"   }\n",[34,4964,4965],{"class":36,"line":2333},[34,4966,4967],{"class":205},"   \u002F\u002F输出逆置后的数组\n",[34,4969,4970,4973,4975,4977,4979,4981,4983,4985,4987,4989,4991,4993],{"class":36,"line":2347},[34,4971,4972],{"class":87},"   for",[34,4974,2312],{"class":40},[34,4976,804],{"class":87},[34,4978,3685],{"class":40},[34,4980,153],{"class":87},[34,4982,987],{"class":63},[34,4984,3692],{"class":40},[34,4986,41],{"class":87},[34,4988,1114],{"class":63},[34,4990,3692],{"class":40},[34,4992,2945],{"class":87},[34,4994,807],{"class":40},[34,4996,4997],{"class":36,"line":2352},[34,4998,4896],{"class":40},[34,5000,5001,5003,5005,5008,5010,5013],{"class":36,"line":2381},[34,5002,2211],{"class":40},[34,5004,1837],{"class":87},[34,5006,5007],{"class":40},"arr[i]",[34,5009,1837],{"class":87},[34,5011,5012],{"class":156},"\" \"",[34,5014,73],{"class":40},[34,5016,5017],{"class":36,"line":2386},[34,5018,4962],{"class":40},[34,5020,5021,5024,5026,5028],{"class":36,"line":2403},[34,5022,5023],{"class":149},"   system",[34,5025,801],{"class":40},[34,5027,2961],{"class":156},[34,5029,3372],{"class":40},[34,5031,5032,5035,5037],{"class":36,"line":2408},[34,5033,5034],{"class":87},"   return",[34,5036,4746],{"class":63},[34,5038,73],{"class":40},[34,5040,5041],{"class":36,"line":2413},[34,5042,241],{"class":40},[1800,5044,5045],{},[755,5046,5047],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[24,5049,5051],{"className":789,"code":5050,"language":791,"meta":29,"style":29},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[31,5052,5053,5058,5064,5074,5082,5086,5138,5151,5177,5181,5195,5199,5204,5209,5239,5243,5248,5282,5286,5291,5311,5316,5328,5344,5359,5364,5368,5372,5385,5411,5415,5429,5433,5441],{"__ignoreMap":29},[34,5054,5055],{"class":36,"line":37},[34,5056,5057],{"class":205},"\u002F\u002F冒泡排序,升序\n",[34,5059,5060,5062],{"class":36,"line":51},[34,5061,2603],{"class":87},[34,5063,2606],{"class":156},[34,5065,5066,5068,5070,5072],{"class":36,"line":60},[34,5067,2611],{"class":87},[34,5069,2614],{"class":87},[34,5071,2617],{"class":149},[34,5073,73],{"class":40},[34,5075,5076,5078,5080],{"class":36,"line":76},[34,5077,804],{"class":87},[34,5079,2626],{"class":149},[34,5081,2629],{"class":40},[34,5083,5084],{"class":36,"line":93},[34,5085,2206],{"class":40},[34,5087,5088,5090,5092,5094,5097,5099,5102,5104,5106,5108,5110,5112,5114,5116,5118,5120,5122,5124,5126,5128,5130,5132,5134,5136],{"class":36,"line":99},[34,5089,2638],{"class":87},[34,5091,4615],{"class":40},[34,5093,1215],{"class":63},[34,5095,5096],{"class":40},"] ",[34,5098,153],{"class":87},[34,5100,5101],{"class":40}," {",[34,5103,1088],{"class":63},[34,5105,1173],{"class":40},[34,5107,875],{"class":63},[34,5109,1173],{"class":40},[34,5111,1190],{"class":63},[34,5113,1173],{"class":40},[34,5115,987],{"class":63},[34,5117,1173],{"class":40},[34,5119,1114],{"class":63},[34,5121,1173],{"class":40},[34,5123,1164],{"class":63},[34,5125,1173],{"class":40},[34,5127,1013],{"class":63},[34,5129,1173],{"class":40},[34,5131,869],{"class":63},[34,5133,1173],{"class":40},[34,5135,1215],{"class":63},[34,5137,4648],{"class":40},[34,5139,5140,5142,5144,5147,5149],{"class":36,"line":353},[34,5141,2211],{"class":40},[34,5143,1837],{"class":87},[34,5145,5146],{"class":156},"\"排序前：\"",[34,5148,1837],{"class":87},[34,5150,1859],{"class":40},[34,5152,5153,5155,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175],{"class":36,"line":359},[34,5154,3854],{"class":87},[34,5156,2312],{"class":40},[34,5158,804],{"class":87},[34,5160,3685],{"class":40},[34,5162,153],{"class":87},[34,5164,987],{"class":63},[34,5166,3692],{"class":40},[34,5168,41],{"class":87},[34,5170,1215],{"class":63},[34,5172,3692],{"class":40},[34,5174,2945],{"class":87},[34,5176,807],{"class":40},[34,5178,5179],{"class":36,"line":579},[34,5180,2683],{"class":40},[34,5182,5183,5185,5187,5189,5191,5193],{"class":36,"line":589},[34,5184,4104],{"class":40},[34,5186,1837],{"class":87},[34,5188,5007],{"class":40},[34,5190,1837],{"class":87},[34,5192,5012],{"class":156},[34,5194,73],{"class":40},[34,5196,5197],{"class":36,"line":601},[34,5198,2840],{"class":40},[34,5200,5201],{"class":36,"line":613},[34,5202,5203],{"class":205},"    \u002F\u002F开始冒泡排序\n",[34,5205,5206],{"class":36,"line":618},[34,5207,5208],{"class":205},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[34,5210,5211,5213,5215,5217,5219,5221,5223,5225,5227,5229,5231,5233,5235,5237],{"class":36,"line":628},[34,5212,3854],{"class":87},[34,5214,2312],{"class":40},[34,5216,804],{"class":87},[34,5218,3685],{"class":40},[34,5220,153],{"class":87},[34,5222,987],{"class":63},[34,5224,3692],{"class":40},[34,5226,41],{"class":87},[34,5228,1215],{"class":63},[34,5230,1327],{"class":87},[34,5232,1013],{"class":63},[34,5234,3692],{"class":40},[34,5236,2945],{"class":87},[34,5238,807],{"class":40},[34,5240,5241],{"class":36,"line":640},[34,5242,2683],{"class":40},[34,5244,5245],{"class":36,"line":2301},[34,5246,5247],{"class":205},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[34,5249,5250,5252,5254,5256,5258,5260,5262,5264,5266,5268,5270,5272,5274,5276,5278,5280],{"class":36,"line":2307},[34,5251,4056],{"class":87},[34,5253,2312],{"class":40},[34,5255,804],{"class":87},[34,5257,4063],{"class":40},[34,5259,153],{"class":87},[34,5261,987],{"class":63},[34,5263,4070],{"class":40},[34,5265,41],{"class":87},[34,5267,1215],{"class":63},[34,5269,1327],{"class":87},[34,5271,1236],{"class":40},[34,5273,1327],{"class":87},[34,5275,1013],{"class":63},[34,5277,4070],{"class":40},[34,5279,2945],{"class":87},[34,5281,807],{"class":40},[34,5283,5284],{"class":36,"line":2328},[34,5285,3163],{"class":40},[34,5287,5288],{"class":36,"line":2333},[34,5289,5290],{"class":205},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[34,5292,5293,5296,5299,5301,5304,5306,5308],{"class":36,"line":2347},[34,5294,5295],{"class":87},"            if",[34,5297,5298],{"class":40},"(arr[j]",[34,5300,1753],{"class":87},[34,5302,5303],{"class":40},"arr[j",[34,5305,1276],{"class":87},[34,5307,1013],{"class":63},[34,5309,5310],{"class":40},"])\n",[34,5312,5313],{"class":36,"line":2352},[34,5314,5315],{"class":40},"            {\n",[34,5317,5318,5321,5323,5325],{"class":36,"line":2381},[34,5319,5320],{"class":87},"                int",[34,5322,4908],{"class":40},[34,5324,153],{"class":87},[34,5326,5327],{"class":40},"arr[j];\n",[34,5329,5330,5333,5335,5337,5339,5341],{"class":36,"line":2386},[34,5331,5332],{"class":40},"                arr[j]",[34,5334,153],{"class":87},[34,5336,5303],{"class":40},[34,5338,1276],{"class":87},[34,5340,1013],{"class":63},[34,5342,5343],{"class":40},"];\n",[34,5345,5346,5349,5351,5353,5355,5357],{"class":36,"line":2403},[34,5347,5348],{"class":40},"                arr[j",[34,5350,1276],{"class":87},[34,5352,1013],{"class":63},[34,5354,1733],{"class":40},[34,5356,153],{"class":87},[34,5358,4933],{"class":40},[34,5360,5361],{"class":36,"line":2408},[34,5362,5363],{"class":40},"            }\n",[34,5365,5366],{"class":36,"line":2413},[34,5367,3182],{"class":40},[34,5369,5370],{"class":36,"line":2418},[34,5371,2840],{"class":40},[34,5373,5374,5376,5378,5381,5383],{"class":36,"line":2432},[34,5375,2211],{"class":40},[34,5377,1837],{"class":87},[34,5379,5380],{"class":156},"\"排序后：\"",[34,5382,1837],{"class":87},[34,5384,1859],{"class":40},[34,5386,5387,5389,5391,5393,5395,5397,5399,5401,5403,5405,5407,5409],{"class":36,"line":2437},[34,5388,3854],{"class":87},[34,5390,2312],{"class":40},[34,5392,804],{"class":87},[34,5394,3685],{"class":40},[34,5396,153],{"class":87},[34,5398,987],{"class":63},[34,5400,3692],{"class":40},[34,5402,41],{"class":87},[34,5404,1215],{"class":63},[34,5406,3692],{"class":40},[34,5408,2945],{"class":87},[34,5410,807],{"class":40},[34,5412,5413],{"class":36,"line":3230},[34,5414,2683],{"class":40},[34,5416,5417,5419,5421,5423,5425,5427],{"class":36,"line":3244},[34,5418,4104],{"class":40},[34,5420,1837],{"class":87},[34,5422,5007],{"class":40},[34,5424,1837],{"class":87},[34,5426,5012],{"class":156},[34,5428,73],{"class":40},[34,5430,5431],{"class":36,"line":3252},[34,5432,2840],{"class":40},[34,5434,5435,5437,5439],{"class":36,"line":3257},[34,5436,4743],{"class":87},[34,5438,4746],{"class":63},[34,5440,73],{"class":40},[34,5442,5443],{"class":36,"line":3263},[34,5444,241],{"class":40},[19,5446,5448],{"id":5447},"_172二维数组","1.7.2二维数组",[752,5450,5451],{},[755,5452,5453],{},"二维数组的四种定义方式",[934,5455,5456,5465],{},[937,5457,5458],{},[940,5459,5460,5463],{},[943,5461,5462],{},"序号",[943,5464,4434],{},[980,5466,5467,5477,5486,5495,5504],{},[940,5468,5469,5471],{},[985,5470,1013],{},[985,5472,5473,5474,854],{},"数据类型 数组名[行数]",[34,5475,5476],{},"列数",[940,5478,5479,5481],{},[985,5480,875],{},[985,5482,5473,5483,5485],{},[34,5484,5476],{},"={ {数据1,数据2}，{数据3，数据4}... }",[940,5487,5488,5490],{},[985,5489,869],{},[985,5491,5473,5492,5494],{},[34,5493,5476],{},"={数据1,数据2,数据3...}",[940,5496,5497,5499],{},[985,5498,1088],{},[985,5500,5501,5502,5494],{},"数据类型 数组名[]",[34,5503,5476],{},[940,5505,5506,5509],{},[985,5507,5508],{},"注意：不能只省略列数",[985,5510],{},[752,5512,5513],{"start":51},[755,5514,5515],{},"二维数组数组名",[1800,5517,5518,5521],{},[755,5519,5520],{},"1.查看二维数组所占内存空间",[755,5522,5523],{},"2.获取二维数组首地址",[108,5525,5526],{},"已知二维数组，求二维数组的行数与列数",[24,5528,5530],{"className":789,"code":5529,"language":791,"meta":29,"style":29},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[31,5531,5532,5540,5544,5562,5566,5584,5600,5605,5630,5663],{"__ignoreMap":29},[34,5533,5534,5536,5538],{"class":36,"line":37},[34,5535,804],{"class":87},[34,5537,2626],{"class":149},[34,5539,2629],{"class":40},[34,5541,5542],{"class":36,"line":51},[34,5543,2206],{"class":40},[34,5545,5546,5548,5550,5552,5555,5557,5559],{"class":36,"line":60},[34,5547,2638],{"class":87},[34,5549,4615],{"class":40},[34,5551,875],{"class":63},[34,5553,5554],{"class":40},"][",[34,5556,869],{"class":63},[34,5558,1733],{"class":40},[34,5560,5561],{"class":87},"=\n",[34,5563,5564],{"class":36,"line":76},[34,5565,2683],{"class":40},[34,5567,5568,5571,5573,5575,5577,5579,5581],{"class":36,"line":93},[34,5569,5570],{"class":40},"        {",[34,5572,1013],{"class":63},[34,5574,1173],{"class":40},[34,5576,875],{"class":63},[34,5578,1173],{"class":40},[34,5580,869],{"class":63},[34,5582,5583],{"class":40},"},\n",[34,5585,5586,5588,5590,5592,5594,5596,5598],{"class":36,"line":99},[34,5587,5570],{"class":40},[34,5589,1088],{"class":63},[34,5591,1173],{"class":40},[34,5593,1114],{"class":63},[34,5595,1173],{"class":40},[34,5597,1139],{"class":63},[34,5599,241],{"class":40},[34,5601,5602],{"class":36,"line":353},[34,5603,5604],{"class":40},"    };\n",[34,5606,5607,5609,5611,5614,5616,5618,5620,5622,5624,5626,5628],{"class":36,"line":359},[34,5608,2211],{"class":40},[34,5610,1837],{"class":87},[34,5612,5613],{"class":156},"\"二维数组的行数\"",[34,5615,2032],{"class":87},[34,5617,4859],{"class":40},[34,5619,4862],{"class":87},[34,5621,4504],{"class":40},[34,5623,987],{"class":63},[34,5625,4869],{"class":40},[34,5627,1837],{"class":87},[34,5629,1859],{"class":40},[34,5631,5632,5634,5636,5639,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661],{"class":36,"line":579},[34,5633,2211],{"class":40},[34,5635,1837],{"class":87},[34,5637,5638],{"class":156},"\"二维数组的列数\"",[34,5640,2032],{"class":87},[34,5642,4504],{"class":40},[34,5644,987],{"class":63},[34,5646,4869],{"class":40},[34,5648,4862],{"class":87},[34,5650,4504],{"class":40},[34,5652,987],{"class":63},[34,5654,5554],{"class":40},[34,5656,987],{"class":63},[34,5658,4869],{"class":40},[34,5660,1837],{"class":87},[34,5662,1859],{"class":40},[34,5664,5665],{"class":36,"line":589},[34,5666,241],{"class":40},[108,5668,5669],{},"查看二维数组首地址",[24,5671,5673],{"className":789,"code":5672,"language":791,"meta":29,"style":29},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[31,5674,5675,5692,5718,5743],{"__ignoreMap":29},[34,5676,5677,5679,5681,5684,5686,5688,5690],{"class":36,"line":37},[34,5678,2029],{"class":40},[34,5680,1837],{"class":87},[34,5682,5683],{"class":156},"\"二维数组首地址：\"",[34,5685,1837],{"class":87},[34,5687,4533],{"class":40},[34,5689,1837],{"class":87},[34,5691,1859],{"class":40},[34,5693,5694,5696,5698,5701,5703,5705,5707,5710,5712,5714,5716],{"class":36,"line":51},[34,5695,2029],{"class":40},[34,5697,1837],{"class":87},[34,5699,5700],{"class":156},"\"二维数组第一行的首地址：\"",[34,5702,1837],{"class":87},[34,5704,801],{"class":40},[34,5706,804],{"class":87},[34,5708,5709],{"class":40},")arr[",[34,5711,987],{"class":63},[34,5713,1733],{"class":40},[34,5715,1837],{"class":87},[34,5717,1859],{"class":40},[34,5719,5720,5722,5724,5727,5729,5731,5733,5735,5737,5739,5741],{"class":36,"line":60},[34,5721,2029],{"class":40},[34,5723,1837],{"class":87},[34,5725,5726],{"class":156},"\"二维数组第二行的首地址：\"",[34,5728,1837],{"class":87},[34,5730,801],{"class":40},[34,5732,804],{"class":87},[34,5734,5709],{"class":40},[34,5736,1013],{"class":63},[34,5738,1733],{"class":40},[34,5740,1837],{"class":87},[34,5742,1859],{"class":40},[34,5744,5745,5747,5749,5752,5754,5756,5758,5760,5762,5764,5766,5768,5770,5772,5774,5776],{"class":36,"line":76},[34,5746,2029],{"class":40},[34,5748,1837],{"class":87},[34,5750,5751],{"class":156},"\"二维数组第一个元素的首地址:\"",[34,5753,1837],{"class":87},[34,5755,801],{"class":40},[34,5757,804],{"class":87},[34,5759,1224],{"class":40},[34,5761,1148],{"class":87},[34,5763,4559],{"class":40},[34,5765,987],{"class":63},[34,5767,5554],{"class":40},[34,5769,987],{"class":63},[34,5771,1733],{"class":40},[34,5773,1837],{"class":87},[34,5775,1902],{"class":40},[34,5777,5778],{"class":205},"\u002F\u002F对于数，要加取址符\n",[45,5780,5781],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":29,"searchDepth":51,"depth":51,"links":5783},[5784,5785,5786,5794,5795,5801,5806],{"id":742,"depth":51,"text":743},{"id":749,"depth":51,"text":750},{"id":766,"depth":51,"text":767,"children":5787},[5788,5789,5790,5791,5792,5793],{"id":770,"depth":60,"text":771},{"id":817,"depth":60,"text":818},{"id":883,"depth":60,"text":884},{"id":1818,"depth":60,"text":1819},{"id":1908,"depth":60,"text":1909},{"id":2003,"depth":60,"text":2004},{"id":2045,"depth":51,"text":2046},{"id":2113,"depth":51,"text":2114,"children":5796},[5797,5798,5799,5800],{"id":2117,"depth":60,"text":2118},{"id":2139,"depth":60,"text":2140},{"id":2148,"depth":60,"text":2149},{"id":2157,"depth":60,"text":2158},{"id":2166,"depth":51,"text":2167,"children":5802},[5803,5804,5805],{"id":2170,"depth":60,"text":2171},{"id":2858,"depth":60,"text":2859},{"id":4274,"depth":60,"text":4275},{"id":4415,"depth":51,"text":4416,"children":5807},[5808,5809],{"id":4419,"depth":60,"text":4420},{"id":5447,"depth":60,"text":5448},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":734,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5816,"title":5817,"body":5818,"description":29,"extension":724,"meta":6918,"navigation":726,"path":6919,"seo":6920,"stem":6921,"__hash__":6922},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5819,"toc":6910},[5820,5823,5827,5835,5843,5846,5912,5916,5919,5995,5999,6002,6005,6008,6221,6225,6230,6294,6299,6366,6371,6462,6465,6570,6574,6577,6583,6727,6731,6734,6748,6751,6796,6799,6907],[10,5821,5817],{"id":5822},"_2函数",[14,5824,5826],{"id":5825},"_21函数概述","2.1函数概述",[752,5828,5829,5832],{},[755,5830,5831],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[755,5833,5834],{},"语法：",[24,5836,5841],{"className":5837,"code":5839,"language":5840,"meta":29},[5838],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[31,5842,5839],{"__ignoreMap":29},[108,5844,5845],{},"小案例",[24,5847,5849],{"className":789,"code":5848,"language":791,"meta":29,"style":29},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[31,5850,5851,5856,5880,5884,5901,5908],{"__ignoreMap":29},[34,5852,5853],{"class":36,"line":37},[34,5854,5855],{"class":205},"\u002F\u002Fnum1,num2形参\n",[34,5857,5858,5860,5863,5865,5867,5871,5873,5875,5878],{"class":36,"line":51},[34,5859,804],{"class":87},[34,5861,5862],{"class":149}," add",[34,5864,801],{"class":40},[34,5866,804],{"class":87},[34,5868,5870],{"class":5869},"s4XuR"," num1",[34,5872,1173],{"class":40},[34,5874,804],{"class":87},[34,5876,5877],{"class":5869}," num2",[34,5879,807],{"class":40},[34,5881,5882],{"class":36,"line":60},[34,5883,2206],{"class":40},[34,5885,5886,5888,5891,5893,5896,5898],{"class":36,"line":76},[34,5887,2638],{"class":87},[34,5889,5890],{"class":40}," sum",[34,5892,153],{"class":87},[34,5894,5895],{"class":40},"num1",[34,5897,1276],{"class":87},[34,5899,5900],{"class":40},"num2;\n",[34,5902,5903,5905],{"class":36,"line":93},[34,5904,4743],{"class":87},[34,5906,5907],{"class":40}," sum;\n",[34,5909,5910],{"class":36,"line":99},[34,5911,241],{"class":40},[14,5913,5915],{"id":5914},"_22函数调用","2.2函数调用",[108,5917,5918],{},"调用刚刚写的求和函数",[24,5920,5922],{"className":789,"code":5921,"language":791,"meta":29,"style":29},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[31,5923,5924,5932,5936,5941,5953,5965,5974,5979,5991],{"__ignoreMap":29},[34,5925,5926,5928,5930],{"class":36,"line":37},[34,5927,804],{"class":87},[34,5929,2626],{"class":149},[34,5931,2629],{"class":40},[34,5933,5934],{"class":36,"line":51},[34,5935,2206],{"class":40},[34,5937,5938],{"class":36,"line":60},[34,5939,5940],{"class":205},"    \u002F\u002Fa,b实参\n",[34,5942,5943,5945,5947,5949,5951],{"class":36,"line":76},[34,5944,2638],{"class":87},[34,5946,2058],{"class":40},[34,5948,153],{"class":87},[34,5950,987],{"class":63},[34,5952,73],{"class":40},[34,5954,5955,5957,5959,5961,5963],{"class":36,"line":93},[34,5956,2638],{"class":87},[34,5958,3486],{"class":40},[34,5960,153],{"class":87},[34,5962,987],{"class":63},[34,5964,73],{"class":40},[34,5966,5967,5969,5971],{"class":36,"line":99},[34,5968,2665],{"class":40},[34,5970,2089],{"class":87},[34,5972,5973],{"class":40},"a,b;\n",[34,5975,5976],{"class":36,"line":353},[34,5977,5978],{"class":205},"    \u002F\u002F调用函数时，实参值传给了形参\n",[34,5980,5981,5983,5985,5988],{"class":36,"line":359},[34,5982,2211],{"class":40},[34,5984,1837],{"class":87},[34,5986,5987],{"class":149},"add",[34,5989,5990],{"class":40},"(a,b);\n",[34,5992,5993],{"class":36,"line":579},[34,5994,241],{"class":40},[14,5996,5998],{"id":5997},"_23值传递","2.3值传递",[108,6000,6001],{},"值传递就是函数调用时实参将数值传给形参",[108,6003,6004],{},"值传递时，如果形参发生任何改变，不会影响实参",[108,6006,6007],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[24,6009,6011],{"className":789,"code":6010,"language":791,"meta":29,"style":29},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[31,6012,6013,6035,6039,6052,6069,6087,6098,6107,6116,6129,6145,6161,6170,6174,6182,6186,6198,6210,6217],{"__ignoreMap":29},[34,6014,6015,6018,6021,6023,6025,6027,6029,6031,6033],{"class":36,"line":37},[34,6016,6017],{"class":87},"void",[34,6019,6020],{"class":149}," swap",[34,6022,801],{"class":40},[34,6024,804],{"class":87},[34,6026,5870],{"class":5869},[34,6028,1173],{"class":40},[34,6030,804],{"class":87},[34,6032,5877],{"class":5869},[34,6034,807],{"class":40},[34,6036,6037],{"class":36,"line":51},[34,6038,2206],{"class":40},[34,6040,6041,6043,6045,6048,6050],{"class":36,"line":60},[34,6042,2211],{"class":40},[34,6044,1837],{"class":87},[34,6046,6047],{"class":156},"\"交换前：\"",[34,6049,1837],{"class":87},[34,6051,1859],{"class":40},[34,6053,6054,6056,6058,6061,6063,6065,6067],{"class":36,"line":76},[34,6055,2211],{"class":40},[34,6057,1837],{"class":87},[34,6059,6060],{"class":156},"\"num1=\"",[34,6062,1837],{"class":87},[34,6064,5895],{"class":40},[34,6066,1837],{"class":87},[34,6068,1859],{"class":40},[34,6070,6071,6073,6075,6078,6080,6083,6085],{"class":36,"line":93},[34,6072,2211],{"class":40},[34,6074,1837],{"class":87},[34,6076,6077],{"class":156},"\"num2=\"",[34,6079,1837],{"class":87},[34,6081,6082],{"class":40},"num2",[34,6084,1837],{"class":87},[34,6086,1859],{"class":40},[34,6088,6089,6091,6093,6095],{"class":36,"line":99},[34,6090,2638],{"class":87},[34,6092,4908],{"class":40},[34,6094,153],{"class":87},[34,6096,6097],{"class":40},"num1;\n",[34,6099,6100,6103,6105],{"class":36,"line":353},[34,6101,6102],{"class":40},"    num1",[34,6104,153],{"class":87},[34,6106,5900],{"class":40},[34,6108,6109,6112,6114],{"class":36,"line":359},[34,6110,6111],{"class":40},"    num2",[34,6113,153],{"class":87},[34,6115,4933],{"class":40},[34,6117,6118,6120,6122,6125,6127],{"class":36,"line":579},[34,6119,2211],{"class":40},[34,6121,1837],{"class":87},[34,6123,6124],{"class":156},"\"交换后：\"",[34,6126,1837],{"class":87},[34,6128,1859],{"class":40},[34,6130,6131,6133,6135,6137,6139,6141,6143],{"class":36,"line":589},[34,6132,2211],{"class":40},[34,6134,1837],{"class":87},[34,6136,6060],{"class":156},[34,6138,1837],{"class":87},[34,6140,5895],{"class":40},[34,6142,1837],{"class":87},[34,6144,1859],{"class":40},[34,6146,6147,6149,6151,6153,6155,6157,6159],{"class":36,"line":601},[34,6148,2211],{"class":40},[34,6150,1837],{"class":87},[34,6152,6077],{"class":156},[34,6154,1837],{"class":87},[34,6156,6082],{"class":40},[34,6158,1837],{"class":87},[34,6160,1859],{"class":40},[34,6162,6163,6165,6167],{"class":36,"line":613},[34,6164,4743],{"class":87},[34,6166,854],{"class":40},[34,6168,6169],{"class":205},"\u002F\u002F或者不写\n",[34,6171,6172],{"class":36,"line":618},[34,6173,241],{"class":40},[34,6175,6176,6178,6180],{"class":36,"line":628},[34,6177,804],{"class":87},[34,6179,2626],{"class":149},[34,6181,2629],{"class":40},[34,6183,6184],{"class":36,"line":640},[34,6185,2206],{"class":40},[34,6187,6188,6190,6192,6194,6196],{"class":36,"line":2301},[34,6189,2638],{"class":87},[34,6191,2058],{"class":40},[34,6193,153],{"class":87},[34,6195,1241],{"class":63},[34,6197,73],{"class":40},[34,6199,6200,6202,6204,6206,6208],{"class":36,"line":2307},[34,6201,2638],{"class":87},[34,6203,3486],{"class":40},[34,6205,153],{"class":87},[34,6207,1495],{"class":63},[34,6209,73],{"class":40},[34,6211,6212,6215],{"class":36,"line":2328},[34,6213,6214],{"class":149},"    swap",[34,6216,5990],{"class":40},[34,6218,6219],{"class":36,"line":2333},[34,6220,241],{"class":40},[14,6222,6224],{"id":6223},"_24函数的常见形式","2.4函数的常见形式",[752,6226,6227],{},[755,6228,6229],{},"无参无返",[24,6231,6233],{"className":789,"code":6232,"language":791,"meta":29,"style":29},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[31,6234,6235,6244,6248,6261,6265,6273,6277,6282,6290],{"__ignoreMap":29},[34,6236,6237,6239,6242],{"class":36,"line":37},[34,6238,6017],{"class":87},[34,6240,6241],{"class":149}," test01",[34,6243,2629],{"class":40},[34,6245,6246],{"class":36,"line":51},[34,6247,2206],{"class":40},[34,6249,6250,6252,6254,6257,6259],{"class":36,"line":60},[34,6251,2211],{"class":40},[34,6253,1837],{"class":87},[34,6255,6256],{"class":156},"\"你好\"",[34,6258,1837],{"class":87},[34,6260,1859],{"class":40},[34,6262,6263],{"class":36,"line":76},[34,6264,241],{"class":40},[34,6266,6267,6269,6271],{"class":36,"line":93},[34,6268,804],{"class":87},[34,6270,2626],{"class":149},[34,6272,2629],{"class":40},[34,6274,6275],{"class":36,"line":99},[34,6276,2206],{"class":40},[34,6278,6279],{"class":36,"line":353},[34,6280,6281],{"class":205},"    \u002F\u002F函数调用\n",[34,6283,6284,6287],{"class":36,"line":359},[34,6285,6286],{"class":149},"    test01",[34,6288,6289],{"class":40},"();\n",[34,6291,6292],{"class":36,"line":579},[34,6293,241],{"class":40},[752,6295,6296],{"start":51},[755,6297,6298],{},"有参无返",[24,6300,6302],{"className":789,"code":6301,"language":791,"meta":29,"style":29},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[31,6303,6304,6319,6323,6335,6339,6347,6351,6362],{"__ignoreMap":29},[34,6305,6306,6308,6311,6313,6315,6317],{"class":36,"line":37},[34,6307,6017],{"class":87},[34,6309,6310],{"class":149}," test02",[34,6312,801],{"class":40},[34,6314,804],{"class":87},[34,6316,2058],{"class":5869},[34,6318,807],{"class":40},[34,6320,6321],{"class":36,"line":51},[34,6322,2206],{"class":40},[34,6324,6325,6327,6329,6331,6333],{"class":36,"line":60},[34,6326,2211],{"class":40},[34,6328,1837],{"class":87},[34,6330,6256],{"class":156},[34,6332,1837],{"class":87},[34,6334,1859],{"class":40},[34,6336,6337],{"class":36,"line":76},[34,6338,241],{"class":40},[34,6340,6341,6343,6345],{"class":36,"line":93},[34,6342,804],{"class":87},[34,6344,2626],{"class":149},[34,6346,2629],{"class":40},[34,6348,6349],{"class":36,"line":99},[34,6350,2206],{"class":40},[34,6352,6353,6356,6358,6360],{"class":36,"line":353},[34,6354,6355],{"class":149},"    test02",[34,6357,801],{"class":40},[34,6359,1106],{"class":63},[34,6361,3372],{"class":40},[34,6363,6364],{"class":36,"line":359},[34,6365,241],{"class":40},[752,6367,6368],{"start":60},[755,6369,6370],{},"无参有返",[24,6372,6374],{"className":789,"code":6373,"language":791,"meta":29,"style":29},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[31,6375,6376,6385,6389,6401,6410,6414,6422,6426,6439,6458],{"__ignoreMap":29},[34,6377,6378,6380,6383],{"class":36,"line":37},[34,6379,804],{"class":87},[34,6381,6382],{"class":149}," test03",[34,6384,2629],{"class":40},[34,6386,6387],{"class":36,"line":51},[34,6388,2206],{"class":40},[34,6390,6391,6393,6395,6397,6399],{"class":36,"line":60},[34,6392,2211],{"class":40},[34,6394,1837],{"class":87},[34,6396,6256],{"class":156},[34,6398,1837],{"class":87},[34,6400,1859],{"class":40},[34,6402,6403,6405,6408],{"class":36,"line":76},[34,6404,4743],{"class":87},[34,6406,6407],{"class":63}," 100",[34,6409,73],{"class":40},[34,6411,6412],{"class":36,"line":93},[34,6413,241],{"class":40},[34,6415,6416,6418,6420],{"class":36,"line":99},[34,6417,804],{"class":87},[34,6419,2626],{"class":149},[34,6421,2629],{"class":40},[34,6423,6424],{"class":36,"line":353},[34,6425,2206],{"class":40},[34,6427,6428,6430,6432,6434,6437],{"class":36,"line":359},[34,6429,2638],{"class":87},[34,6431,5870],{"class":40},[34,6433,153],{"class":87},[34,6435,6436],{"class":149},"test03",[34,6438,6289],{"class":40},[34,6440,6441,6443,6445,6447,6449,6451,6453,6455],{"class":36,"line":579},[34,6442,2211],{"class":40},[34,6444,1837],{"class":87},[34,6446,6060],{"class":156},[34,6448,1837],{"class":87},[34,6450,5895],{"class":40},[34,6452,1837],{"class":87},[34,6454,1902],{"class":40},[34,6456,6457],{"class":205}," \u002F\u002F100\n",[34,6459,6460],{"class":36,"line":589},[34,6461,241],{"class":40},[108,6463,6464],{},"4.有参有返",[24,6466,6468],{"className":789,"code":6467,"language":791,"meta":29,"style":29},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[31,6469,6470,6485,6489,6502,6508,6512,6521,6525,6537,6551,6566],{"__ignoreMap":29},[34,6471,6472,6474,6477,6479,6481,6483],{"class":36,"line":37},[34,6473,804],{"class":87},[34,6475,6476],{"class":149}," test04",[34,6478,801],{"class":40},[34,6480,804],{"class":87},[34,6482,2058],{"class":5869},[34,6484,807],{"class":40},[34,6486,6487],{"class":36,"line":51},[34,6488,2206],{"class":40},[34,6490,6491,6493,6495,6498,6500],{"class":36,"line":60},[34,6492,2211],{"class":40},[34,6494,1837],{"class":87},[34,6496,6497],{"class":156},"\"hello\"",[34,6499,1837],{"class":87},[34,6501,1859],{"class":40},[34,6503,6504,6506],{"class":36,"line":76},[34,6505,4743],{"class":87},[34,6507,2092],{"class":40},[34,6509,6510],{"class":36,"line":93},[34,6511,241],{"class":40},[34,6513,6514,6516,6519],{"class":36,"line":99},[34,6515,804],{"class":87},[34,6517,6518],{"class":149}," mian",[34,6520,2629],{"class":40},[34,6522,6523],{"class":36,"line":353},[34,6524,2206],{"class":40},[34,6526,6527,6529,6531,6533,6535],{"class":36,"line":359},[34,6528,2638],{"class":87},[34,6530,3486],{"class":40},[34,6532,153],{"class":87},[34,6534,1013],{"class":63},[34,6536,73],{"class":40},[34,6538,6539,6541,6543,6545,6548],{"class":36,"line":579},[34,6540,2638],{"class":87},[34,6542,3502],{"class":40},[34,6544,153],{"class":87},[34,6546,6547],{"class":149},"test04",[34,6549,6550],{"class":40},"(b);\n",[34,6552,6553,6555,6557,6559,6561,6563],{"class":36,"line":589},[34,6554,2211],{"class":40},[34,6556,1837],{"class":87},[34,6558,1083],{"class":40},[34,6560,1837],{"class":87},[34,6562,1902],{"class":40},[34,6564,6565],{"class":205}," \u002F\u002F1\n",[34,6567,6568],{"class":36,"line":601},[34,6569,241],{"class":40},[14,6571,6573],{"id":6572},"_25函数的声明","2.5函数的声明",[108,6575,6576],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[108,6578,6579,6580],{},"函数的",[111,6581,6582],{},"声明可以多次，但是函数的定义只能有一次",[24,6584,6586],{"className":789,"code":6585,"language":791,"meta":29,"style":29},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[31,6587,6588,6593,6598,6623,6632,6636,6648,6660,6676,6680,6700,6704,6723],{"__ignoreMap":29},[34,6589,6590],{"class":36,"line":37},[34,6591,6592],{"class":205},"\u002F\u002F函数声明\n",[34,6594,6595],{"class":36,"line":51},[34,6596,6597],{"class":205},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[34,6599,6600,6602,6605,6607,6609,6611,6613,6615,6617,6620],{"class":36,"line":60},[34,6601,804],{"class":87},[34,6603,6604],{"class":149}," max",[34,6606,801],{"class":40},[34,6608,804],{"class":87},[34,6610,2058],{"class":5869},[34,6612,1173],{"class":40},[34,6614,804],{"class":87},[34,6616,3486],{"class":5869},[34,6618,6619],{"class":40},");",[34,6621,6622],{"class":205},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[34,6624,6625,6627,6629],{"class":36,"line":76},[34,6626,804],{"class":87},[34,6628,2626],{"class":149},[34,6630,6631],{"class":40},"() \n",[34,6633,6634],{"class":36,"line":93},[34,6635,2206],{"class":40},[34,6637,6638,6640,6642,6644,6646],{"class":36,"line":99},[34,6639,2638],{"class":87},[34,6641,2058],{"class":40},[34,6643,153],{"class":87},[34,6645,1241],{"class":63},[34,6647,73],{"class":40},[34,6649,6650,6652,6654,6656,6658],{"class":36,"line":353},[34,6651,2638],{"class":87},[34,6653,3486],{"class":40},[34,6655,153],{"class":87},[34,6657,1495],{"class":63},[34,6659,73],{"class":40},[34,6661,6662,6664,6666,6669,6672,6674],{"class":36,"line":359},[34,6663,2211],{"class":40},[34,6665,1837],{"class":87},[34,6667,6668],{"class":149},"max",[34,6670,6671],{"class":40},"(a,b)",[34,6673,1837],{"class":87},[34,6675,1859],{"class":40},[34,6677,6678],{"class":36,"line":579},[34,6679,241],{"class":40},[34,6681,6682,6684,6686,6688,6690,6692,6694,6696,6698],{"class":36,"line":589},[34,6683,804],{"class":87},[34,6685,6604],{"class":149},[34,6687,801],{"class":40},[34,6689,804],{"class":87},[34,6691,2058],{"class":5869},[34,6693,1173],{"class":40},[34,6695,804],{"class":87},[34,6697,3486],{"class":5869},[34,6699,807],{"class":40},[34,6701,6702],{"class":36,"line":601},[34,6703,2206],{"class":40},[34,6705,6706,6708,6710,6712,6714,6716,6718,6720],{"class":36,"line":613},[34,6707,4743],{"class":87},[34,6709,2058],{"class":40},[34,6711,1753],{"class":87},[34,6713,1058],{"class":40},[34,6715,1779],{"class":87},[34,6717,520],{"class":40},[34,6719,1653],{"class":87},[34,6721,6722],{"class":40},"b;\n",[34,6724,6725],{"class":36,"line":618},[34,6726,241],{"class":40},[14,6728,6730],{"id":6729},"_26函数的分文件编写","2.6函数的分文件编写",[108,6732,6733],{},"4个步骤：",[1800,6735,6736,6739,6742,6745],{},[755,6737,6738],{},"1.创建后缀名为.h的头文件",[755,6740,6741],{},"2.创建后缀名为.cpp的源文件",[755,6743,6744],{},"3.在头文件中写函数的定义",[755,6746,6747],{},"4.在源文件中写函数的定义\n示例：",[108,6749,6750],{},"头文件：swap.h",[24,6752,6754],{"className":789,"code":6753,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[31,6755,6756,6762,6772,6776],{"__ignoreMap":29},[34,6757,6758,6760],{"class":36,"line":37},[34,6759,2603],{"class":87},[34,6761,2606],{"class":156},[34,6763,6764,6766,6768,6770],{"class":36,"line":51},[34,6765,2611],{"class":87},[34,6767,2614],{"class":87},[34,6769,2617],{"class":149},[34,6771,73],{"class":40},[34,6773,6774],{"class":36,"line":60},[34,6775,6592],{"class":205},[34,6777,6778,6780,6782,6784,6786,6788,6790,6792,6794],{"class":36,"line":76},[34,6779,6017],{"class":87},[34,6781,6020],{"class":149},[34,6783,801],{"class":40},[34,6785,804],{"class":87},[34,6787,2058],{"class":5869},[34,6789,1173],{"class":40},[34,6791,804],{"class":87},[34,6793,3486],{"class":5869},[34,6795,3372],{"class":40},[108,6797,6798],{},"源文件：swap.cpp",[24,6800,6802],{"className":789,"code":6801,"language":791,"meta":29,"style":29},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[31,6803,6804,6811,6816,6836,6840,6851,6860,6869,6886,6903],{"__ignoreMap":29},[34,6805,6806,6808],{"class":36,"line":37},[34,6807,2603],{"class":87},[34,6809,6810],{"class":156}," \"swap.h\"\n",[34,6812,6813],{"class":36,"line":51},[34,6814,6815],{"class":205},"\u002F\u002F函数的定义\n",[34,6817,6818,6820,6822,6824,6826,6828,6830,6832,6834],{"class":36,"line":60},[34,6819,6017],{"class":87},[34,6821,6020],{"class":149},[34,6823,801],{"class":40},[34,6825,804],{"class":87},[34,6827,2058],{"class":5869},[34,6829,1173],{"class":40},[34,6831,804],{"class":87},[34,6833,3486],{"class":5869},[34,6835,807],{"class":40},[34,6837,6838],{"class":36,"line":76},[34,6839,2206],{"class":40},[34,6841,6842,6844,6846,6848],{"class":36,"line":93},[34,6843,2638],{"class":87},[34,6845,4908],{"class":40},[34,6847,153],{"class":87},[34,6849,6850],{"class":40},"a;\n",[34,6852,6853,6856,6858],{"class":36,"line":99},[34,6854,6855],{"class":40},"    a",[34,6857,153],{"class":87},[34,6859,6722],{"class":40},[34,6861,6862,6865,6867],{"class":36,"line":353},[34,6863,6864],{"class":40},"    b",[34,6866,153],{"class":87},[34,6868,4933],{"class":40},[34,6870,6871,6873,6875,6878,6880,6882,6884],{"class":36,"line":359},[34,6872,2211],{"class":40},[34,6874,1837],{"class":87},[34,6876,6877],{"class":156},"\"a=\"",[34,6879,1837],{"class":87},[34,6881,520],{"class":40},[34,6883,1837],{"class":87},[34,6885,1859],{"class":40},[34,6887,6888,6890,6892,6895,6897,6899,6901],{"class":36,"line":579},[34,6889,2211],{"class":40},[34,6891,1837],{"class":87},[34,6893,6894],{"class":156},"\"b=\"",[34,6896,1837],{"class":87},[34,6898,1058],{"class":40},[34,6900,1837],{"class":87},[34,6902,1859],{"class":40},[34,6904,6905],{"class":36,"line":589},[34,6906,241],{"class":40},[45,6908,6909],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":6911},[6912,6913,6914,6915,6916,6917],{"id":5825,"depth":51,"text":5826},{"id":5914,"depth":51,"text":5915},{"id":5997,"depth":51,"text":5998},{"id":6223,"depth":51,"text":6224},{"id":6572,"depth":51,"text":6573},{"id":6729,"depth":51,"text":6730},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5817,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6924,"title":6925,"body":6926,"description":6933,"extension":724,"meta":8338,"navigation":726,"path":8339,"seo":8340,"stem":8341,"__hash__":8342},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6927,"toc":8328},[6928,6931,6934,6938,7100,7104,7107,7110,7113,7116,7256,7260,7263,7266,7269,7334,7338,7343,7410,7413,7417,7420,7431,7436,7456,7459,7464,7483,7486,7490,7509,7512,7516,7751,7755,7758,7761,7764,7926,7929,7933,7936,7942,8325],[10,6929,6925],{"id":6930},"_3指针",[108,6932,6933],{},"通过指针保存一个地址，指针就是个地址",[14,6935,6937],{"id":6936},"_31定义指针","3.1定义指针",[24,6939,6941],{"className":789,"code":6940,"language":791,"meta":29,"style":29},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[31,6942,6943,6951,6955,6960,6972,6977,6985,6995,7013,7033,7037,7042,7047,7052,7066,7082,7096],{"__ignoreMap":29},[34,6944,6945,6947,6949],{"class":36,"line":37},[34,6946,804],{"class":87},[34,6948,2626],{"class":149},[34,6950,2629],{"class":40},[34,6952,6953],{"class":36,"line":51},[34,6954,2206],{"class":40},[34,6956,6957],{"class":36,"line":60},[34,6958,6959],{"class":205},"    \u002F\u002F1.定义指针\n",[34,6961,6962,6964,6966,6968,6970],{"class":36,"line":76},[34,6963,2638],{"class":87},[34,6965,2058],{"class":40},[34,6967,153],{"class":87},[34,6969,1241],{"class":63},[34,6971,73],{"class":40},[34,6973,6974],{"class":36,"line":93},[34,6975,6976],{"class":205},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[34,6978,6979,6982],{"class":36,"line":99},[34,6980,6981],{"class":87},"    int*",[34,6983,6984],{"class":40},"p;\n",[34,6986,6987,6990,6993],{"class":36,"line":353},[34,6988,6989],{"class":40},"    p",[34,6991,6992],{"class":87},"=&",[34,6994,6850],{"class":40},[34,6996,6997,6999,7001,7004,7007,7009,7011],{"class":36,"line":359},[34,6998,2211],{"class":40},[34,7000,1837],{"class":87},[34,7002,7003],{"class":156},"\"a的地址为：\"",[34,7005,7006],{"class":87},"\u003C\u003C&",[34,7008,520],{"class":40},[34,7010,1837],{"class":87},[34,7012,1859],{"class":40},[34,7014,7015,7017,7019,7022,7024,7026,7028,7030],{"class":36,"line":579},[34,7016,2211],{"class":40},[34,7018,1837],{"class":87},[34,7020,7021],{"class":156},"\"指针p为：\"",[34,7023,1837],{"class":87},[34,7025,108],{"class":40},[34,7027,1837],{"class":87},[34,7029,1902],{"class":40},[34,7031,7032],{"class":205},"\u002F\u002F指针p表示的就是a的地址\n",[34,7034,7035],{"class":36,"line":589},[34,7036,3053],{"emptyLinePlaceholder":726},[34,7038,7039],{"class":36,"line":601},[34,7040,7041],{"class":205},"    \u002F\u002F2.使用指针\n",[34,7043,7044],{"class":36,"line":613},[34,7045,7046],{"class":205},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[34,7048,7049],{"class":36,"line":618},[34,7050,7051],{"class":205},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[34,7053,7054,7057,7059,7061,7064],{"class":36,"line":628},[34,7055,7056],{"class":87},"    *",[34,7058,108],{"class":40},[34,7060,153],{"class":87},[34,7062,7063],{"class":63},"1000",[34,7065,73],{"class":40},[34,7067,7068,7070,7073,7075,7077,7079],{"class":36,"line":640},[34,7069,2211],{"class":40},[34,7071,7072],{"class":87},"\u003C\u003C*",[34,7074,108],{"class":40},[34,7076,1837],{"class":87},[34,7078,1902],{"class":40},[34,7080,7081],{"class":205},"\u002F\u002F1000\n",[34,7083,7084,7086,7088,7090,7092,7094],{"class":36,"line":2301},[34,7085,2211],{"class":40},[34,7087,1837],{"class":87},[34,7089,520],{"class":40},[34,7091,1837],{"class":87},[34,7093,1902],{"class":40},[34,7095,7081],{"class":205},[34,7097,7098],{"class":36,"line":2307},[34,7099,241],{"class":40},[14,7101,7103],{"id":7102},"_32指针所占的内存空间","3.2指针所占的内存空间",[108,7105,7106],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[108,7108,7109],{},"在32位操作系统下：占用4个字节空间",[108,7111,7112],{},"在64位操作系统下：占用8个字节空间",[108,7114,7115],{},"上方是不管啥数据类型的",[24,7117,7119],{"className":789,"code":7118,"language":791,"meta":29,"style":29},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[31,7120,7121,7129,7133,7138,7150,7155,7160,7165,7178,7200,7226,7252],{"__ignoreMap":29},[34,7122,7123,7125,7127],{"class":36,"line":37},[34,7124,804],{"class":87},[34,7126,2626],{"class":149},[34,7128,2629],{"class":40},[34,7130,7131],{"class":36,"line":51},[34,7132,2206],{"class":40},[34,7134,7135],{"class":36,"line":60},[34,7136,7137],{"class":205},"    \u002F\u002F指针所占内存空间\n",[34,7139,7140,7142,7144,7146,7148],{"class":36,"line":76},[34,7141,2638],{"class":87},[34,7143,2058],{"class":40},[34,7145,153],{"class":87},[34,7147,1241],{"class":63},[34,7149,73],{"class":40},[34,7151,7152],{"class":36,"line":93},[34,7153,7154],{"class":205},"    \u002F\u002Fint *p;\n",[34,7156,7157],{"class":36,"line":99},[34,7158,7159],{"class":205},"    \u002F\u002Fp=&a;\n",[34,7161,7162],{"class":36,"line":353},[34,7163,7164],{"class":205},"    \u002F\u002F上述可以写为以下：\n",[34,7166,7167,7169,7172,7174,7176],{"class":36,"line":359},[34,7168,2638],{"class":87},[34,7170,7171],{"class":87}," *",[34,7173,108],{"class":40},[34,7175,6992],{"class":87},[34,7177,6850],{"class":40},[34,7179,7180,7183,7185,7188,7190,7193,7195,7197],{"class":36,"line":579},[34,7181,7182],{"class":40},"    cout ",[34,7184,1837],{"class":87},[34,7186,7187],{"class":156},"\"sizeof(int *)\"",[34,7189,2032],{"class":87},[34,7191,7192],{"class":40},"(p)",[34,7194,1837],{"class":87},[34,7196,1902],{"class":40},[34,7198,7199],{"class":205},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[34,7201,7202,7204,7206,7208,7210,7212,7214,7216,7218,7220,7223],{"class":36,"line":589},[34,7203,7182],{"class":40},[34,7205,1837],{"class":87},[34,7207,7187],{"class":156},[34,7209,2032],{"class":87},[34,7211,801],{"class":40},[34,7213,804],{"class":87},[34,7215,7171],{"class":87},[34,7217,1224],{"class":40},[34,7219,1837],{"class":87},[34,7221,7222],{"class":40},"endl",[34,7224,7225],{"class":205},"  \u002F\u002F4字节(32位的话)\n",[34,7227,7228,7230,7232,7235,7237,7239,7241,7243,7245,7247,7249],{"class":36,"line":601},[34,7229,7182],{"class":40},[34,7231,1837],{"class":87},[34,7233,7234],{"class":156},"\"sizeof(char *)\"",[34,7236,2032],{"class":87},[34,7238,801],{"class":40},[34,7240,894],{"class":87},[34,7242,7171],{"class":87},[34,7244,1224],{"class":40},[34,7246,1837],{"class":87},[34,7248,1902],{"class":40},[34,7250,7251],{"class":205}," \u002F\u002F4字节(32位的话)\n",[34,7253,7254],{"class":36,"line":613},[34,7255,241],{"class":40},[14,7257,7259],{"id":7258},"_33空指针","3.3空指针",[108,7261,7262],{},"空指针：指针变量指向内存中编号为0的空间",[108,7264,7265],{},"用途：初始化指针变量",[108,7267,7268],{},"注意：空指针指向的内存是不可以访问的",[24,7270,7272],{"className":789,"code":7271,"language":791,"meta":29,"style":29},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[31,7273,7274,7282,7286,7291,7305,7310,7325,7330],{"__ignoreMap":29},[34,7275,7276,7278,7280],{"class":36,"line":37},[34,7277,804],{"class":87},[34,7279,2626],{"class":149},[34,7281,2629],{"class":40},[34,7283,7284],{"class":36,"line":51},[34,7285,2206],{"class":40},[34,7287,7288],{"class":36,"line":60},[34,7289,7290],{"class":205},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[34,7292,7293,7295,7297,7299,7301,7303],{"class":36,"line":76},[34,7294,2638],{"class":87},[34,7296,7171],{"class":87},[34,7298,108],{"class":40},[34,7300,153],{"class":87},[34,7302,3045],{"class":63},[34,7304,73],{"class":40},[34,7306,7307],{"class":36,"line":93},[34,7308,7309],{"class":205},"    \u002F\u002F2.空指针不能进行访问\n",[34,7311,7312,7314,7316,7318,7320,7322],{"class":36,"line":99},[34,7313,7056],{"class":87},[34,7315,108],{"class":40},[34,7317,153],{"class":87},[34,7319,1106],{"class":63},[34,7321,854],{"class":40},[34,7323,7324],{"class":205},"\u002F\u002F直接报错，压根不能访问\n",[34,7326,7327],{"class":36,"line":353},[34,7328,7329],{"class":205},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[34,7331,7332],{"class":36,"line":359},[34,7333,241],{"class":40},[14,7335,7337],{"id":7336},"_34野指针","3.4野指针",[108,7339,7340],{},[111,7341,7342],{},"指针变量指向非法的内存空间",[24,7344,7346],{"className":789,"code":7345,"language":791,"meta":29,"style":29},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[31,7347,7348,7356,7360,7389,7394,7406],{"__ignoreMap":29},[34,7349,7350,7352,7354],{"class":36,"line":37},[34,7351,804],{"class":87},[34,7353,2626],{"class":149},[34,7355,2629],{"class":40},[34,7357,7358],{"class":36,"line":51},[34,7359,2206],{"class":40},[34,7361,7362,7364,7366,7368,7370,7372,7374,7376,7378,7381,7384,7386],{"class":36,"line":60},[34,7363,2638],{"class":87},[34,7365,7171],{"class":87},[34,7367,108],{"class":40},[34,7369,153],{"class":87},[34,7371,801],{"class":40},[34,7373,804],{"class":87},[34,7375,7171],{"class":87},[34,7377,1224],{"class":40},[34,7379,7380],{"class":87},"0x",[34,7382,7383],{"class":63},"1100",[34,7385,854],{"class":40},[34,7387,7388],{"class":205}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[34,7390,7391],{"class":36,"line":76},[34,7392,7393],{"class":205},"    \u002F\u002F访问野指针报错\n",[34,7395,7396,7398,7400,7402,7404],{"class":36,"line":93},[34,7397,2211],{"class":40},[34,7399,7072],{"class":87},[34,7401,108],{"class":40},[34,7403,1837],{"class":87},[34,7405,1859],{"class":40},[34,7407,7408],{"class":36,"line":99},[34,7409,241],{"class":40},[108,7411,7412],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7414,7416],{"id":7415},"_35const修饰指针","3.5const修饰指针",[108,7418,7419],{},"三种情况：",[1800,7421,7422,7425,7428],{},[755,7423,7424],{},"const修饰指针 常量指针",[755,7426,7427],{},"const修饰常量 指针常量",[755,7429,7430],{},"const即修饰指针，又修饰常量",[752,7432,7433],{},[755,7434,7435],{},"常量指针",[24,7437,7439],{"className":789,"code":7438,"language":791,"meta":29,"style":29},"const int *p=&a;\n",[31,7440,7441],{"__ignoreMap":29},[34,7442,7443,7446,7448,7450,7452,7454],{"class":36,"line":37},[34,7444,7445],{"class":87},"const",[34,7447,3035],{"class":87},[34,7449,7171],{"class":87},[34,7451,108],{"class":40},[34,7453,6992],{"class":87},[34,7455,6850],{"class":40},[108,7457,7458],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[752,7460,7461],{"start":51},[755,7462,7463],{},"指针常量",[24,7465,7467],{"className":789,"code":7466,"language":791,"meta":29,"style":29},"int *const p=&a;\n",[31,7468,7469],{"__ignoreMap":29},[34,7470,7471,7473,7476,7479,7481],{"class":36,"line":37},[34,7472,804],{"class":87},[34,7474,7475],{"class":87}," *const",[34,7477,7478],{"class":40}," p",[34,7480,6992],{"class":87},[34,7482,6850],{"class":40},[108,7484,7485],{},"指针的指向不可以改，指针指向的值可以改",[752,7487,7488],{"start":60},[755,7489,7430],{},[24,7491,7493],{"className":789,"code":7492,"language":791,"meta":29,"style":29},"const int *const p=&a;\n",[31,7494,7495],{"__ignoreMap":29},[34,7496,7497,7499,7501,7503,7505,7507],{"class":36,"line":37},[34,7498,7445],{"class":87},[34,7500,3035],{"class":87},[34,7502,7475],{"class":87},[34,7504,7478],{"class":40},[34,7506,6992],{"class":87},[34,7508,6850],{"class":40},[108,7510,7511],{},"指针的指向和指针指向的值都不可以改变",[14,7513,7515],{"id":7514},"_36指针和数组","3.6指针和数组",[24,7517,7519],{"className":789,"code":7518,"language":791,"meta":29,"style":29},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[31,7520,7521,7529,7533,7538,7592,7613,7629,7645,7656,7673,7678,7692,7718,7722,7734,7743,7747],{"__ignoreMap":29},[34,7522,7523,7525,7527],{"class":36,"line":37},[34,7524,804],{"class":87},[34,7526,2626],{"class":149},[34,7528,2629],{"class":40},[34,7530,7531],{"class":36,"line":51},[34,7532,2206],{"class":40},[34,7534,7535],{"class":36,"line":60},[34,7536,7537],{"class":205},"    \u002F\u002F利用指针访问数组中的元素\n",[34,7539,7540,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590],{"class":36,"line":76},[34,7541,2638],{"class":87},[34,7543,4615],{"class":40},[34,7545,1241],{"class":63},[34,7547,1733],{"class":40},[34,7549,153],{"class":87},[34,7551,1690],{"class":40},[34,7553,1013],{"class":63},[34,7555,1173],{"class":40},[34,7557,875],{"class":63},[34,7559,1173],{"class":40},[34,7561,869],{"class":63},[34,7563,1173],{"class":40},[34,7565,1088],{"class":63},[34,7567,1173],{"class":40},[34,7569,1114],{"class":63},[34,7571,1173],{"class":40},[34,7573,1139],{"class":63},[34,7575,1173],{"class":40},[34,7577,1164],{"class":63},[34,7579,1173],{"class":40},[34,7581,1190],{"class":63},[34,7583,1173],{"class":40},[34,7585,1215],{"class":63},[34,7587,1173],{"class":40},[34,7589,1241],{"class":63},[34,7591,4648],{"class":40},[34,7593,7594,7596,7598,7601,7603,7605,7607,7609,7611],{"class":36,"line":93},[34,7595,2211],{"class":40},[34,7597,1837],{"class":87},[34,7599,7600],{"class":156},"\"数组的第一个元素为：\"",[34,7602,1837],{"class":87},[34,7604,4559],{"class":40},[34,7606,987],{"class":63},[34,7608,1733],{"class":40},[34,7610,1837],{"class":87},[34,7612,1859],{"class":40},[34,7614,7615,7617,7619,7621,7623,7626],{"class":36,"line":99},[34,7616,2638],{"class":87},[34,7618,7171],{"class":87},[34,7620,108],{"class":40},[34,7622,153],{"class":87},[34,7624,7625],{"class":40},"arr;",[34,7627,7628],{"class":205},"\u002F\u002F注意数才要加取地址符号&\n",[34,7630,7631,7633,7635,7637,7639,7641,7643],{"class":36,"line":353},[34,7632,2211],{"class":40},[34,7634,1837],{"class":87},[34,7636,7600],{"class":156},[34,7638,7072],{"class":87},[34,7640,108],{"class":40},[34,7642,1837],{"class":87},[34,7644,1859],{"class":40},[34,7646,7647,7649,7651,7653],{"class":36,"line":359},[34,7648,6989],{"class":40},[34,7650,2945],{"class":87},[34,7652,854],{"class":40},[34,7654,7655],{"class":205}," \u002F\u002F让指针向后偏移4个字节\n",[34,7657,7658,7660,7662,7665,7667,7669,7671],{"class":36,"line":579},[34,7659,2211],{"class":40},[34,7661,1837],{"class":87},[34,7663,7664],{"class":156},"\"数组的第二个元素为：\"",[34,7666,7072],{"class":87},[34,7668,108],{"class":40},[34,7670,1837],{"class":87},[34,7672,1859],{"class":40},[34,7674,7675],{"class":36,"line":589},[34,7676,7677],{"class":205},"    \u002F\u002F利用指针遍历数组\n",[34,7679,7680,7682,7684,7687,7689],{"class":36,"line":601},[34,7681,2638],{"class":87},[34,7683,7171],{"class":87},[34,7685,7686],{"class":40},"p2",[34,7688,153],{"class":87},[34,7690,7691],{"class":40},"arr;\n",[34,7693,7694,7696,7698,7700,7702,7704,7706,7708,7710,7712,7714,7716],{"class":36,"line":613},[34,7695,3854],{"class":87},[34,7697,2312],{"class":40},[34,7699,804],{"class":87},[34,7701,3685],{"class":40},[34,7703,153],{"class":87},[34,7705,987],{"class":63},[34,7707,3692],{"class":40},[34,7709,41],{"class":87},[34,7711,1241],{"class":63},[34,7713,3692],{"class":40},[34,7715,2945],{"class":87},[34,7717,807],{"class":40},[34,7719,7720],{"class":36,"line":618},[34,7721,2683],{"class":40},[34,7723,7724,7726,7728,7730,7732],{"class":36,"line":628},[34,7725,4104],{"class":40},[34,7727,7072],{"class":87},[34,7729,7686],{"class":40},[34,7731,1837],{"class":87},[34,7733,1859],{"class":40},[34,7735,7736,7739,7741],{"class":36,"line":640},[34,7737,7738],{"class":40},"        p2",[34,7740,2945],{"class":87},[34,7742,73],{"class":40},[34,7744,7745],{"class":36,"line":2301},[34,7746,2840],{"class":40},[34,7748,7749],{"class":36,"line":2307},[34,7750,241],{"class":40},[14,7752,7754],{"id":7753},"_37指针和函数","3.7指针和函数",[108,7756,7757],{},"利用指针做函数参数，可以修改实参的值",[108,7759,7760],{},"值传递：只改变形参，不改变实参",[108,7762,7763],{},"地址传递：",[24,7765,7767],{"className":789,"code":7766,"language":791,"meta":29,"style":29},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[31,7768,7769,7794,7798,7810,7821,7831,7835,7843,7847,7859,7871,7876,7892,7907,7922],{"__ignoreMap":29},[34,7770,7771,7773,7775,7777,7779,7781,7784,7786,7788,7790,7792],{"class":36,"line":37},[34,7772,6017],{"class":87},[34,7774,6020],{"class":149},[34,7776,801],{"class":40},[34,7778,804],{"class":87},[34,7780,7171],{"class":87},[34,7782,7783],{"class":5869},"p1",[34,7785,1173],{"class":40},[34,7787,804],{"class":87},[34,7789,7171],{"class":87},[34,7791,7686],{"class":5869},[34,7793,807],{"class":40},[34,7795,7796],{"class":36,"line":51},[34,7797,2206],{"class":40},[34,7799,7800,7802,7804,7807],{"class":36,"line":60},[34,7801,2638],{"class":87},[34,7803,4908],{"class":40},[34,7805,7806],{"class":87},"=*",[34,7808,7809],{"class":40},"p1;\n",[34,7811,7812,7814,7816,7818],{"class":36,"line":76},[34,7813,7056],{"class":87},[34,7815,7783],{"class":40},[34,7817,7806],{"class":87},[34,7819,7820],{"class":40},"p2;\n",[34,7822,7823,7825,7827,7829],{"class":36,"line":93},[34,7824,7056],{"class":87},[34,7826,7686],{"class":40},[34,7828,153],{"class":87},[34,7830,4933],{"class":40},[34,7832,7833],{"class":36,"line":99},[34,7834,241],{"class":40},[34,7836,7837,7839,7841],{"class":36,"line":353},[34,7838,804],{"class":87},[34,7840,2626],{"class":149},[34,7842,2629],{"class":40},[34,7844,7845],{"class":36,"line":359},[34,7846,2206],{"class":40},[34,7848,7849,7851,7853,7855,7857],{"class":36,"line":579},[34,7850,2638],{"class":87},[34,7852,2058],{"class":40},[34,7854,153],{"class":87},[34,7856,1241],{"class":63},[34,7858,73],{"class":40},[34,7860,7861,7863,7865,7867,7869],{"class":36,"line":589},[34,7862,2638],{"class":87},[34,7864,3486],{"class":40},[34,7866,153],{"class":87},[34,7868,1495],{"class":63},[34,7870,73],{"class":40},[34,7872,7873],{"class":36,"line":601},[34,7874,7875],{"class":205},"    \u002F\u002F地址传递\n",[34,7877,7878,7880,7882,7884,7887,7889],{"class":36,"line":613},[34,7879,6214],{"class":149},[34,7881,801],{"class":40},[34,7883,1148],{"class":87},[34,7885,7886],{"class":40},"a,",[34,7888,1148],{"class":87},[34,7890,7891],{"class":40},"b);\n",[34,7893,7894,7896,7898,7900,7902,7904],{"class":36,"line":618},[34,7895,2211],{"class":40},[34,7897,1837],{"class":87},[34,7899,520],{"class":40},[34,7901,1837],{"class":87},[34,7903,1902],{"class":40},[34,7905,7906],{"class":205},"\u002F\u002F20\n",[34,7908,7909,7911,7913,7915,7917,7919],{"class":36,"line":628},[34,7910,2211],{"class":40},[34,7912,1837],{"class":87},[34,7914,1058],{"class":40},[34,7916,1837],{"class":87},[34,7918,1902],{"class":40},[34,7920,7921],{"class":205},"\u002F\u002F10\n",[34,7923,7924],{"class":36,"line":640},[34,7925,241],{"class":40},[108,7927,7928],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7930,7932],{"id":7931},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[108,7934,7935],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[108,7937,7938,7939,7941],{},"例如数组：int arr",[34,7940,1241],{},"={4,3,6,9,1,2,10,8,7,5}",[24,7943,7945],{"className":789,"code":7944,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[31,7946,7947,7953,7963,7987,7991,8022,8026,8060,8064,8082,8086,8097,8112,8127,8131,8135,8139,8143,8147,8155,8159,8164,8218,8230,8242,8247,8255,8259,8264,8289,8293,8308,8317,8321],{"__ignoreMap":29},[34,7948,7949,7951],{"class":36,"line":37},[34,7950,2603],{"class":87},[34,7952,2606],{"class":156},[34,7954,7955,7957,7959,7961],{"class":36,"line":51},[34,7956,2611],{"class":87},[34,7958,2614],{"class":87},[34,7960,2617],{"class":149},[34,7962,73],{"class":40},[34,7964,7965,7967,7970,7972,7974,7976,7978,7980,7982,7985],{"class":36,"line":60},[34,7966,6017],{"class":87},[34,7968,7969],{"class":149}," bubbleSort",[34,7971,801],{"class":40},[34,7973,804],{"class":87},[34,7975,7171],{"class":87},[34,7977,108],{"class":5869},[34,7979,1173],{"class":40},[34,7981,804],{"class":87},[34,7983,7984],{"class":5869}," len",[34,7986,807],{"class":40},[34,7988,7989],{"class":36,"line":76},[34,7990,2206],{"class":40},[34,7992,7993,7995,7997,7999,8001,8003,8005,8007,8009,8012,8014,8016,8018,8020],{"class":36,"line":93},[34,7994,3854],{"class":87},[34,7996,801],{"class":40},[34,7998,804],{"class":87},[34,8000,3685],{"class":40},[34,8002,153],{"class":87},[34,8004,987],{"class":63},[34,8006,3692],{"class":40},[34,8008,41],{"class":87},[34,8010,8011],{"class":40},"len",[34,8013,1327],{"class":87},[34,8015,1013],{"class":63},[34,8017,3692],{"class":40},[34,8019,2945],{"class":87},[34,8021,807],{"class":40},[34,8023,8024],{"class":36,"line":99},[34,8025,2683],{"class":40},[34,8027,8028,8030,8032,8034,8036,8038,8040,8042,8044,8046,8048,8050,8052,8054,8056,8058],{"class":36,"line":353},[34,8029,4056],{"class":87},[34,8031,801],{"class":40},[34,8033,804],{"class":87},[34,8035,4063],{"class":40},[34,8037,153],{"class":87},[34,8039,987],{"class":63},[34,8041,4070],{"class":40},[34,8043,41],{"class":87},[34,8045,8011],{"class":40},[34,8047,1327],{"class":87},[34,8049,1236],{"class":40},[34,8051,1327],{"class":87},[34,8053,1013],{"class":63},[34,8055,4070],{"class":40},[34,8057,2945],{"class":87},[34,8059,807],{"class":40},[34,8061,8062],{"class":36,"line":359},[34,8063,3163],{"class":40},[34,8065,8066,8068,8071,8073,8076,8078,8080],{"class":36,"line":579},[34,8067,5295],{"class":87},[34,8069,8070],{"class":40},"(p[j]",[34,8072,1753],{"class":87},[34,8074,8075],{"class":40},"p[j",[34,8077,1276],{"class":87},[34,8079,1013],{"class":63},[34,8081,5310],{"class":40},[34,8083,8084],{"class":36,"line":589},[34,8085,5315],{"class":40},[34,8087,8088,8090,8092,8094],{"class":36,"line":601},[34,8089,5320],{"class":87},[34,8091,4908],{"class":40},[34,8093,153],{"class":87},[34,8095,8096],{"class":40},"p[j];\n",[34,8098,8099,8102,8104,8106,8108,8110],{"class":36,"line":613},[34,8100,8101],{"class":40},"                p[j]",[34,8103,153],{"class":87},[34,8105,8075],{"class":40},[34,8107,1276],{"class":87},[34,8109,1013],{"class":63},[34,8111,5343],{"class":40},[34,8113,8114,8117,8119,8121,8123,8125],{"class":36,"line":618},[34,8115,8116],{"class":40},"                p[j",[34,8118,1276],{"class":87},[34,8120,1013],{"class":63},[34,8122,1733],{"class":40},[34,8124,153],{"class":87},[34,8126,4933],{"class":40},[34,8128,8129],{"class":36,"line":628},[34,8130,5363],{"class":40},[34,8132,8133],{"class":36,"line":640},[34,8134,3182],{"class":40},[34,8136,8137],{"class":36,"line":2301},[34,8138,2840],{"class":40},[34,8140,8141],{"class":36,"line":2307},[34,8142,241],{"class":40},[34,8144,8145],{"class":36,"line":2328},[34,8146,3053],{"emptyLinePlaceholder":726},[34,8148,8149,8151,8153],{"class":36,"line":2333},[34,8150,804],{"class":87},[34,8152,2626],{"class":149},[34,8154,2629],{"class":40},[34,8156,8157],{"class":36,"line":2347},[34,8158,2206],{"class":40},[34,8160,8161],{"class":36,"line":2352},[34,8162,8163],{"class":205},"    \u002F\u002F 1.创建数组\n",[34,8165,8166,8168,8170,8172,8174,8176,8178,8180,8182,8184,8186,8188,8190,8192,8194,8196,8198,8200,8202,8204,8206,8208,8210,8212,8214,8216],{"class":36,"line":2381},[34,8167,2638],{"class":87},[34,8169,4615],{"class":40},[34,8171,1241],{"class":63},[34,8173,1733],{"class":40},[34,8175,153],{"class":87},[34,8177,1690],{"class":40},[34,8179,1088],{"class":63},[34,8181,1173],{"class":40},[34,8183,869],{"class":63},[34,8185,1173],{"class":40},[34,8187,1139],{"class":63},[34,8189,1173],{"class":40},[34,8191,1215],{"class":63},[34,8193,1173],{"class":40},[34,8195,1013],{"class":63},[34,8197,1173],{"class":40},[34,8199,875],{"class":63},[34,8201,1173],{"class":40},[34,8203,1241],{"class":63},[34,8205,1173],{"class":40},[34,8207,1190],{"class":63},[34,8209,1173],{"class":40},[34,8211,1164],{"class":63},[34,8213,1173],{"class":40},[34,8215,1114],{"class":63},[34,8217,4648],{"class":40},[34,8219,8220,8222,8224,8226,8228],{"class":36,"line":2386},[34,8221,2638],{"class":87},[34,8223,7984],{"class":40},[34,8225,153],{"class":87},[34,8227,1241],{"class":63},[34,8229,73],{"class":40},[34,8231,8232,8234,8236,8238,8240],{"class":36,"line":2403},[34,8233,2638],{"class":87},[34,8235,7171],{"class":87},[34,8237,108],{"class":40},[34,8239,153],{"class":87},[34,8241,7691],{"class":40},[34,8243,8244],{"class":36,"line":2408},[34,8245,8246],{"class":205},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[34,8248,8249,8252],{"class":36,"line":2413},[34,8250,8251],{"class":149},"    bubbleSort",[34,8253,8254],{"class":40},"(p,len);\n",[34,8256,8257],{"class":36,"line":2418},[34,8258,3053],{"emptyLinePlaceholder":726},[34,8260,8261],{"class":36,"line":2432},[34,8262,8263],{"class":205},"    \u002F\u002F 3.打印排序后的数组\n",[34,8265,8266,8268,8270,8272,8274,8276,8278,8280,8282,8285,8287],{"class":36,"line":2437},[34,8267,3854],{"class":87},[34,8269,2312],{"class":40},[34,8271,804],{"class":87},[34,8273,3685],{"class":40},[34,8275,153],{"class":87},[34,8277,987],{"class":63},[34,8279,3867],{"class":40},[34,8281,41],{"class":87},[34,8283,8284],{"class":40},"len; i",[34,8286,2945],{"class":87},[34,8288,807],{"class":40},[34,8290,8291],{"class":36,"line":3230},[34,8292,2683],{"class":40},[34,8294,8295,8297,8299,8301,8303,8306],{"class":36,"line":3244},[34,8296,4104],{"class":40},[34,8298,7072],{"class":87},[34,8300,108],{"class":40},[34,8302,1837],{"class":87},[34,8304,8305],{"class":156},"\"\"",[34,8307,73],{"class":40},[34,8309,8310,8313,8315],{"class":36,"line":3252},[34,8311,8312],{"class":40},"        p",[34,8314,2945],{"class":87},[34,8316,73],{"class":40},[34,8318,8319],{"class":36,"line":3257},[34,8320,2840],{"class":40},[34,8322,8323],{"class":36,"line":3263},[34,8324,241],{"class":40},[45,8326,8327],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":8329},[8330,8331,8332,8333,8334,8335,8336,8337],{"id":6936,"depth":51,"text":6937},{"id":7102,"depth":51,"text":7103},{"id":7258,"depth":51,"text":7259},{"id":7336,"depth":51,"text":7337},{"id":7415,"depth":51,"text":7416},{"id":7514,"depth":51,"text":7515},{"id":7753,"depth":51,"text":7754},{"id":7931,"depth":51,"text":7932},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6925,"description":6933},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8344,"title":8345,"body":8346,"description":8353,"extension":724,"meta":11327,"navigation":726,"path":11328,"seo":11329,"stem":11330,"__hash__":11331},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8347,"toc":11318},[8348,8351,8354,8358,8361,8364,8375,8713,8716,8720,8723,8730,8985,8989,8992,8995,9150,9154,9157,9160,9366,9370,9373,9676,9679,9687,9691,9694,9845,9847,9858,9915,9919,9924,10581,10589,10592,10686,10689,11309,11315],[10,8349,8345],{"id":8350},"_4结构体",[108,8352,8353],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8355,8357],{"id":8356},"_41结构体定义与使用","4.1结构体定义与使用",[108,8359,8360],{},"语法：struct 结构体名 {结构体成员列表}；",[108,8362,8363],{},"通过结构体创建变量的方式：",[1800,8365,8366,8369,8372],{},[755,8367,8368],{},"struct 结构体名 变量名",[755,8370,8371],{},"struct 结构体名 变量名={成员1值，成员2值...}",[755,8373,8374],{},"定义结构体时顺便创建变量",[24,8376,8378],{"className":789,"code":8377,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[31,8379,8380,8386,8396,8403,8408,8416,8420,8425,8429,8434,8439,8444,8451,8456,8463,8467,8474,8478,8482,8486,8490,8494,8498,8504,8508,8514,8522,8530,8534,8539,8544,8555,8560,8572,8583,8594,8599,8623,8628,8634,8661,8666,8672,8684,8696,8708],{"__ignoreMap":29},[34,8381,8382,8384],{"class":36,"line":37},[34,8383,2603],{"class":87},[34,8385,2606],{"class":156},[34,8387,8388,8390,8392,8394],{"class":36,"line":51},[34,8389,2611],{"class":87},[34,8391,2614],{"class":87},[34,8393,2617],{"class":149},[34,8395,73],{"class":40},[34,8397,8398,8400],{"class":36,"line":60},[34,8399,2603],{"class":87},[34,8401,8402],{"class":156},"\u003Cstring>\n",[34,8404,8405],{"class":36,"line":76},[34,8406,8407],{"class":205},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[34,8409,8410,8413],{"class":36,"line":93},[34,8411,8412],{"class":87},"struct",[34,8414,8415],{"class":149}," Student\n",[34,8417,8418],{"class":36,"line":99},[34,8419,2206],{"class":40},[34,8421,8422],{"class":36,"line":353},[34,8423,8424],{"class":205},"    \u002F\u002F成员列表\n",[34,8426,8427],{"class":36,"line":359},[34,8428,3053],{"emptyLinePlaceholder":726},[34,8430,8431],{"class":36,"line":579},[34,8432,8433],{"class":205},"    \u002F\u002F姓名\n",[34,8435,8436],{"class":36,"line":589},[34,8437,8438],{"class":40},"    string name;\n",[34,8440,8441],{"class":36,"line":601},[34,8442,8443],{"class":205},"    \u002F\u002F年龄\n",[34,8445,8446,8448],{"class":36,"line":613},[34,8447,2638],{"class":87},[34,8449,8450],{"class":40}," age;\n",[34,8452,8453],{"class":36,"line":618},[34,8454,8455],{"class":205},"    \u002F\u002F分数\n",[34,8457,8458,8460],{"class":36,"line":628},[34,8459,2638],{"class":87},[34,8461,8462],{"class":40}," score;\n",[34,8464,8465],{"class":36,"line":640},[34,8466,4648],{"class":40},[34,8468,8469,8471],{"class":36,"line":2301},[34,8470,8412],{"class":87},[34,8472,8473],{"class":149}," School\n",[34,8475,8476],{"class":36,"line":2307},[34,8477,2206],{"class":40},[34,8479,8480],{"class":36,"line":2328},[34,8481,8424],{"class":205},[34,8483,8484],{"class":36,"line":2333},[34,8485,3053],{"emptyLinePlaceholder":726},[34,8487,8488],{"class":36,"line":2347},[34,8489,8433],{"class":205},[34,8491,8492],{"class":36,"line":2352},[34,8493,8438],{"class":40},[34,8495,8496],{"class":36,"line":2381},[34,8497,8443],{"class":205},[34,8499,8500,8502],{"class":36,"line":2386},[34,8501,2638],{"class":87},[34,8503,8450],{"class":40},[34,8505,8506],{"class":36,"line":2403},[34,8507,8455],{"class":205},[34,8509,8510,8512],{"class":36,"line":2408},[34,8511,2638],{"class":87},[34,8513,8462],{"class":40},[34,8515,8516,8519],{"class":36,"line":2413},[34,8517,8518],{"class":40},"} s3;",[34,8520,8521],{"class":205}," \u002F\u002F创建结构体时就创建了变量\n",[34,8523,8524,8526,8528],{"class":36,"line":2418},[34,8525,804],{"class":87},[34,8527,2626],{"class":149},[34,8529,2629],{"class":40},[34,8531,8532],{"class":36,"line":2432},[34,8533,2206],{"class":40},[34,8535,8536],{"class":36,"line":2437},[34,8537,8538],{"class":205},"    \u002F\u002F2.通过学生类型创建具体学生\n",[34,8540,8541],{"class":36,"line":3230},[34,8542,8543],{"class":205},"    \u002F\u002F2.1 struct Student s1;\n",[34,8545,8546,8549,8552],{"class":36,"line":3244},[34,8547,8548],{"class":87},"    struct",[34,8550,8551],{"class":149}," Student",[34,8553,8554],{"class":40}," s1;\n",[34,8556,8557],{"class":36,"line":3252},[34,8558,8559],{"class":205},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[34,8561,8562,8565,8567,8570],{"class":36,"line":3257},[34,8563,8564],{"class":40},"    s1.name",[34,8566,153],{"class":87},[34,8568,8569],{"class":156},"\"张三\"",[34,8571,73],{"class":40},[34,8573,8574,8577,8579,8581],{"class":36,"line":3263},[34,8575,8576],{"class":40},"    s1.age",[34,8578,153],{"class":87},[34,8580,1445],{"class":63},[34,8582,73],{"class":40},[34,8584,8585,8588,8590,8592],{"class":36,"line":3269},[34,8586,8587],{"class":40},"    s1.score",[34,8589,153],{"class":87},[34,8591,1049],{"class":63},[34,8593,73],{"class":40},[34,8595,8596],{"class":36,"line":3274},[34,8597,8598],{"class":205},"    \u002F\u002F输出结果\n",[34,8600,8602,8604,8606,8609,8611,8614,8616,8619,8621],{"class":36,"line":8601},37,[34,8603,2211],{"class":40},[34,8605,1837],{"class":87},[34,8607,8608],{"class":40},"s1.name",[34,8610,1837],{"class":87},[34,8612,8613],{"class":40},"s1.age",[34,8615,1837],{"class":87},[34,8617,8618],{"class":40},"s1.score",[34,8620,1837],{"class":87},[34,8622,1859],{"class":40},[34,8624,8626],{"class":36,"line":8625},38,[34,8627,3053],{"emptyLinePlaceholder":726},[34,8629,8631],{"class":36,"line":8630},39,[34,8632,8633],{"class":205},"    \u002F\u002F2.2 struct Student s2={...}\n",[34,8635,8637,8639,8641,8644,8646,8648,8651,8653,8655,8657,8659],{"class":36,"line":8636},40,[34,8638,8548],{"class":87},[34,8640,8551],{"class":149},[34,8642,8643],{"class":40}," s2",[34,8645,153],{"class":87},[34,8647,1690],{"class":40},[34,8649,8650],{"class":156},"\"王五\"",[34,8652,1173],{"class":40},[34,8654,1445],{"class":63},[34,8656,1173],{"class":40},[34,8658,1049],{"class":63},[34,8660,4648],{"class":40},[34,8662,8664],{"class":36,"line":8663},41,[34,8665,3053],{"emptyLinePlaceholder":726},[34,8667,8669],{"class":36,"line":8668},42,[34,8670,8671],{"class":205},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[34,8673,8675,8678,8680,8682],{"class":36,"line":8674},43,[34,8676,8677],{"class":40},"    s3.name",[34,8679,153],{"class":87},[34,8681,4331],{"class":156},[34,8683,73],{"class":40},[34,8685,8687,8690,8692,8694],{"class":36,"line":8686},44,[34,8688,8689],{"class":40},"    s3.age",[34,8691,153],{"class":87},[34,8693,1445],{"class":63},[34,8695,73],{"class":40},[34,8697,8699,8702,8704,8706],{"class":36,"line":8698},45,[34,8700,8701],{"class":40},"    s3.score",[34,8703,153],{"class":87},[34,8705,1495],{"class":63},[34,8707,73],{"class":40},[34,8709,8711],{"class":36,"line":8710},46,[34,8712,241],{"class":40},[108,8714,8715],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8717,8719],{"id":8718},"_42结构体数组","4.2结构体数组",[108,8721,8722],{},"将自定义的结构体放入到数组中方便维护",[108,8724,8725,8726,8729],{},"语法：struct 结构体名 数组名",[34,8727,8728],{},"元素个数","={ {}，{},...{} };",[24,8731,8733],{"className":789,"code":8732,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[31,8734,8735,8741,8751,8757,8762,8768,8772,8776,8782,8788,8792,8796,8804,8808,8813,8828,8832,8848,8864,8868,8873,8889,8904,8919,8924,8950,8954,8977,8981],{"__ignoreMap":29},[34,8736,8737,8739],{"class":36,"line":37},[34,8738,2603],{"class":87},[34,8740,2606],{"class":156},[34,8742,8743,8745,8747,8749],{"class":36,"line":51},[34,8744,2611],{"class":87},[34,8746,2614],{"class":87},[34,8748,2617],{"class":149},[34,8750,73],{"class":40},[34,8752,8753,8755],{"class":36,"line":60},[34,8754,2603],{"class":87},[34,8756,8402],{"class":156},[34,8758,8759],{"class":36,"line":76},[34,8760,8761],{"class":205},"\u002F\u002F1.定义结构体\n",[34,8763,8764,8766],{"class":36,"line":93},[34,8765,8412],{"class":87},[34,8767,8415],{"class":149},[34,8769,8770],{"class":36,"line":99},[34,8771,2206],{"class":40},[34,8773,8774],{"class":36,"line":353},[34,8775,8438],{"class":40},[34,8777,8778,8780],{"class":36,"line":359},[34,8779,2638],{"class":87},[34,8781,8450],{"class":40},[34,8783,8784,8786],{"class":36,"line":579},[34,8785,2638],{"class":87},[34,8787,8462],{"class":40},[34,8789,8790],{"class":36,"line":589},[34,8791,3053],{"emptyLinePlaceholder":726},[34,8793,8794],{"class":36,"line":601},[34,8795,4648],{"class":40},[34,8797,8798,8800,8802],{"class":36,"line":613},[34,8799,804],{"class":87},[34,8801,2626],{"class":149},[34,8803,2629],{"class":40},[34,8805,8806],{"class":36,"line":618},[34,8807,2206],{"class":40},[34,8809,8810],{"class":36,"line":628},[34,8811,8812],{"class":205},"    \u002F\u002F2.创建结构体数组\n",[34,8814,8815,8817,8819,8822,8824,8826],{"class":36,"line":640},[34,8816,8548],{"class":87},[34,8818,8551],{"class":149},[34,8820,8821],{"class":40}," stuArray[",[34,8823,875],{"class":63},[34,8825,1733],{"class":40},[34,8827,5561],{"class":87},[34,8829,8830],{"class":36,"line":2301},[34,8831,2683],{"class":40},[34,8833,8834,8836,8838,8840,8842,8844,8846],{"class":36,"line":2307},[34,8835,5570],{"class":40},[34,8837,8569],{"class":156},[34,8839,1173],{"class":40},[34,8841,1445],{"class":63},[34,8843,1173],{"class":40},[34,8845,1106],{"class":63},[34,8847,5583],{"class":40},[34,8849,8850,8852,8854,8856,8858,8860,8862],{"class":36,"line":2328},[34,8851,5570],{"class":40},[34,8853,4331],{"class":156},[34,8855,1173],{"class":40},[34,8857,1370],{"class":63},[34,8859,1173],{"class":40},[34,8861,1370],{"class":63},[34,8863,241],{"class":40},[34,8865,8866],{"class":36,"line":2333},[34,8867,2840],{"class":40},[34,8869,8870],{"class":36,"line":2347},[34,8871,8872],{"class":205},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[34,8874,8875,8878,8880,8883,8885,8887],{"class":36,"line":2352},[34,8876,8877],{"class":40},"    stuArray[",[34,8879,1013],{"class":63},[34,8881,8882],{"class":40},"].name",[34,8884,153],{"class":87},[34,8886,4354],{"class":156},[34,8888,73],{"class":40},[34,8890,8891,8893,8895,8898,8900,8902],{"class":36,"line":2381},[34,8892,8877],{"class":40},[34,8894,1013],{"class":63},[34,8896,8897],{"class":40},"].age",[34,8899,153],{"class":87},[34,8901,875],{"class":63},[34,8903,73],{"class":40},[34,8905,8906,8908,8910,8913,8915,8917],{"class":36,"line":2386},[34,8907,8877],{"class":40},[34,8909,1013],{"class":63},[34,8911,8912],{"class":40},"].score",[34,8914,153],{"class":87},[34,8916,875],{"class":63},[34,8918,73],{"class":40},[34,8920,8921],{"class":36,"line":2403},[34,8922,8923],{"class":205},"    \u002F\u002F4.遍历结构体数组\n",[34,8925,8926,8928,8930,8932,8934,8936,8938,8940,8942,8944,8946,8948],{"class":36,"line":2408},[34,8927,3854],{"class":87},[34,8929,2312],{"class":40},[34,8931,804],{"class":87},[34,8933,3685],{"class":40},[34,8935,153],{"class":87},[34,8937,987],{"class":63},[34,8939,3692],{"class":40},[34,8941,41],{"class":87},[34,8943,875],{"class":63},[34,8945,3692],{"class":40},[34,8947,2945],{"class":87},[34,8949,807],{"class":40},[34,8951,8952],{"class":36,"line":2413},[34,8953,2683],{"class":40},[34,8955,8956,8958,8960,8963,8965,8968,8970,8973,8975],{"class":36,"line":2418},[34,8957,4104],{"class":40},[34,8959,1837],{"class":87},[34,8961,8962],{"class":40},"stuArray[i].name",[34,8964,1837],{"class":87},[34,8966,8967],{"class":40},"stuArray[i].age",[34,8969,1837],{"class":87},[34,8971,8972],{"class":40},"stuArray[i].score",[34,8974,1837],{"class":87},[34,8976,1859],{"class":40},[34,8978,8979],{"class":36,"line":2432},[34,8980,2840],{"class":40},[34,8982,8983],{"class":36,"line":2437},[34,8984,241],{"class":40},[14,8986,8988],{"id":8987},"_43结构体指针","4.3结构体指针",[108,8990,8991],{},"作用：通过指针访问结构体中的成员",[108,8993,8994],{},"利用操作符->可以通过结构体指针访问结构体属性",[24,8996,8998],{"className":789,"code":8997,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[31,8999,9000,9006,9016,9022,9026,9032,9036,9040,9046,9052,9056,9064,9068,9073,9098,9103,9118,9123,9146],{"__ignoreMap":29},[34,9001,9002,9004],{"class":36,"line":37},[34,9003,2603],{"class":87},[34,9005,2606],{"class":156},[34,9007,9008,9010,9012,9014],{"class":36,"line":51},[34,9009,2611],{"class":87},[34,9011,2614],{"class":87},[34,9013,2617],{"class":149},[34,9015,73],{"class":40},[34,9017,9018,9020],{"class":36,"line":60},[34,9019,2603],{"class":87},[34,9021,8402],{"class":156},[34,9023,9024],{"class":36,"line":76},[34,9025,8761],{"class":205},[34,9027,9028,9030],{"class":36,"line":93},[34,9029,8412],{"class":87},[34,9031,8415],{"class":149},[34,9033,9034],{"class":36,"line":99},[34,9035,2206],{"class":40},[34,9037,9038],{"class":36,"line":353},[34,9039,8438],{"class":40},[34,9041,9042,9044],{"class":36,"line":359},[34,9043,2638],{"class":87},[34,9045,8450],{"class":40},[34,9047,9048,9050],{"class":36,"line":579},[34,9049,2638],{"class":87},[34,9051,8462],{"class":40},[34,9053,9054],{"class":36,"line":589},[34,9055,4648],{"class":40},[34,9057,9058,9060,9062],{"class":36,"line":601},[34,9059,804],{"class":87},[34,9061,2626],{"class":149},[34,9063,2629],{"class":40},[34,9065,9066],{"class":36,"line":613},[34,9067,2206],{"class":40},[34,9069,9070],{"class":36,"line":618},[34,9071,9072],{"class":205},"    \u002F\u002F创建学生结构体变量\n",[34,9074,9075,9077,9079,9082,9084,9086,9088,9090,9092,9094,9096],{"class":36,"line":628},[34,9076,8548],{"class":87},[34,9078,8551],{"class":149},[34,9080,9081],{"class":40}," s",[34,9083,153],{"class":87},[34,9085,1690],{"class":40},[34,9087,8569],{"class":156},[34,9089,1173],{"class":40},[34,9091,1445],{"class":63},[34,9093,1173],{"class":40},[34,9095,2376],{"class":63},[34,9097,4648],{"class":40},[34,9099,9100],{"class":36,"line":640},[34,9101,9102],{"class":205},"    \u002F\u002F通过指针指向结构体变量\n",[34,9104,9105,9107,9109,9111,9113,9115],{"class":36,"line":2301},[34,9106,8548],{"class":87},[34,9108,8551],{"class":149},[34,9110,7171],{"class":87},[34,9112,108],{"class":40},[34,9114,6992],{"class":87},[34,9116,9117],{"class":40},"s\n",[34,9119,9120],{"class":36,"line":2307},[34,9121,9122],{"class":205},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[34,9124,9125,9127,9129,9132,9134,9137,9139,9142,9144],{"class":36,"line":2328},[34,9126,2211],{"class":40},[34,9128,1837],{"class":87},[34,9130,9131],{"class":40},"p->name",[34,9133,1837],{"class":87},[34,9135,9136],{"class":40},"p->age",[34,9138,1837],{"class":87},[34,9140,9141],{"class":40},"p->score",[34,9143,1837],{"class":87},[34,9145,1859],{"class":40},[34,9147,9148],{"class":36,"line":2333},[34,9149,241],{"class":40},[14,9151,9153],{"id":9152},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[108,9155,9156],{},"作用：结构体中的成员可以是另一个结构体",[108,9158,9159],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[24,9161,9163],{"className":789,"code":9162,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[31,9164,9165,9171,9181,9187,9192,9200,9204,9208,9214,9220,9224,9229,9236,9240,9247,9251,9257,9262,9266,9274,9278,9283,9288,9293,9304,9316,9327,9340,9351,9362],{"__ignoreMap":29},[34,9166,9167,9169],{"class":36,"line":37},[34,9168,2603],{"class":87},[34,9170,2606],{"class":156},[34,9172,9173,9175,9177,9179],{"class":36,"line":51},[34,9174,2611],{"class":87},[34,9176,2614],{"class":87},[34,9178,2617],{"class":149},[34,9180,73],{"class":40},[34,9182,9183,9185],{"class":36,"line":60},[34,9184,2603],{"class":87},[34,9186,8402],{"class":156},[34,9188,9189],{"class":36,"line":76},[34,9190,9191],{"class":205},"\u002F\u002F定义学生结构体\n",[34,9193,9194,9196,9198],{"class":36,"line":93},[34,9195,8412],{"class":87},[34,9197,8551],{"class":149},[34,9199,3327],{"class":40},[34,9201,9202],{"class":36,"line":99},[34,9203,2206],{"class":40},[34,9205,9206],{"class":36,"line":353},[34,9207,8438],{"class":40},[34,9209,9210,9212],{"class":36,"line":359},[34,9211,2638],{"class":87},[34,9213,8450],{"class":40},[34,9215,9216,9218],{"class":36,"line":579},[34,9217,2638],{"class":87},[34,9219,8462],{"class":40},[34,9221,9222],{"class":36,"line":589},[34,9223,241],{"class":40},[34,9225,9226],{"class":36,"line":601},[34,9227,9228],{"class":205},"\u002F\u002F定义老师结构体\n",[34,9230,9231,9233],{"class":36,"line":613},[34,9232,8412],{"class":87},[34,9234,9235],{"class":149}," Teacher\n",[34,9237,9238],{"class":36,"line":618},[34,9239,2206],{"class":40},[34,9241,9242,9244],{"class":36,"line":628},[34,9243,2638],{"class":87},[34,9245,9246],{"class":40}," id;\n",[34,9248,9249],{"class":36,"line":640},[34,9250,8438],{"class":40},[34,9252,9253,9255],{"class":36,"line":2301},[34,9254,2638],{"class":87},[34,9256,8450],{"class":40},[34,9258,9259],{"class":36,"line":2307},[34,9260,9261],{"class":40},"    Student stu;\n",[34,9263,9264],{"class":36,"line":2328},[34,9265,241],{"class":40},[34,9267,9268,9270,9272],{"class":36,"line":2333},[34,9269,804],{"class":87},[34,9271,2626],{"class":149},[34,9273,6631],{"class":40},[34,9275,9276],{"class":36,"line":2347},[34,9277,2206],{"class":40},[34,9279,9280],{"class":36,"line":2352},[34,9281,9282],{"class":205},"    \u002F\u002F结构体嵌套结构体\n",[34,9284,9285],{"class":36,"line":2381},[34,9286,9287],{"class":205},"    \u002F\u002F创建老师\n",[34,9289,9290],{"class":36,"line":2386},[34,9291,9292],{"class":40},"    Teacher t;\n",[34,9294,9295,9298,9300,9302],{"class":36,"line":2403},[34,9296,9297],{"class":40},"    t.id",[34,9299,153],{"class":87},[34,9301,1106],{"class":63},[34,9303,73],{"class":40},[34,9305,9306,9309,9311,9314],{"class":36,"line":2408},[34,9307,9308],{"class":40},"    t.name",[34,9310,153],{"class":87},[34,9312,9313],{"class":156},"\"老王\"",[34,9315,73],{"class":40},[34,9317,9318,9321,9323,9325],{"class":36,"line":2413},[34,9319,9320],{"class":40},"    t.age",[34,9322,153],{"class":87},[34,9324,1445],{"class":63},[34,9326,73],{"class":40},[34,9328,9329,9332,9334,9337],{"class":36,"line":2418},[34,9330,9331],{"class":40},"    t.stu.name",[34,9333,153],{"class":87},[34,9335,9336],{"class":156},"\"小王\"",[34,9338,9339],{"class":40},"；\n",[34,9341,9342,9345,9347,9349],{"class":36,"line":2432},[34,9343,9344],{"class":40},"    t.stu.age",[34,9346,153],{"class":87},[34,9348,1495],{"class":63},[34,9350,73],{"class":40},[34,9352,9353,9356,9358,9360],{"class":36,"line":2437},[34,9354,9355],{"class":40},"    t.stu.score",[34,9357,153],{"class":87},[34,9359,1139],{"class":63},[34,9361,73],{"class":40},[34,9363,9364],{"class":36,"line":3230},[34,9365,241],{"class":40},[14,9367,9369],{"id":9368},"_45结构体做函数参数","4.5结构体做函数参数",[108,9371,9372],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[24,9374,9376],{"className":789,"code":9375,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[31,9377,9378,9384,9394,9400,9406,9410,9414,9420,9426,9430,9435,9440,9457,9461,9494,9498,9503,9522,9526,9557,9561,9569,9573,9582,9594,9606,9618,9631,9639,9652,9664,9672],{"__ignoreMap":29},[34,9379,9380,9382],{"class":36,"line":37},[34,9381,2603],{"class":87},[34,9383,2606],{"class":156},[34,9385,9386,9388,9390,9392],{"class":36,"line":51},[34,9387,2611],{"class":87},[34,9389,2614],{"class":87},[34,9391,2617],{"class":149},[34,9393,73],{"class":40},[34,9395,9396,9398],{"class":36,"line":60},[34,9397,2603],{"class":87},[34,9399,8402],{"class":156},[34,9401,9402,9404],{"class":36,"line":76},[34,9403,8412],{"class":87},[34,9405,8415],{"class":149},[34,9407,9408],{"class":36,"line":93},[34,9409,2206],{"class":40},[34,9411,9412],{"class":36,"line":99},[34,9413,8438],{"class":40},[34,9415,9416,9418],{"class":36,"line":353},[34,9417,2638],{"class":87},[34,9419,8450],{"class":40},[34,9421,9422,9424],{"class":36,"line":359},[34,9423,2638],{"class":87},[34,9425,8462],{"class":40},[34,9427,9428],{"class":36,"line":579},[34,9429,4648],{"class":40},[34,9431,9432],{"class":36,"line":589},[34,9433,9434],{"class":205},"\u002F\u002F打印学生信息的函数\n",[34,9436,9437],{"class":36,"line":601},[34,9438,9439],{"class":205},"\u002F\u002F值传递\n",[34,9441,9442,9444,9447,9449,9451,9453,9455],{"class":36,"line":613},[34,9443,6017],{"class":87},[34,9445,9446],{"class":149}," printStudent1",[34,9448,801],{"class":40},[34,9450,8412],{"class":87},[34,9452,8551],{"class":149},[34,9454,9081],{"class":5869},[34,9456,807],{"class":40},[34,9458,9459],{"class":36,"line":618},[34,9460,2206],{"class":40},[34,9462,9463,9465,9467,9470,9472,9475,9477,9480,9482,9484,9486,9489,9491],{"class":36,"line":628},[34,9464,7182],{"class":40},[34,9466,1837],{"class":87},[34,9468,9469],{"class":40}," s.name ",[34,9471,1837],{"class":87},[34,9473,9474],{"class":156}," \" \"",[34,9476,2104],{"class":87},[34,9478,9479],{"class":40}," s.age ",[34,9481,1837],{"class":87},[34,9483,9474],{"class":156},[34,9485,2104],{"class":87},[34,9487,9488],{"class":40}," s.score ",[34,9490,1837],{"class":87},[34,9492,9493],{"class":40}," endl;\n",[34,9495,9496],{"class":36,"line":640},[34,9497,241],{"class":40},[34,9499,9500],{"class":36,"line":2301},[34,9501,9502],{"class":205},"\u002F\u002F地址传递\n",[34,9504,9505,9507,9510,9512,9514,9516,9518,9520],{"class":36,"line":2307},[34,9506,6017],{"class":87},[34,9508,9509],{"class":149}," printStudent2",[34,9511,801],{"class":40},[34,9513,8412],{"class":87},[34,9515,8551],{"class":149},[34,9517,7171],{"class":87},[34,9519,1490],{"class":5869},[34,9521,807],{"class":40},[34,9523,9524],{"class":36,"line":2328},[34,9525,2206],{"class":40},[34,9527,9528,9530,9532,9535,9537,9539,9541,9544,9546,9548,9550,9553,9555],{"class":36,"line":2333},[34,9529,7182],{"class":40},[34,9531,1837],{"class":87},[34,9533,9534],{"class":40}," s->name ",[34,9536,1837],{"class":87},[34,9538,9474],{"class":156},[34,9540,2104],{"class":87},[34,9542,9543],{"class":40}," s->age ",[34,9545,1837],{"class":87},[34,9547,9474],{"class":156},[34,9549,2104],{"class":87},[34,9551,9552],{"class":40}," s->score ",[34,9554,1837],{"class":87},[34,9556,9493],{"class":40},[34,9558,9559],{"class":36,"line":2347},[34,9560,241],{"class":40},[34,9562,9563,9565,9567],{"class":36,"line":2352},[34,9564,804],{"class":87},[34,9566,2626],{"class":149},[34,9568,2629],{"class":40},[34,9570,9571],{"class":36,"line":2381},[34,9572,2206],{"class":40},[34,9574,9575,9577,9579],{"class":36,"line":2386},[34,9576,8548],{"class":87},[34,9578,8551],{"class":149},[34,9580,9581],{"class":40}," s;\n",[34,9583,9584,9587,9589,9592],{"class":36,"line":2403},[34,9585,9586],{"class":40},"    s.name ",[34,9588,153],{"class":87},[34,9590,9591],{"class":156}," \"张三\"",[34,9593,73],{"class":40},[34,9595,9596,9599,9601,9604],{"class":36,"line":2408},[34,9597,9598],{"class":40},"    s.age ",[34,9600,153],{"class":87},[34,9602,9603],{"class":63}," 20",[34,9605,73],{"class":40},[34,9607,9608,9611,9613,9616],{"class":36,"line":2413},[34,9609,9610],{"class":40},"    s.score ",[34,9612,153],{"class":87},[34,9614,9615],{"class":63}," 85",[34,9617,73],{"class":40},[34,9619,9620,9622,9624,9627,9629],{"class":36,"line":2418},[34,9621,2211],{"class":40},[34,9623,1837],{"class":87},[34,9625,9626],{"class":156},"\"值传递:\"",[34,9628,1837],{"class":87},[34,9630,1859],{"class":40},[34,9632,9633,9636],{"class":36,"line":2432},[34,9634,9635],{"class":149},"    printStudent1",[34,9637,9638],{"class":40},"(s);\n",[34,9640,9641,9643,9645,9648,9650],{"class":36,"line":2437},[34,9642,2211],{"class":40},[34,9644,1837],{"class":87},[34,9646,9647],{"class":156},"\"地址传递:\"",[34,9649,1837],{"class":87},[34,9651,1859],{"class":40},[34,9653,9654,9657,9659,9661],{"class":36,"line":3230},[34,9655,9656],{"class":149},"    printStudent2",[34,9658,801],{"class":40},[34,9660,1148],{"class":87},[34,9662,9663],{"class":40},"s); \n",[34,9665,9666,9668,9670],{"class":36,"line":3244},[34,9667,4743],{"class":87},[34,9669,4746],{"class":63},[34,9671,73],{"class":40},[34,9673,9674],{"class":36,"line":3252},[34,9675,241],{"class":40},[108,9677,9678],{},"注意：",[1800,9680,9681,9684],{},[755,9682,9683],{},"1.先定义结构体，不要在函数中写结构体的定义",[755,9685,9686],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9688,9690],{"id":9689},"_46结构体中const使用场景","4.6结构体中const使用场景",[108,9692,9693],{},"用const防止误操作",[24,9695,9697],{"className":789,"code":9696,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[31,9698,9699,9705,9715,9721,9726,9730,9734,9740,9746,9750,9766,9770,9793,9797,9805,9809,9830,9837,9841],{"__ignoreMap":29},[34,9700,9701,9703],{"class":36,"line":37},[34,9702,2603],{"class":87},[34,9704,2606],{"class":156},[34,9706,9707,9709,9711,9713],{"class":36,"line":51},[34,9708,2611],{"class":87},[34,9710,2614],{"class":87},[34,9712,2617],{"class":149},[34,9714,73],{"class":40},[34,9716,9717,9719],{"class":36,"line":60},[34,9718,2603],{"class":87},[34,9720,8402],{"class":156},[34,9722,9723],{"class":36,"line":76},[34,9724,9725],{"class":40},"sctuct Student\n",[34,9727,9728],{"class":36,"line":93},[34,9729,2206],{"class":40},[34,9731,9732],{"class":36,"line":99},[34,9733,8438],{"class":40},[34,9735,9736,9738],{"class":36,"line":353},[34,9737,2638],{"class":87},[34,9739,8450],{"class":40},[34,9741,9742,9744],{"class":36,"line":359},[34,9743,2638],{"class":87},[34,9745,8462],{"class":40},[34,9747,9748],{"class":36,"line":579},[34,9749,4648],{"class":40},[34,9751,9752,9754,9757,9759,9762,9764],{"class":36,"line":589},[34,9753,6017],{"class":87},[34,9755,9756],{"class":149}," printStudents",[34,9758,801],{"class":40},[34,9760,9761],{"class":149},"student",[34,9763,9081],{"class":5869},[34,9765,807],{"class":40},[34,9767,9768],{"class":36,"line":601},[34,9769,2206],{"class":40},[34,9771,9772,9774,9776,9779,9781,9784,9786,9789,9791],{"class":36,"line":613},[34,9773,2211],{"class":40},[34,9775,1837],{"class":87},[34,9777,9778],{"class":40},"s.name",[34,9780,1837],{"class":87},[34,9782,9783],{"class":40},"s.age",[34,9785,1837],{"class":87},[34,9787,9788],{"class":40},"s.score",[34,9790,1837],{"class":87},[34,9792,1859],{"class":40},[34,9794,9795],{"class":36,"line":618},[34,9796,241],{"class":40},[34,9798,9799,9801,9803],{"class":36,"line":628},[34,9800,804],{"class":87},[34,9802,2626],{"class":149},[34,9804,6631],{"class":40},[34,9806,9807],{"class":36,"line":640},[34,9808,2206],{"class":40},[34,9810,9811,9814,9816,9818,9820,9822,9824,9826,9828],{"class":36,"line":2301},[34,9812,9813],{"class":40},"    Student s",[34,9815,153],{"class":87},[34,9817,1690],{"class":40},[34,9819,8569],{"class":156},[34,9821,1173],{"class":40},[34,9823,1445],{"class":63},[34,9825,1173],{"class":40},[34,9827,1445],{"class":63},[34,9829,4648],{"class":40},[34,9831,9832,9835],{"class":36,"line":2307},[34,9833,9834],{"class":149},"    printStudent",[34,9836,9638],{"class":40},[34,9838,9839],{"class":36,"line":2328},[34,9840,3053],{"emptyLinePlaceholder":726},[34,9842,9843],{"class":36,"line":2333},[34,9844,241],{"class":40},[108,9846,9678],{},[1800,9848,9849,9852,9855],{},[755,9850,9851],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[755,9853,9854],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[755,9856,9857],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[24,9859,9861],{"className":789,"code":9860,"language":791,"meta":29,"style":29},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[31,9862,9863,9882,9886,9891,9911],{"__ignoreMap":29},[34,9864,9865,9867,9869,9871,9873,9876,9878,9880],{"class":36,"line":37},[34,9866,6017],{"class":87},[34,9868,9756],{"class":149},[34,9870,801],{"class":40},[34,9872,7445],{"class":87},[34,9874,9875],{"class":149}," student",[34,9877,7171],{"class":87},[34,9879,1490],{"class":5869},[34,9881,807],{"class":40},[34,9883,9884],{"class":36,"line":51},[34,9885,2206],{"class":40},[34,9887,9888],{"class":36,"line":60},[34,9889,9890],{"class":205},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[34,9892,9893,9895,9897,9899,9901,9903,9905,9907,9909],{"class":36,"line":76},[34,9894,2211],{"class":40},[34,9896,1837],{"class":87},[34,9898,9778],{"class":40},[34,9900,1837],{"class":87},[34,9902,9783],{"class":40},[34,9904,1837],{"class":87},[34,9906,9788],{"class":40},[34,9908,1837],{"class":87},[34,9910,1859],{"class":40},[34,9912,9913],{"class":36,"line":93},[34,9914,241],{"class":40},[14,9916,9918],{"id":9917},"_47案例","4.7案例",[752,9920,9921],{},[755,9922,9923],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[24,9925,9927],{"className":789,"code":9926,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[31,9928,9929,9935,9945,9951,9958,9962,9968,9972,9977,9983,9989,9993,9997,10003,10007,10012,10017,10030,10034,10039,10065,10069,10081,10108,10112,10124,10134,10138,10143,10172,10176,10188,10197,10224,10235,10245,10249,10253,10257,10262,10286,10290,10314,10318,10337,10363,10367,10392,10415,10439,10444,10449,10454,10463,10468,10474,10495,10501,10515,10521,10548,10557,10563,10571,10576],{"__ignoreMap":29},[34,9930,9931,9933],{"class":36,"line":37},[34,9932,2603],{"class":87},[34,9934,2606],{"class":156},[34,9936,9937,9939,9941,9943],{"class":36,"line":51},[34,9938,2611],{"class":87},[34,9940,2614],{"class":87},[34,9942,2617],{"class":149},[34,9944,73],{"class":40},[34,9946,9947,9949],{"class":36,"line":60},[34,9948,2603],{"class":87},[34,9950,8402],{"class":156},[34,9952,9953,9955],{"class":36,"line":76},[34,9954,2603],{"class":87},[34,9956,9957],{"class":156},"\u003Cctime>\n",[34,9959,9960],{"class":36,"line":93},[34,9961,9191],{"class":205},[34,9963,9964,9966],{"class":36,"line":99},[34,9965,8412],{"class":87},[34,9967,8415],{"class":149},[34,9969,9970],{"class":36,"line":353},[34,9971,2206],{"class":40},[34,9973,9974],{"class":36,"line":359},[34,9975,9976],{"class":40},"    string sName;\n",[34,9978,9979,9981],{"class":36,"line":579},[34,9980,2638],{"class":87},[34,9982,8450],{"class":40},[34,9984,9985,9987],{"class":36,"line":589},[34,9986,2638],{"class":87},[34,9988,8462],{"class":40},[34,9990,9991],{"class":36,"line":601},[34,9992,4648],{"class":40},[34,9994,9995],{"class":36,"line":613},[34,9996,9228],{"class":205},[34,9998,9999,10001],{"class":36,"line":618},[34,10000,8412],{"class":87},[34,10002,9235],{"class":149},[34,10004,10005],{"class":36,"line":628},[34,10006,2206],{"class":40},[34,10008,10009],{"class":36,"line":640},[34,10010,10011],{"class":40},"    string tName;\n",[34,10013,10014],{"class":36,"line":2301},[34,10015,10016],{"class":205},"    \u002F\u002F学生数组\n",[34,10018,10019,10021,10023,10026,10028],{"class":36,"line":2307},[34,10020,8548],{"class":87},[34,10022,8551],{"class":149},[34,10024,10025],{"class":40}," sArray[",[34,10027,1114],{"class":63},[34,10029,5343],{"class":40},[34,10031,10032],{"class":36,"line":2328},[34,10033,4648],{"class":40},[34,10035,10036],{"class":36,"line":2333},[34,10037,10038],{"class":205},"\u002F\u002F给老师和学生赋值的函数\n",[34,10040,10041,10043,10046,10048,10050,10053,10056,10059,10061,10063],{"class":36,"line":2347},[34,10042,6017],{"class":87},[34,10044,10045],{"class":149}," allocateSpace",[34,10047,801],{"class":40},[34,10049,8412],{"class":87},[34,10051,10052],{"class":149}," Teacher",[34,10054,10055],{"class":5869}," tArray",[34,10057,10058],{"class":40},"[],",[34,10060,804],{"class":87},[34,10062,7984],{"class":5869},[34,10064,807],{"class":40},[34,10066,10067],{"class":36,"line":2352},[34,10068,2206],{"class":40},[34,10070,10071,10074,10076,10079],{"class":36,"line":2381},[34,10072,10073],{"class":40},"    string nameSeed",[34,10075,153],{"class":87},[34,10077,10078],{"class":156},"\"ABCDE\"",[34,10080,73],{"class":40},[34,10082,10083,10085,10087,10089,10092,10094,10096,10099,10101,10104,10106],{"class":36,"line":2386},[34,10084,3854],{"class":87},[34,10086,2312],{"class":40},[34,10088,804],{"class":87},[34,10090,10091],{"class":40}," i ",[34,10093,153],{"class":87},[34,10095,4746],{"class":63},[34,10097,10098],{"class":40},"; i ",[34,10100,41],{"class":87},[34,10102,10103],{"class":40}," len; i",[34,10105,2945],{"class":87},[34,10107,807],{"class":40},[34,10109,10110],{"class":36,"line":2403},[34,10111,2683],{"class":40},[34,10113,10114,10117,10119,10122],{"class":36,"line":2408},[34,10115,10116],{"class":40},"        tArray[i].tName ",[34,10118,153],{"class":87},[34,10120,10121],{"class":156}," \"Teacher_\"",[34,10123,73],{"class":40},[34,10125,10126,10128,10131],{"class":36,"line":2413},[34,10127,10116],{"class":40},[34,10129,10130],{"class":87},"+=",[34,10132,10133],{"class":40},"nameSeed[i];\n",[34,10135,10136],{"class":36,"line":2418},[34,10137,3053],{"emptyLinePlaceholder":726},[34,10139,10140],{"class":36,"line":2432},[34,10141,10142],{"class":205},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[34,10144,10145,10147,10149,10151,10154,10156,10158,10161,10163,10165,10168,10170],{"class":36,"line":2437},[34,10146,4056],{"class":87},[34,10148,2312],{"class":40},[34,10150,804],{"class":87},[34,10152,10153],{"class":40}," j ",[34,10155,153],{"class":87},[34,10157,4746],{"class":63},[34,10159,10160],{"class":40},"; j ",[34,10162,41],{"class":87},[34,10164,2801],{"class":63},[34,10166,10167],{"class":40},"; j",[34,10169,2945],{"class":87},[34,10171,807],{"class":40},[34,10173,10174],{"class":36,"line":3230},[34,10175,3163],{"class":40},[34,10177,10178,10181,10183,10186],{"class":36,"line":3244},[34,10179,10180],{"class":40},"            tArray[i].sArray[j].sName ",[34,10182,153],{"class":87},[34,10184,10185],{"class":156}," \"Student_\"",[34,10187,73],{"class":40},[34,10189,10190,10192,10194],{"class":36,"line":3252},[34,10191,10180],{"class":40},[34,10193,10130],{"class":87},[34,10195,10196],{"class":40}," nameSeed[j];\n",[34,10198,10199,10202,10205,10207,10209,10211,10213,10215,10217,10219,10221],{"class":36,"line":3257},[34,10200,10201],{"class":87},"            int",[34,10203,10204],{"class":40}," random",[34,10206,153],{"class":87},[34,10208,3077],{"class":149},[34,10210,3080],{"class":40},[34,10212,1123],{"class":87},[34,10214,1701],{"class":63},[34,10216,1276],{"class":87},[34,10218,1196],{"class":63},[34,10220,854],{"class":40},[34,10222,10223],{"class":205},"\u002F\u002F40~99\n",[34,10225,10226,10229,10231,10233],{"class":36,"line":3263},[34,10227,10228],{"class":40},"            tArray[i].sArray[j].age ",[34,10230,153],{"class":87},[34,10232,9603],{"class":63},[34,10234,73],{"class":40},[34,10236,10237,10240,10242],{"class":36,"line":3269},[34,10238,10239],{"class":40},"            tArray[i].sArray[j].score ",[34,10241,153],{"class":87},[34,10243,10244],{"class":40}," random;\n",[34,10246,10247],{"class":36,"line":3274},[34,10248,3182],{"class":40},[34,10250,10251],{"class":36,"line":8601},[34,10252,2840],{"class":40},[34,10254,10255],{"class":36,"line":8625},[34,10256,241],{"class":40},[34,10258,10259],{"class":36,"line":8630},[34,10260,10261],{"class":205},"\u002F\u002F打印所有信息的函数\n",[34,10263,10264,10266,10269,10271,10273,10275,10277,10280,10282,10284],{"class":36,"line":8636},[34,10265,6017],{"class":87},[34,10267,10268],{"class":149}," printInfo",[34,10270,801],{"class":40},[34,10272,8412],{"class":87},[34,10274,10052],{"class":149},[34,10276,10055],{"class":5869},[34,10278,10279],{"class":40},"[], ",[34,10281,804],{"class":87},[34,10283,7984],{"class":5869},[34,10285,807],{"class":40},[34,10287,10288],{"class":36,"line":8663},[34,10289,2206],{"class":40},[34,10291,10292,10294,10296,10298,10300,10302,10304,10306,10308,10310,10312],{"class":36,"line":8668},[34,10293,3854],{"class":87},[34,10295,2312],{"class":40},[34,10297,804],{"class":87},[34,10299,10091],{"class":40},[34,10301,153],{"class":87},[34,10303,4746],{"class":63},[34,10305,10098],{"class":40},[34,10307,41],{"class":87},[34,10309,10103],{"class":40},[34,10311,2945],{"class":87},[34,10313,807],{"class":40},[34,10315,10316],{"class":36,"line":8674},[34,10317,2683],{"class":40},[34,10319,10320,10323,10325,10328,10330,10333,10335],{"class":36,"line":8686},[34,10321,10322],{"class":40},"        cout ",[34,10324,1837],{"class":87},[34,10326,10327],{"class":156}," \"Teacher: \"",[34,10329,2104],{"class":87},[34,10331,10332],{"class":40}," tArray[i].tName ",[34,10334,1837],{"class":87},[34,10336,9493],{"class":40},[34,10338,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361],{"class":36,"line":8698},[34,10340,4056],{"class":87},[34,10342,2312],{"class":40},[34,10344,804],{"class":87},[34,10346,10153],{"class":40},[34,10348,153],{"class":87},[34,10350,4746],{"class":63},[34,10352,10160],{"class":40},[34,10354,41],{"class":87},[34,10356,2801],{"class":63},[34,10358,10167],{"class":40},[34,10360,2945],{"class":87},[34,10362,807],{"class":40},[34,10364,10365],{"class":36,"line":8710},[34,10366,3163],{"class":40},[34,10368,10370,10373,10375,10378,10380,10383,10385,10388,10390],{"class":36,"line":10369},47,[34,10371,10372],{"class":40},"            cout ",[34,10374,1837],{"class":87},[34,10376,10377],{"class":156}," \"",[34,10379,1894],{"class":63},[34,10381,10382],{"class":156},"Student: \"",[34,10384,2104],{"class":87},[34,10386,10387],{"class":40}," tArray[i].sArray[j].sName",[34,10389,1837],{"class":87},[34,10391,1859],{"class":40},[34,10393,10395,10397,10399,10401,10403,10406,10408,10411,10413],{"class":36,"line":10394},48,[34,10396,10372],{"class":40},[34,10398,1837],{"class":87},[34,10400,10377],{"class":156},[34,10402,1894],{"class":63},[34,10404,10405],{"class":156},"Age: \"",[34,10407,2104],{"class":87},[34,10409,10410],{"class":40}," tArray[i].sArray[j].age ",[34,10412,1837],{"class":87},[34,10414,9493],{"class":40},[34,10416,10418,10420,10422,10424,10426,10429,10431,10434,10436],{"class":36,"line":10417},49,[34,10419,10372],{"class":40},[34,10421,1837],{"class":87},[34,10423,10377],{"class":156},[34,10425,1894],{"class":63},[34,10427,10428],{"class":156},"Score: \"",[34,10430,2104],{"class":87},[34,10432,10433],{"class":40}," tArray[i].sArray[j].score ",[34,10435,1837],{"class":87},[34,10437,10438],{"class":40}," endl;   \n",[34,10440,10442],{"class":36,"line":10441},50,[34,10443,3182],{"class":40},[34,10445,10447],{"class":36,"line":10446},51,[34,10448,2840],{"class":40},[34,10450,10452],{"class":36,"line":10451},52,[34,10453,241],{"class":40},[34,10455,10457,10459,10461],{"class":36,"line":10456},53,[34,10458,804],{"class":87},[34,10460,2626],{"class":149},[34,10462,2629],{"class":40},[34,10464,10466],{"class":36,"line":10465},54,[34,10467,2206],{"class":40},[34,10469,10471],{"class":36,"line":10470},55,[34,10472,10473],{"class":205},"    \u002F\u002F随机数种子\n",[34,10475,10477,10479,10481,10483,10485,10487,10489,10491,10493],{"class":36,"line":10476},56,[34,10478,3026],{"class":149},[34,10480,3029],{"class":40},[34,10482,3032],{"class":87},[34,10484,3035],{"class":87},[34,10486,1224],{"class":40},[34,10488,3040],{"class":149},[34,10490,801],{"class":40},[34,10492,3045],{"class":63},[34,10494,3048],{"class":40},[34,10496,10498],{"class":36,"line":10497},57,[34,10499,10500],{"class":205},"    \u002F\u002F1.创建3名老师的数组\n",[34,10502,10504,10506,10508,10511,10513],{"class":36,"line":10503},58,[34,10505,8548],{"class":87},[34,10507,10052],{"class":149},[34,10509,10510],{"class":40}," tArray[",[34,10512,869],{"class":63},[34,10514,5343],{"class":40},[34,10516,10518],{"class":36,"line":10517},59,[34,10519,10520],{"class":205},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[34,10522,10524,10526,10529,10531,10534,10537,10539,10541,10544,10546],{"class":36,"line":10523},60,[34,10525,2638],{"class":87},[34,10527,10528],{"class":40}," len ",[34,10530,153],{"class":87},[34,10532,10533],{"class":87}," sizeof",[34,10535,10536],{"class":40},"(tArray) ",[34,10538,1379],{"class":87},[34,10540,10533],{"class":87},[34,10542,10543],{"class":40},"(tArray[",[34,10545,987],{"class":63},[34,10547,4509],{"class":40},[34,10549,10551,10554],{"class":36,"line":10550},61,[34,10552,10553],{"class":149},"    allocateSpace",[34,10555,10556],{"class":40},"(tArray, len);\n",[34,10558,10560],{"class":36,"line":10559},62,[34,10561,10562],{"class":205},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[34,10564,10566,10569],{"class":36,"line":10565},63,[34,10567,10568],{"class":149},"    printInfo",[34,10570,10556],{"class":40},[34,10572,10574],{"class":36,"line":10573},64,[34,10575,3053],{"emptyLinePlaceholder":726},[34,10577,10579],{"class":36,"line":10578},65,[34,10580,241],{"class":40},[752,10582,10583],{"start":51},[755,10584,10585,10588],{},[111,10586,10587],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[108,10590,10591],{},"五名英雄信息如下：",[24,10593,10597],{"className":10594,"code":10595,"language":10596,"meta":29,"style":29},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[31,10598,10599,10617,10634,10651,10668],{"__ignoreMap":29},[34,10600,10601,10603,10606,10608,10610,10612,10615],{"class":36,"line":37},[34,10602,5570],{"class":40},[34,10604,10605],{"class":156},"\"刘备\"",[34,10607,1173],{"class":40},[34,10609,1570],{"class":63},[34,10611,1173],{"class":40},[34,10613,10614],{"class":156},"\"男\"",[34,10616,5583],{"class":40},[34,10618,10619,10621,10624,10626,10628,10630,10632],{"class":36,"line":51},[34,10620,5570],{"class":40},[34,10622,10623],{"class":156},"\"关羽\"",[34,10625,1173],{"class":40},[34,10627,1545],{"class":63},[34,10629,1173],{"class":40},[34,10631,10614],{"class":156},[34,10633,5583],{"class":40},[34,10635,10636,10638,10641,10643,10645,10647,10649],{"class":36,"line":60},[34,10637,5570],{"class":40},[34,10639,10640],{"class":156},"\"张飞\"",[34,10642,1173],{"class":40},[34,10644,1495],{"class":63},[34,10646,1173],{"class":40},[34,10648,10614],{"class":156},[34,10650,5583],{"class":40},[34,10652,10653,10655,10658,10660,10662,10664,10666],{"class":36,"line":76},[34,10654,5570],{"class":40},[34,10656,10657],{"class":156},"\"赵云\"",[34,10659,1173],{"class":40},[34,10661,1520],{"class":63},[34,10663,1173],{"class":40},[34,10665,10614],{"class":156},[34,10667,5583],{"class":40},[34,10669,10670,10672,10675,10677,10679,10681,10684],{"class":36,"line":93},[34,10671,5570],{"class":40},[34,10673,10674],{"class":156},"\"貂蝉\"",[34,10676,1173],{"class":40},[34,10678,1470],{"class":63},[34,10680,1173],{"class":40},[34,10682,10683],{"class":156},"\"女\"",[34,10685,5583],{"class":40},[108,10687,10688],{},"代码：",[24,10690,10692],{"className":789,"code":10691,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[31,10693,10694,10700,10710,10716,10723,10727,10731,10737,10742,10746,10751,10774,10778,10803,10807,10840,10845,10874,10879,10894,10920,10940,10945,10950,10954,10958,10963,10985,10989,11013,11017,11079,11083,11087,11095,11099,11104,11115,11119,11135,11151,11167,11183,11199,11203,11223,11245,11250,11263,11270,11275,11281,11286,11299,11305],{"__ignoreMap":29},[34,10695,10696,10698],{"class":36,"line":37},[34,10697,2603],{"class":87},[34,10699,2606],{"class":156},[34,10701,10702,10704,10706,10708],{"class":36,"line":51},[34,10703,2611],{"class":87},[34,10705,2614],{"class":87},[34,10707,2617],{"class":149},[34,10709,73],{"class":40},[34,10711,10712,10714],{"class":36,"line":60},[34,10713,2603],{"class":87},[34,10715,8402],{"class":156},[34,10717,10718,10720],{"class":36,"line":76},[34,10719,8412],{"class":87},[34,10721,10722],{"class":149}," Sanguo\n",[34,10724,10725],{"class":36,"line":93},[34,10726,2206],{"class":40},[34,10728,10729],{"class":36,"line":99},[34,10730,8438],{"class":40},[34,10732,10733,10735],{"class":36,"line":353},[34,10734,2638],{"class":87},[34,10736,8450],{"class":40},[34,10738,10739],{"class":36,"line":359},[34,10740,10741],{"class":40},"    string gender;\n",[34,10743,10744],{"class":36,"line":579},[34,10745,4648],{"class":40},[34,10747,10748],{"class":36,"line":589},[34,10749,10750],{"class":205},"\u002F\u002F定义排序函数\n",[34,10752,10753,10755,10757,10759,10762,10764,10766,10768,10770,10772],{"class":36,"line":601},[34,10754,6017],{"class":87},[34,10756,7969],{"class":149},[34,10758,801],{"class":40},[34,10760,10761],{"class":149},"Sanguo",[34,10763,7171],{"class":87},[34,10765,1490],{"class":5869},[34,10767,1173],{"class":40},[34,10769,804],{"class":87},[34,10771,7984],{"class":5869},[34,10773,807],{"class":40},[34,10775,10776],{"class":36,"line":613},[34,10777,2206],{"class":40},[34,10779,10780,10782,10784,10786,10788,10790,10792,10794,10796,10799,10801],{"class":36,"line":618},[34,10781,3854],{"class":87},[34,10783,801],{"class":40},[34,10785,804],{"class":87},[34,10787,3685],{"class":40},[34,10789,153],{"class":87},[34,10791,987],{"class":63},[34,10793,3692],{"class":40},[34,10795,41],{"class":87},[34,10797,10798],{"class":40},"len;i",[34,10800,2945],{"class":87},[34,10802,807],{"class":40},[34,10804,10805],{"class":36,"line":628},[34,10806,2683],{"class":40},[34,10808,10809,10812,10814,10816,10818,10820,10822,10824,10826,10828,10830,10832,10834,10836,10838],{"class":36,"line":640},[34,10810,10811],{"class":87},"     for",[34,10813,2312],{"class":40},[34,10815,804],{"class":87},[34,10817,4063],{"class":40},[34,10819,153],{"class":87},[34,10821,987],{"class":63},[34,10823,4070],{"class":40},[34,10825,41],{"class":87},[34,10827,8011],{"class":40},[34,10829,1327],{"class":87},[34,10831,1013],{"class":63},[34,10833,1327],{"class":87},[34,10835,4203],{"class":40},[34,10837,2945],{"class":87},[34,10839,807],{"class":40},[34,10841,10842],{"class":36,"line":2301},[34,10843,10844],{"class":40},"     {\n",[34,10846,10847,10850,10853,10855,10858,10860,10863,10865,10867,10869,10871],{"class":36,"line":2307},[34,10848,10849],{"class":87},"         if",[34,10851,10852],{"class":40}," ((s",[34,10854,1276],{"class":87},[34,10856,10857],{"class":40},"j)->age ",[34,10859,1753],{"class":87},[34,10861,10862],{"class":40}," (s",[34,10864,1276],{"class":87},[34,10866,1262],{"class":40},[34,10868,1276],{"class":87},[34,10870,1013],{"class":63},[34,10872,10873],{"class":40},")->age)\n",[34,10875,10876],{"class":36,"line":2328},[34,10877,10878],{"class":40},"         {\n",[34,10880,10881,10884,10886,10889,10891],{"class":36,"line":2333},[34,10882,10883],{"class":40},"             Sanguo temp",[34,10885,7806],{"class":87},[34,10887,10888],{"class":40},"(s",[34,10890,1276],{"class":87},[34,10892,10893],{"class":40},"j);\n",[34,10895,10896,10899,10901,10903,10906,10908,10910,10912,10914,10916,10918],{"class":36,"line":2347},[34,10897,10898],{"class":87},"             *",[34,10900,10888],{"class":40},[34,10902,1276],{"class":87},[34,10904,10905],{"class":40},"j)",[34,10907,7806],{"class":87},[34,10909,10888],{"class":40},[34,10911,1276],{"class":87},[34,10913,1262],{"class":40},[34,10915,1276],{"class":87},[34,10917,1013],{"class":63},[34,10919,3372],{"class":40},[34,10921,10922,10924,10926,10928,10930,10932,10934,10936,10938],{"class":36,"line":2352},[34,10923,10898],{"class":87},[34,10925,10888],{"class":40},[34,10927,1276],{"class":87},[34,10929,1262],{"class":40},[34,10931,1276],{"class":87},[34,10933,1013],{"class":63},[34,10935,1224],{"class":40},[34,10937,153],{"class":87},[34,10939,4933],{"class":40},[34,10941,10942],{"class":36,"line":2381},[34,10943,10944],{"class":40},"         }\n",[34,10946,10947],{"class":36,"line":2386},[34,10948,10949],{"class":40},"     }\n",[34,10951,10952],{"class":36,"line":2403},[34,10953,2840],{"class":40},[34,10955,10956],{"class":36,"line":2408},[34,10957,241],{"class":40},[34,10959,10960],{"class":36,"line":2413},[34,10961,10962],{"class":205},"\u002F\u002F定义打印函数\n",[34,10964,10965,10967,10969,10971,10973,10975,10977,10979,10981,10983],{"class":36,"line":2418},[34,10966,6017],{"class":87},[34,10968,10268],{"class":149},[34,10970,801],{"class":40},[34,10972,10761],{"class":149},[34,10974,7171],{"class":87},[34,10976,1490],{"class":5869},[34,10978,1173],{"class":40},[34,10980,804],{"class":87},[34,10982,7984],{"class":5869},[34,10984,807],{"class":40},[34,10986,10987],{"class":36,"line":2432},[34,10988,2206],{"class":40},[34,10990,10991,10993,10995,10997,10999,11001,11003,11005,11007,11009,11011],{"class":36,"line":2437},[34,10992,3854],{"class":87},[34,10994,2312],{"class":40},[34,10996,804],{"class":87},[34,10998,3685],{"class":40},[34,11000,153],{"class":87},[34,11002,987],{"class":63},[34,11004,3692],{"class":40},[34,11006,41],{"class":87},[34,11008,10798],{"class":40},[34,11010,2945],{"class":87},[34,11012,807],{"class":40},[34,11014,11015],{"class":36,"line":3230},[34,11016,2683],{"class":40},[34,11018,11019,11021,11023,11025,11027,11030,11032,11034,11036,11039,11041,11043,11045,11048,11050,11052,11054,11057,11059,11061,11063,11066,11068,11070,11072,11075,11077],{"class":36,"line":3244},[34,11020,4104],{"class":40},[34,11022,1837],{"class":87},[34,11024,1046],{"class":156},[34,11026,1894],{"class":63},[34,11028,11029],{"class":156},"姓名：\"",[34,11031,1837],{"class":87},[34,11033,10888],{"class":40},[34,11035,1276],{"class":87},[34,11037,11038],{"class":40},"i)->name",[34,11040,1837],{"class":87},[34,11042,1046],{"class":156},[34,11044,1894],{"class":63},[34,11046,11047],{"class":156},"年龄：\"",[34,11049,1837],{"class":87},[34,11051,10888],{"class":40},[34,11053,1276],{"class":87},[34,11055,11056],{"class":40},"i)->age",[34,11058,1837],{"class":87},[34,11060,1046],{"class":156},[34,11062,1894],{"class":63},[34,11064,11065],{"class":156},"性别：\"",[34,11067,1837],{"class":87},[34,11069,10888],{"class":40},[34,11071,1276],{"class":87},[34,11073,11074],{"class":40},"i)->gender",[34,11076,1837],{"class":87},[34,11078,1859],{"class":40},[34,11080,11081],{"class":36,"line":3252},[34,11082,2840],{"class":40},[34,11084,11085],{"class":36,"line":3257},[34,11086,241],{"class":40},[34,11088,11089,11091,11093],{"class":36,"line":3263},[34,11090,804],{"class":87},[34,11092,2626],{"class":149},[34,11094,2629],{"class":40},[34,11096,11097],{"class":36,"line":3269},[34,11098,2206],{"class":40},[34,11100,11101],{"class":36,"line":3274},[34,11102,11103],{"class":205},"    \u002F\u002F定义结构体变量\n",[34,11105,11106,11109,11111,11113],{"class":36,"line":8601},[34,11107,11108],{"class":40},"    Sanguo s1[",[34,11110,1114],{"class":63},[34,11112,1733],{"class":40},[34,11114,5561],{"class":87},[34,11116,11117],{"class":36,"line":8625},[34,11118,2683],{"class":40},[34,11120,11121,11123,11125,11127,11129,11131,11133],{"class":36,"line":8630},[34,11122,5570],{"class":40},[34,11124,10605],{"class":156},[34,11126,1173],{"class":40},[34,11128,1570],{"class":63},[34,11130,1173],{"class":40},[34,11132,10614],{"class":156},[34,11134,5583],{"class":40},[34,11136,11137,11139,11141,11143,11145,11147,11149],{"class":36,"line":8636},[34,11138,5570],{"class":40},[34,11140,10623],{"class":156},[34,11142,1173],{"class":40},[34,11144,1545],{"class":63},[34,11146,1173],{"class":40},[34,11148,10614],{"class":156},[34,11150,5583],{"class":40},[34,11152,11153,11155,11157,11159,11161,11163,11165],{"class":36,"line":8663},[34,11154,5570],{"class":40},[34,11156,10640],{"class":156},[34,11158,1173],{"class":40},[34,11160,1495],{"class":63},[34,11162,1173],{"class":40},[34,11164,10614],{"class":156},[34,11166,5583],{"class":40},[34,11168,11169,11171,11173,11175,11177,11179,11181],{"class":36,"line":8668},[34,11170,5570],{"class":40},[34,11172,10657],{"class":156},[34,11174,1173],{"class":40},[34,11176,1520],{"class":63},[34,11178,1173],{"class":40},[34,11180,10614],{"class":156},[34,11182,5583],{"class":40},[34,11184,11185,11187,11189,11191,11193,11195,11197],{"class":36,"line":8674},[34,11186,5570],{"class":40},[34,11188,10674],{"class":156},[34,11190,1173],{"class":40},[34,11192,1470],{"class":63},[34,11194,1173],{"class":40},[34,11196,10683],{"class":156},[34,11198,5583],{"class":40},[34,11200,11201],{"class":36,"line":8686},[34,11202,5604],{"class":40},[34,11204,11205,11207,11209,11211,11214,11216,11219,11221],{"class":36,"line":8698},[34,11206,2638],{"class":87},[34,11208,7984],{"class":40},[34,11210,4856],{"class":87},[34,11212,11213],{"class":40},"(s1)",[34,11215,4862],{"class":87},[34,11217,11218],{"class":40},"(s1[",[34,11220,987],{"class":63},[34,11222,4509],{"class":40},[34,11224,11225,11228,11230,11233,11235,11238,11241,11243],{"class":36,"line":8710},[34,11226,11227],{"class":40},"    Sanguo ",[34,11229,1250],{"class":87},[34,11231,11232],{"class":40},"s ",[34,11234,153],{"class":87},[34,11236,11237],{"class":87}," &",[34,11239,11240],{"class":40},"s1[",[34,11242,987],{"class":63},[34,11244,5343],{"class":40},[34,11246,11247],{"class":36,"line":10369},[34,11248,11249],{"class":205},"    \u002F\u002F排序前：\n",[34,11251,11252,11254,11256,11259,11261],{"class":36,"line":10394},[34,11253,7182],{"class":40},[34,11255,1837],{"class":87},[34,11257,11258],{"class":156}," \"排序前：\"",[34,11260,2104],{"class":87},[34,11262,9493],{"class":40},[34,11264,11265,11267],{"class":36,"line":10417},[34,11266,10568],{"class":149},[34,11268,11269],{"class":40},"(s,len);\n",[34,11271,11272],{"class":36,"line":10441},[34,11273,11274],{"class":205},"    \u002F\u002F调用排序函数\n",[34,11276,11277,11279],{"class":36,"line":10446},[34,11278,8251],{"class":149},[34,11280,11269],{"class":40},[34,11282,11283],{"class":36,"line":10451},[34,11284,11285],{"class":205},"    \u002F\u002F排序后\n",[34,11287,11288,11290,11292,11295,11297],{"class":36,"line":10456},[34,11289,7182],{"class":40},[34,11291,1837],{"class":87},[34,11293,11294],{"class":156}," \"排序后：\"",[34,11296,2104],{"class":87},[34,11298,9493],{"class":40},[34,11300,11301,11303],{"class":36,"line":10465},[34,11302,10568],{"class":149},[34,11304,11269],{"class":40},[34,11306,11307],{"class":36,"line":10470},[34,11308,241],{"class":40},[108,11310,11311,11312,11314],{},"注意：使用指针时直接用传首地址**&s",[34,11313,987],{},"**",[45,11316,11317],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":11319},[11320,11321,11322,11323,11324,11325,11326],{"id":8356,"depth":51,"text":8357},{"id":8718,"depth":51,"text":8719},{"id":8987,"depth":51,"text":8988},{"id":9152,"depth":51,"text":9153},{"id":9368,"depth":51,"text":9369},{"id":9689,"depth":51,"text":9690},{"id":9917,"depth":51,"text":9918},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8345,"description":8353},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11333,"title":11334,"body":11335,"description":29,"extension":724,"meta":12678,"navigation":726,"path":12679,"seo":12680,"stem":12681,"__hash__":12682},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11336,"toc":12672},[11337,11340,11344,11350,11364,11369,11372,11376,11383,11389,11392,11399,11405,11410,11413,11416,11419,11983,11986,12000,12004,12009,12025,12165,12168,12174,12177,12182,12190,12298,12301,12306,12309,12314,12317,12323,12326,12669],[10,11338,11334],{"id":11339},"_5程序内存模型",[14,11341,11343],{"id":11342},"_51内存分区模型","5.1内存分区模型",[108,11345,11346,11347],{},"C++程序在执行时，将内存大方向划分为",[111,11348,11349],{},"4个区域",[1800,11351,11352,11355,11358,11361],{},[755,11353,11354],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[755,11356,11357],{},"全局区：存放全局变量和静态变量以及常量",[755,11359,11360],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[755,11362,11363],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[108,11365,11366],{},[111,11367,11368],{},"内存四区意义：",[108,11370,11371],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[19,11373,11375],{"id":11374},"_511程序运行前","5.1.1程序运行前",[108,11377,11378,11379,11382],{},"​\t在程序编译后，生成了exe可执行程序，",[111,11380,11381],{},"未执行该程序前","分为两个区域",[108,11384,11385,11386],{},"​\t",[111,11387,11388],{},"代码区：",[108,11390,11391],{},"​\t\t存放 CPU 执行的机器指令",[108,11393,11394,11395,11398],{},"​\t\t代码区是",[111,11396,11397],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[108,11400,11394,11401,11404],{},[111,11402,11403],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[108,11406,11385,11407],{},[111,11408,11409],{},"全局区：",[108,11411,11412],{},"​\t\t全局变量和静态变量存放在此.",[108,11414,11415],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[108,11417,11418],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[24,11420,11422],{"className":789,"code":11421,"language":791,"meta":29,"style":29},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,11423,11424,11429,11442,11455,11459,11464,11479,11494,11498,11507,11511,11516,11529,11542,11546,11551,11577,11603,11607,11634,11660,11664,11669,11685,11700,11704,11730,11756,11760,11785,11810,11814,11840,11866,11870,11886,11901,11927,11953,11957,11967,11971,11979],{"__ignoreMap":29},[34,11425,11426],{"class":36,"line":37},[34,11427,11428],{"class":205},"\u002F\u002F全局变量\n",[34,11430,11431,11433,11436,11438,11440],{"class":36,"line":51},[34,11432,804],{"class":87},[34,11434,11435],{"class":40}," g_a ",[34,11437,153],{"class":87},[34,11439,2691],{"class":63},[34,11441,73],{"class":40},[34,11443,11444,11446,11449,11451,11453],{"class":36,"line":60},[34,11445,804],{"class":87},[34,11447,11448],{"class":40}," g_b ",[34,11450,153],{"class":87},[34,11452,2691],{"class":63},[34,11454,73],{"class":40},[34,11456,11457],{"class":36,"line":76},[34,11458,3053],{"emptyLinePlaceholder":726},[34,11460,11461],{"class":36,"line":93},[34,11462,11463],{"class":205},"\u002F\u002F全局常量\n",[34,11465,11466,11468,11470,11473,11475,11477],{"class":36,"line":99},[34,11467,7445],{"class":87},[34,11469,3035],{"class":87},[34,11471,11472],{"class":40}," c_g_a ",[34,11474,153],{"class":87},[34,11476,2691],{"class":63},[34,11478,73],{"class":40},[34,11480,11481,11483,11485,11488,11490,11492],{"class":36,"line":353},[34,11482,7445],{"class":87},[34,11484,3035],{"class":87},[34,11486,11487],{"class":40}," c_g_b ",[34,11489,153],{"class":87},[34,11491,2691],{"class":63},[34,11493,73],{"class":40},[34,11495,11496],{"class":36,"line":359},[34,11497,3053],{"emptyLinePlaceholder":726},[34,11499,11500,11502,11504],{"class":36,"line":579},[34,11501,804],{"class":87},[34,11503,2626],{"class":149},[34,11505,11506],{"class":40},"() {\n",[34,11508,11509],{"class":36,"line":589},[34,11510,3053],{"emptyLinePlaceholder":726},[34,11512,11513],{"class":36,"line":601},[34,11514,11515],{"class":205},"    \u002F\u002F局部变量\n",[34,11517,11518,11520,11523,11525,11527],{"class":36,"line":613},[34,11519,2638],{"class":87},[34,11521,11522],{"class":40}," a ",[34,11524,153],{"class":87},[34,11526,2691],{"class":63},[34,11528,73],{"class":40},[34,11530,11531,11533,11536,11538,11540],{"class":36,"line":618},[34,11532,2638],{"class":87},[34,11534,11535],{"class":40}," b ",[34,11537,153],{"class":87},[34,11539,2691],{"class":63},[34,11541,73],{"class":40},[34,11543,11544],{"class":36,"line":628},[34,11545,3053],{"emptyLinePlaceholder":726},[34,11547,11548],{"class":36,"line":640},[34,11549,11550],{"class":205},"    \u002F\u002F打印地址\n",[34,11552,11553,11555,11557,11560,11562,11564,11566,11568,11570,11573,11575],{"class":36,"line":2301},[34,11554,7182],{"class":40},[34,11556,1837],{"class":87},[34,11558,11559],{"class":156}," \"局部变量a地址为： \"",[34,11561,2104],{"class":87},[34,11563,2312],{"class":40},[34,11565,804],{"class":87},[34,11567,1224],{"class":40},[34,11569,1148],{"class":87},[34,11571,11572],{"class":40},"a ",[34,11574,1837],{"class":87},[34,11576,9493],{"class":40},[34,11578,11579,11581,11583,11586,11588,11590,11592,11594,11596,11599,11601],{"class":36,"line":2307},[34,11580,7182],{"class":40},[34,11582,1837],{"class":87},[34,11584,11585],{"class":156}," \"局部变量b地址为： \"",[34,11587,2104],{"class":87},[34,11589,2312],{"class":40},[34,11591,804],{"class":87},[34,11593,1224],{"class":40},[34,11595,1148],{"class":87},[34,11597,11598],{"class":40},"b ",[34,11600,1837],{"class":87},[34,11602,9493],{"class":40},[34,11604,11605],{"class":36,"line":2328},[34,11606,3053],{"emptyLinePlaceholder":726},[34,11608,11609,11611,11613,11616,11618,11621,11623,11625,11627,11630,11632],{"class":36,"line":2333},[34,11610,7182],{"class":40},[34,11612,1837],{"class":87},[34,11614,11615],{"class":156}," \"全局变量g_a地址为： \"",[34,11617,2104],{"class":87},[34,11619,11620],{"class":40},"  (",[34,11622,804],{"class":87},[34,11624,1224],{"class":40},[34,11626,1148],{"class":87},[34,11628,11629],{"class":40},"g_a ",[34,11631,1837],{"class":87},[34,11633,9493],{"class":40},[34,11635,11636,11638,11640,11643,11645,11647,11649,11651,11653,11656,11658],{"class":36,"line":2347},[34,11637,7182],{"class":40},[34,11639,1837],{"class":87},[34,11641,11642],{"class":156}," \"全局变量g_b地址为： \"",[34,11644,2104],{"class":87},[34,11646,11620],{"class":40},[34,11648,804],{"class":87},[34,11650,1224],{"class":40},[34,11652,1148],{"class":87},[34,11654,11655],{"class":40},"g_b ",[34,11657,1837],{"class":87},[34,11659,9493],{"class":40},[34,11661,11662],{"class":36,"line":2352},[34,11663,3053],{"emptyLinePlaceholder":726},[34,11665,11666],{"class":36,"line":2381},[34,11667,11668],{"class":205},"    \u002F\u002F静态变量\n",[34,11670,11671,11674,11676,11679,11681,11683],{"class":36,"line":2386},[34,11672,11673],{"class":87},"    static",[34,11675,3035],{"class":87},[34,11677,11678],{"class":40}," s_a ",[34,11680,153],{"class":87},[34,11682,2691],{"class":63},[34,11684,73],{"class":40},[34,11686,11687,11689,11691,11694,11696,11698],{"class":36,"line":2403},[34,11688,11673],{"class":87},[34,11690,3035],{"class":87},[34,11692,11693],{"class":40}," s_b ",[34,11695,153],{"class":87},[34,11697,2691],{"class":63},[34,11699,73],{"class":40},[34,11701,11702],{"class":36,"line":2408},[34,11703,3053],{"emptyLinePlaceholder":726},[34,11705,11706,11708,11710,11713,11715,11717,11719,11721,11723,11726,11728],{"class":36,"line":2413},[34,11707,7182],{"class":40},[34,11709,1837],{"class":87},[34,11711,11712],{"class":156}," \"静态变量s_a地址为： \"",[34,11714,2104],{"class":87},[34,11716,2312],{"class":40},[34,11718,804],{"class":87},[34,11720,1224],{"class":40},[34,11722,1148],{"class":87},[34,11724,11725],{"class":40},"s_a ",[34,11727,1837],{"class":87},[34,11729,9493],{"class":40},[34,11731,11732,11734,11736,11739,11741,11743,11745,11747,11749,11752,11754],{"class":36,"line":2418},[34,11733,7182],{"class":40},[34,11735,1837],{"class":87},[34,11737,11738],{"class":156}," \"静态变量s_b地址为： \"",[34,11740,2104],{"class":87},[34,11742,2312],{"class":40},[34,11744,804],{"class":87},[34,11746,1224],{"class":40},[34,11748,1148],{"class":87},[34,11750,11751],{"class":40},"s_b ",[34,11753,1837],{"class":87},[34,11755,9493],{"class":40},[34,11757,11758],{"class":36,"line":2432},[34,11759,3053],{"emptyLinePlaceholder":726},[34,11761,11762,11764,11766,11769,11771,11773,11775,11777,11779,11781,11783],{"class":36,"line":2437},[34,11763,7182],{"class":40},[34,11765,1837],{"class":87},[34,11767,11768],{"class":156}," \"字符串常量地址为： \"",[34,11770,2104],{"class":87},[34,11772,2312],{"class":40},[34,11774,804],{"class":87},[34,11776,1224],{"class":40},[34,11778,1148],{"class":87},[34,11780,1854],{"class":156},[34,11782,2104],{"class":87},[34,11784,9493],{"class":40},[34,11786,11787,11789,11791,11793,11795,11797,11799,11801,11803,11806,11808],{"class":36,"line":3230},[34,11788,7182],{"class":40},[34,11790,1837],{"class":87},[34,11792,11768],{"class":156},[34,11794,2104],{"class":87},[34,11796,2312],{"class":40},[34,11798,804],{"class":87},[34,11800,1224],{"class":40},[34,11802,1148],{"class":87},[34,11804,11805],{"class":156},"\"hello world1\"",[34,11807,2104],{"class":87},[34,11809,9493],{"class":40},[34,11811,11812],{"class":36,"line":3244},[34,11813,3053],{"emptyLinePlaceholder":726},[34,11815,11816,11818,11820,11823,11825,11827,11829,11831,11833,11836,11838],{"class":36,"line":3252},[34,11817,7182],{"class":40},[34,11819,1837],{"class":87},[34,11821,11822],{"class":156}," \"全局常量c_g_a地址为： \"",[34,11824,2104],{"class":87},[34,11826,2312],{"class":40},[34,11828,804],{"class":87},[34,11830,1224],{"class":40},[34,11832,1148],{"class":87},[34,11834,11835],{"class":40},"c_g_a ",[34,11837,1837],{"class":87},[34,11839,9493],{"class":40},[34,11841,11842,11844,11846,11849,11851,11853,11855,11857,11859,11862,11864],{"class":36,"line":3257},[34,11843,7182],{"class":40},[34,11845,1837],{"class":87},[34,11847,11848],{"class":156}," \"全局常量c_g_b地址为： \"",[34,11850,2104],{"class":87},[34,11852,2312],{"class":40},[34,11854,804],{"class":87},[34,11856,1224],{"class":40},[34,11858,1148],{"class":87},[34,11860,11861],{"class":40},"c_g_b ",[34,11863,1837],{"class":87},[34,11865,9493],{"class":40},[34,11867,11868],{"class":36,"line":3263},[34,11869,3053],{"emptyLinePlaceholder":726},[34,11871,11872,11875,11877,11880,11882,11884],{"class":36,"line":3269},[34,11873,11874],{"class":87},"    const",[34,11876,3035],{"class":87},[34,11878,11879],{"class":40}," c_l_a ",[34,11881,153],{"class":87},[34,11883,2691],{"class":63},[34,11885,73],{"class":40},[34,11887,11888,11890,11892,11895,11897,11899],{"class":36,"line":3274},[34,11889,11874],{"class":87},[34,11891,3035],{"class":87},[34,11893,11894],{"class":40}," c_l_b ",[34,11896,153],{"class":87},[34,11898,2691],{"class":63},[34,11900,73],{"class":40},[34,11902,11903,11905,11907,11910,11912,11914,11916,11918,11920,11923,11925],{"class":36,"line":8601},[34,11904,7182],{"class":40},[34,11906,1837],{"class":87},[34,11908,11909],{"class":156}," \"局部常量c_l_a地址为： \"",[34,11911,2104],{"class":87},[34,11913,2312],{"class":40},[34,11915,804],{"class":87},[34,11917,1224],{"class":40},[34,11919,1148],{"class":87},[34,11921,11922],{"class":40},"c_l_a ",[34,11924,1837],{"class":87},[34,11926,9493],{"class":40},[34,11928,11929,11931,11933,11936,11938,11940,11942,11944,11946,11949,11951],{"class":36,"line":8625},[34,11930,7182],{"class":40},[34,11932,1837],{"class":87},[34,11934,11935],{"class":156}," \"局部常量c_l_b地址为： \"",[34,11937,2104],{"class":87},[34,11939,2312],{"class":40},[34,11941,804],{"class":87},[34,11943,1224],{"class":40},[34,11945,1148],{"class":87},[34,11947,11948],{"class":40},"c_l_b ",[34,11950,1837],{"class":87},[34,11952,9493],{"class":40},[34,11954,11955],{"class":36,"line":8630},[34,11956,3053],{"emptyLinePlaceholder":726},[34,11958,11959,11961,11963,11965],{"class":36,"line":8636},[34,11960,2956],{"class":149},[34,11962,801],{"class":40},[34,11964,2961],{"class":156},[34,11966,3372],{"class":40},[34,11968,11969],{"class":36,"line":8663},[34,11970,3053],{"emptyLinePlaceholder":726},[34,11972,11973,11975,11977],{"class":36,"line":8668},[34,11974,4743],{"class":87},[34,11976,4746],{"class":63},[34,11978,73],{"class":40},[34,11980,11981],{"class":36,"line":8674},[34,11982,241],{"class":40},[108,11984,11985],{},"总结：",[1800,11987,11988,11991,11994,11997],{},[755,11989,11990],{},"c++中程序运行前分为全局区和代码区",[755,11992,11993],{},"代码区特点是共享和只读",[755,11995,11996],{},"全局区中存放全局变量、静态变量、常量",[755,11998,11999],{},"常量区中存放const修饰的全局常量和字符串常量",[19,12001,12003],{"id":12002},"_512程序运行后","5.1.2程序运行后",[752,12005,12006],{},[755,12007,12008],{},"栈区：",[1800,12010,12011,12018],{},[755,12012,12013,12014,12017],{},"由编译器自动分配释放, 存放",[111,12015,12016],{},"函数的参数值,局部变量","等",[755,12019,12020,12021,12024],{},"注意事项：",[111,12022,12023],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[24,12026,12028],{"className":789,"code":12027,"language":791,"meta":29,"style":29},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[31,12029,12030,12041,12045,12060,12072,12076,12080,12088,12093,12108,12126,12143,12153,12161],{"__ignoreMap":29},[34,12031,12032,12034,12036,12039],{"class":36,"line":37},[34,12033,804],{"class":87},[34,12035,7171],{"class":87},[34,12037,12038],{"class":149}," func",[34,12040,2629],{"class":40},[34,12042,12043],{"class":36,"line":51},[34,12044,2206],{"class":40},[34,12046,12047,12049,12051,12053,12055,12057],{"class":36,"line":60},[34,12048,2638],{"class":87},[34,12050,11522],{"class":40},[34,12052,153],{"class":87},[34,12054,2691],{"class":63},[34,12056,854],{"class":40},[34,12058,12059],{"class":205}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[34,12061,12062,12064,12066,12069],{"class":36,"line":76},[34,12063,4743],{"class":87},[34,12065,11237],{"class":87},[34,12067,12068],{"class":40},"a;",[34,12070,12071],{"class":205}," \u002F\u002F放回局部变量的地址\n",[34,12073,12074],{"class":36,"line":93},[34,12075,241],{"class":40},[34,12077,12078],{"class":36,"line":99},[34,12079,3053],{"emptyLinePlaceholder":726},[34,12081,12082,12084,12086],{"class":36,"line":353},[34,12083,804],{"class":87},[34,12085,2626],{"class":149},[34,12087,11506],{"class":40},[34,12089,12090],{"class":36,"line":359},[34,12091,12092],{"class":205},"    \u002F\u002F接受func的返回值\n",[34,12094,12095,12097,12099,12102,12104,12106],{"class":36,"line":579},[34,12096,2638],{"class":87},[34,12098,7171],{"class":87},[34,12100,12101],{"class":40},"p ",[34,12103,153],{"class":87},[34,12105,12038],{"class":149},[34,12107,6289],{"class":40},[34,12109,12110,12112,12114,12116,12118,12120,12123],{"class":36,"line":589},[34,12111,7182],{"class":40},[34,12113,1837],{"class":87},[34,12115,7171],{"class":87},[34,12117,12101],{"class":40},[34,12119,1837],{"class":87},[34,12121,12122],{"class":40}," endl;",[34,12124,12125],{"class":205}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[34,12127,12128,12130,12132,12134,12136,12138,12140],{"class":36,"line":601},[34,12129,7182],{"class":40},[34,12131,1837],{"class":87},[34,12133,7171],{"class":87},[34,12135,12101],{"class":40},[34,12137,1837],{"class":87},[34,12139,12122],{"class":40},[34,12141,12142],{"class":205}," \u002F\u002F第二次这个数据不再保留\n",[34,12144,12145,12147,12149,12151],{"class":36,"line":613},[34,12146,2956],{"class":149},[34,12148,801],{"class":40},[34,12150,2961],{"class":156},[34,12152,3372],{"class":40},[34,12154,12155,12157,12159],{"class":36,"line":618},[34,12156,4743],{"class":87},[34,12158,4746],{"class":63},[34,12160,73],{"class":40},[34,12162,12163],{"class":36,"line":628},[34,12164,241],{"class":40},[108,12166,12167],{},"输出结果：",[108,12169,12170],{},[2122,12171],{"alt":12172,"src":12173},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[108,12175,12176],{},"总结：不要返回局部变量的地址",[752,12178,12179],{"start":51},[755,12180,12181],{},"堆区",[1800,12183,12184,12187],{},[755,12185,12186],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[755,12188,12189],{},"在c++中主要利用new在堆区开辟内存",[24,12191,12193],{"className":789,"code":12192,"language":791,"meta":29,"style":29},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[31,12194,12195,12210,12214,12219,12240,12247,12251,12259,12263,12268,12282,12294],{"__ignoreMap":29},[34,12196,12197,12199,12202,12205,12207],{"class":36,"line":37},[34,12198,804],{"class":87},[34,12200,12201],{"class":87},"  *",[34,12203,12204],{"class":149},"func",[34,12206,3080],{"class":40},[34,12208,12209],{"class":205},"  \u002F\u002F函数返回指针\n",[34,12211,12212],{"class":36,"line":51},[34,12213,2206],{"class":40},[34,12215,12216],{"class":36,"line":60},[34,12217,12218],{"class":205},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[34,12220,12221,12223,12225,12227,12229,12232,12234,12236,12238],{"class":36,"line":76},[34,12222,4800],{"class":87},[34,12224,7171],{"class":87},[34,12226,108],{"class":40},[34,12228,153],{"class":87},[34,12230,12231],{"class":87}," new",[34,12233,3035],{"class":87},[34,12235,801],{"class":40},[34,12237,1241],{"class":63},[34,12239,3372],{"class":40},[34,12241,12242,12244],{"class":36,"line":93},[34,12243,5034],{"class":87},[34,12245,12246],{"class":40}," p;\n",[34,12248,12249],{"class":36,"line":99},[34,12250,241],{"class":40},[34,12252,12253,12255,12257],{"class":36,"line":353},[34,12254,804],{"class":87},[34,12256,2626],{"class":149},[34,12258,2629],{"class":40},[34,12260,12261],{"class":36,"line":359},[34,12262,2206],{"class":40},[34,12264,12265],{"class":36,"line":579},[34,12266,12267],{"class":205},"    \u002F\u002F在堆区开辟数据\n",[34,12269,12270,12272,12274,12276,12278,12280],{"class":36,"line":589},[34,12271,2638],{"class":87},[34,12273,7171],{"class":87},[34,12275,108],{"class":40},[34,12277,153],{"class":87},[34,12279,12204],{"class":149},[34,12281,6289],{"class":40},[34,12283,12284,12286,12288,12290,12292],{"class":36,"line":601},[34,12285,2211],{"class":40},[34,12287,7072],{"class":87},[34,12289,108],{"class":40},[34,12291,1837],{"class":87},[34,12293,1859],{"class":40},[34,12295,12296],{"class":36,"line":613},[34,12297,241],{"class":40},[108,12299,12300],{},"图片展示：",[108,12302,12303],{},[2122,12304],{"alt":12172,"src":12305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[108,12307,12308],{},"堆区内存由程序员管生死！！！",[752,12310,12311],{"start":60},[755,12312,12313],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[108,12315,12316],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[108,12318,12319,12320],{},"​语法：",[31,12321,12322],{}," new 数据类型",[108,12324,12325],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[24,12327,12329],{"className":789,"code":12328,"language":791,"meta":29,"style":29},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[31,12330,12331,12336,12346,12350,12355,12360,12382,12386,12394,12398,12412,12424,12436,12448,12453,12458,12469,12473,12478,12486,12490,12495,12517,12543,12547,12565,12569,12595,12599,12611,12615,12620,12625,12633,12637,12641,12649,12653,12659,12665],{"__ignoreMap":29},[34,12332,12333],{"class":36,"line":37},[34,12334,12335],{"class":205},"\u002F\u002F1.new的基本语法\n",[34,12337,12338,12340,12342,12344],{"class":36,"line":51},[34,12339,804],{"class":87},[34,12341,7171],{"class":87},[34,12343,12204],{"class":149},[34,12345,2629],{"class":40},[34,12347,12348],{"class":36,"line":60},[34,12349,2206],{"class":40},[34,12351,12352],{"class":36,"line":76},[34,12353,12354],{"class":205},"    \u002F\u002F在堆区创建整型数据\n",[34,12356,12357],{"class":36,"line":93},[34,12358,12359],{"class":205},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[34,12361,12362,12364,12366,12368,12371,12373,12375,12377,12379],{"class":36,"line":99},[34,12363,2638],{"class":87},[34,12365,7171],{"class":87},[34,12367,108],{"class":40},[34,12369,12370],{"class":87},"=new",[34,12372,3035],{"class":87},[34,12374,801],{"class":40},[34,12376,1241],{"class":63},[34,12378,6619],{"class":40},[34,12380,12381],{"class":205},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[34,12383,12384],{"class":36,"line":353},[34,12385,241],{"class":40},[34,12387,12388,12390,12392],{"class":36,"line":359},[34,12389,6017],{"class":87},[34,12391,6241],{"class":149},[34,12393,2629],{"class":40},[34,12395,12396],{"class":36,"line":579},[34,12397,2206],{"class":40},[34,12399,12400,12402,12404,12406,12408,12410],{"class":36,"line":589},[34,12401,2638],{"class":87},[34,12403,7171],{"class":87},[34,12405,108],{"class":40},[34,12407,153],{"class":87},[34,12409,12204],{"class":149},[34,12411,6289],{"class":40},[34,12413,12414,12416,12418,12420,12422],{"class":36,"line":601},[34,12415,2211],{"class":40},[34,12417,7072],{"class":87},[34,12419,108],{"class":40},[34,12421,1837],{"class":87},[34,12423,1859],{"class":40},[34,12425,12426,12428,12430,12432,12434],{"class":36,"line":613},[34,12427,2211],{"class":40},[34,12429,7072],{"class":87},[34,12431,108],{"class":40},[34,12433,1837],{"class":87},[34,12435,1859],{"class":40},[34,12437,12438,12440,12442,12444,12446],{"class":36,"line":618},[34,12439,2211],{"class":40},[34,12441,7072],{"class":87},[34,12443,108],{"class":40},[34,12445,1837],{"class":87},[34,12447,1859],{"class":40},[34,12449,12450],{"class":36,"line":628},[34,12451,12452],{"class":205},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[34,12454,12455],{"class":36,"line":640},[34,12456,12457],{"class":205},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[34,12459,12460,12463,12466],{"class":36,"line":2301},[34,12461,12462],{"class":87},"    delete",[34,12464,12465],{"class":40}," p;",[34,12467,12468],{"class":205},"\u002F\u002F删除这块地址\n",[34,12470,12471],{"class":36,"line":2307},[34,12472,241],{"class":40},[34,12474,12475],{"class":36,"line":2328},[34,12476,12477],{"class":205},"\u002F\u002F2.在堆区利用new开辟数组\n",[34,12479,12480,12482,12484],{"class":36,"line":2333},[34,12481,6017],{"class":87},[34,12483,6310],{"class":149},[34,12485,2629],{"class":40},[34,12487,12488],{"class":36,"line":2347},[34,12489,2206],{"class":40},[34,12491,12492],{"class":36,"line":2352},[34,12493,12494],{"class":205},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[34,12496,12497,12499,12501,12503,12505,12507,12509,12511,12514],{"class":36,"line":2381},[34,12498,2638],{"class":87},[34,12500,7171],{"class":87},[34,12502,4533],{"class":40},[34,12504,12370],{"class":87},[34,12506,3035],{"class":87},[34,12508,1684],{"class":40},[34,12510,1241],{"class":63},[34,12512,12513],{"class":40},"];",[34,12515,12516],{"class":205},"\u002F\u002F10代表数组有10个元素\n",[34,12518,12519,12521,12523,12525,12527,12529,12531,12533,12535,12537,12539,12541],{"class":36,"line":2386},[34,12520,3854],{"class":87},[34,12522,2312],{"class":40},[34,12524,804],{"class":87},[34,12526,3685],{"class":40},[34,12528,153],{"class":87},[34,12530,987],{"class":63},[34,12532,3692],{"class":40},[34,12534,41],{"class":87},[34,12536,1241],{"class":63},[34,12538,3692],{"class":40},[34,12540,2945],{"class":87},[34,12542,807],{"class":40},[34,12544,12545],{"class":36,"line":2403},[34,12546,2683],{"class":40},[34,12548,12549,12552,12554,12556,12558,12560,12562],{"class":36,"line":2408},[34,12550,12551],{"class":40},"        arr[i]",[34,12553,153],{"class":87},[34,12555,1236],{"class":40},[34,12557,1276],{"class":87},[34,12559,1106],{"class":63},[34,12561,854],{"class":40},[34,12563,12564],{"class":205},"\u002F\u002F给10个元素赋值100～109\n",[34,12566,12567],{"class":36,"line":2413},[34,12568,2840],{"class":40},[34,12570,12571,12573,12575,12577,12579,12581,12583,12585,12587,12589,12591,12593],{"class":36,"line":2418},[34,12572,3854],{"class":87},[34,12574,2312],{"class":40},[34,12576,804],{"class":87},[34,12578,3685],{"class":40},[34,12580,153],{"class":87},[34,12582,987],{"class":63},[34,12584,3692],{"class":40},[34,12586,41],{"class":87},[34,12588,1241],{"class":63},[34,12590,3692],{"class":40},[34,12592,2945],{"class":87},[34,12594,807],{"class":40},[34,12596,12597],{"class":36,"line":2432},[34,12598,2683],{"class":40},[34,12600,12601,12603,12605,12607,12609],{"class":36,"line":2437},[34,12602,4104],{"class":40},[34,12604,1837],{"class":87},[34,12606,5007],{"class":40},[34,12608,1837],{"class":87},[34,12610,1859],{"class":40},[34,12612,12613],{"class":36,"line":3230},[34,12614,2840],{"class":40},[34,12616,12617],{"class":36,"line":3244},[34,12618,12619],{"class":205},"    \u002F\u002F释放堆区数组\n",[34,12621,12622],{"class":36,"line":3252},[34,12623,12624],{"class":205},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[34,12626,12627,12630],{"class":36,"line":3257},[34,12628,12629],{"class":87},"    delete[]",[34,12631,12632],{"class":40}," arr;\n",[34,12634,12635],{"class":36,"line":3263},[34,12636,241],{"class":40},[34,12638,12639],{"class":36,"line":3269},[34,12640,3053],{"emptyLinePlaceholder":726},[34,12642,12643,12645,12647],{"class":36,"line":3274},[34,12644,804],{"class":87},[34,12646,2626],{"class":149},[34,12648,2629],{"class":40},[34,12650,12651],{"class":36,"line":8601},[34,12652,2206],{"class":40},[34,12654,12655,12657],{"class":36,"line":8625},[34,12656,6286],{"class":149},[34,12658,6289],{"class":40},[34,12660,12661,12663],{"class":36,"line":8630},[34,12662,6355],{"class":149},[34,12664,6289],{"class":40},[34,12666,12667],{"class":36,"line":8636},[34,12668,241],{"class":40},[45,12670,12671],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":12673},[12674],{"id":11342,"depth":51,"text":11343,"children":12675},[12676,12677],{"id":11374,"depth":60,"text":11375},{"id":12002,"depth":60,"text":12003},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11334,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12684,"title":12685,"body":12686,"description":29,"extension":724,"meta":14167,"navigation":726,"path":14168,"seo":14169,"stem":14170,"__hash__":14171},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12687,"toc":14159},[12688,12691,12695,12698,12701,12870,12874,12879,12896,12901,13053,13057,13060,13063,13457,13461,13464,13469,13472,13784,13788,13794,13954,13956,13964,13968,13971,13978,14156],[10,12689,12685],{"id":12690},"_6引用",[14,12692,12694],{"id":12693},"_61引用基本用法","6.1引用基本用法",[108,12696,12697],{},"引用的本质：给变量起别名",[108,12699,12700],{},"语法：数据类型 &别名=原名",[24,12702,12704],{"className":789,"code":12703,"language":791,"meta":29,"style":29},"int main() {\n\n    int a = 10;\n    int &b = a;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F10\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F10\n\n    b = 100;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F100\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F100\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,12705,12706,12714,12718,12730,12742,12746,12765,12784,12788,12799,12803,12822,12840,12844,12854,12858,12866],{"__ignoreMap":29},[34,12707,12708,12710,12712],{"class":36,"line":37},[34,12709,804],{"class":87},[34,12711,2626],{"class":149},[34,12713,11506],{"class":40},[34,12715,12716],{"class":36,"line":51},[34,12717,3053],{"emptyLinePlaceholder":726},[34,12719,12720,12722,12724,12726,12728],{"class":36,"line":60},[34,12721,2638],{"class":87},[34,12723,11522],{"class":40},[34,12725,153],{"class":87},[34,12727,2691],{"class":63},[34,12729,73],{"class":40},[34,12731,12732,12734,12736,12738,12740],{"class":36,"line":76},[34,12733,2638],{"class":87},[34,12735,11237],{"class":87},[34,12737,11598],{"class":40},[34,12739,153],{"class":87},[34,12741,2092],{"class":40},[34,12743,12744],{"class":36,"line":93},[34,12745,3053],{"emptyLinePlaceholder":726},[34,12747,12748,12750,12752,12755,12757,12759,12761,12763],{"class":36,"line":99},[34,12749,7182],{"class":40},[34,12751,1837],{"class":87},[34,12753,12754],{"class":156}," \"a = \"",[34,12756,2104],{"class":87},[34,12758,11522],{"class":40},[34,12760,1837],{"class":87},[34,12762,12122],{"class":40},[34,12764,7921],{"class":205},[34,12766,12767,12769,12771,12774,12776,12778,12780,12782],{"class":36,"line":353},[34,12768,7182],{"class":40},[34,12770,1837],{"class":87},[34,12772,12773],{"class":156}," \"b = \"",[34,12775,2104],{"class":87},[34,12777,11535],{"class":40},[34,12779,1837],{"class":87},[34,12781,12122],{"class":40},[34,12783,7921],{"class":205},[34,12785,12786],{"class":36,"line":359},[34,12787,3053],{"emptyLinePlaceholder":726},[34,12789,12790,12793,12795,12797],{"class":36,"line":579},[34,12791,12792],{"class":40},"    b ",[34,12794,153],{"class":87},[34,12796,6407],{"class":63},[34,12798,73],{"class":40},[34,12800,12801],{"class":36,"line":589},[34,12802,3053],{"emptyLinePlaceholder":726},[34,12804,12805,12807,12809,12811,12813,12815,12817,12819],{"class":36,"line":601},[34,12806,7182],{"class":40},[34,12808,1837],{"class":87},[34,12810,12754],{"class":156},[34,12812,2104],{"class":87},[34,12814,11522],{"class":40},[34,12816,1837],{"class":87},[34,12818,12122],{"class":40},[34,12820,12821],{"class":205},"\u002F\u002F100\n",[34,12823,12824,12826,12828,12830,12832,12834,12836,12838],{"class":36,"line":613},[34,12825,7182],{"class":40},[34,12827,1837],{"class":87},[34,12829,12773],{"class":156},[34,12831,2104],{"class":87},[34,12833,11535],{"class":40},[34,12835,1837],{"class":87},[34,12837,12122],{"class":40},[34,12839,12821],{"class":205},[34,12841,12842],{"class":36,"line":618},[34,12843,3053],{"emptyLinePlaceholder":726},[34,12845,12846,12848,12850,12852],{"class":36,"line":628},[34,12847,2956],{"class":149},[34,12849,801],{"class":40},[34,12851,2961],{"class":156},[34,12853,3372],{"class":40},[34,12855,12856],{"class":36,"line":640},[34,12857,3053],{"emptyLinePlaceholder":726},[34,12859,12860,12862,12864],{"class":36,"line":2301},[34,12861,4743],{"class":87},[34,12863,4746],{"class":63},[34,12865,73],{"class":40},[34,12867,12868],{"class":36,"line":2307},[34,12869,241],{"class":40},[14,12871,12873],{"id":12872},"_62引用的注意事项","6.2引用的注意事项",[752,12875,12876],{},[755,12877,12878],{},"引用必须要初始化",[24,12880,12882],{"className":789,"code":12881,"language":791,"meta":29,"style":29},"int &b;\u002F\u002F非常错误！\n",[31,12883,12884],{"__ignoreMap":29},[34,12885,12886,12888,12890,12893],{"class":36,"line":37},[34,12887,804],{"class":87},[34,12889,11237],{"class":87},[34,12891,12892],{"class":40},"b;",[34,12894,12895],{"class":205},"\u002F\u002F非常错误！\n",[752,12897,12898],{"start":51},[755,12899,12900],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[24,12902,12904],{"className":789,"code":12903,"language":791,"meta":29,"style":29},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[31,12905,12906,12914,12926,12938,12946,12962,12975,12993,13011,13031,13041,13049],{"__ignoreMap":29},[34,12907,12908,12910,12912],{"class":36,"line":37},[34,12909,804],{"class":87},[34,12911,2626],{"class":149},[34,12913,11506],{"class":40},[34,12915,12916,12918,12920,12922,12924],{"class":36,"line":51},[34,12917,2638],{"class":87},[34,12919,11522],{"class":40},[34,12921,153],{"class":87},[34,12923,2691],{"class":63},[34,12925,73],{"class":40},[34,12927,12928,12930,12932,12934,12936],{"class":36,"line":60},[34,12929,2638],{"class":87},[34,12931,11535],{"class":40},[34,12933,153],{"class":87},[34,12935,9603],{"class":63},[34,12937,73],{"class":40},[34,12939,12940,12943],{"class":36,"line":76},[34,12941,12942],{"class":205},"    \u002F\u002Fint &c;",[34,12944,12945],{"class":205}," \u002F\u002F错误，引用必须初始化\n",[34,12947,12948,12950,12952,12954,12956,12959],{"class":36,"line":93},[34,12949,2638],{"class":87},[34,12951,11237],{"class":87},[34,12953,3599],{"class":40},[34,12955,153],{"class":87},[34,12957,12958],{"class":40}," a;",[34,12960,12961],{"class":205}," \u002F\u002F一旦初始化后，就不可以更改\n",[34,12963,12964,12967,12969,12972],{"class":36,"line":99},[34,12965,12966],{"class":40},"    c ",[34,12968,153],{"class":87},[34,12970,12971],{"class":40}," b;",[34,12973,12974],{"class":205}," \u002F\u002F这是赋值操作，不是更改引用\n",[34,12976,12977,12979,12981,12983,12985,12987,12989,12991],{"class":36,"line":353},[34,12978,7182],{"class":40},[34,12980,1837],{"class":87},[34,12982,12754],{"class":156},[34,12984,2104],{"class":87},[34,12986,11522],{"class":40},[34,12988,1837],{"class":87},[34,12990,12122],{"class":40},[34,12992,7906],{"class":205},[34,12994,12995,12997,12999,13001,13003,13005,13007,13009],{"class":36,"line":359},[34,12996,7182],{"class":40},[34,12998,1837],{"class":87},[34,13000,12773],{"class":156},[34,13002,2104],{"class":87},[34,13004,11535],{"class":40},[34,13006,1837],{"class":87},[34,13008,12122],{"class":40},[34,13010,7906],{"class":205},[34,13012,13013,13015,13017,13020,13022,13025,13027,13029],{"class":36,"line":579},[34,13014,7182],{"class":40},[34,13016,1837],{"class":87},[34,13018,13019],{"class":156}," \"c = \"",[34,13021,2104],{"class":87},[34,13023,13024],{"class":40}," c ",[34,13026,1837],{"class":87},[34,13028,12122],{"class":40},[34,13030,7906],{"class":205},[34,13032,13033,13035,13037,13039],{"class":36,"line":589},[34,13034,2956],{"class":149},[34,13036,801],{"class":40},[34,13038,2961],{"class":156},[34,13040,3372],{"class":40},[34,13042,13043,13045,13047],{"class":36,"line":601},[34,13044,4743],{"class":87},[34,13046,4746],{"class":63},[34,13048,73],{"class":40},[34,13050,13051],{"class":36,"line":613},[34,13052,241],{"class":40},[14,13054,13056],{"id":13055},"_63引用做函数参数","6.3引用做函数参数",[108,13058,13059],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[108,13061,13062],{},"优点：可以简化指针修改实参",[24,13064,13066],{"className":789,"code":13065,"language":791,"meta":29,"style":29},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[31,13067,13068,13073,13096,13107,13117,13126,13130,13134,13139,13161,13173,13185,13195,13199,13203,13208,13230,13240,13248,13256,13260,13264,13272,13276,13288,13300,13304,13315,13341,13345,13365,13389,13393,13403,13427,13431,13441,13445,13453],{"__ignoreMap":29},[34,13069,13070],{"class":36,"line":37},[34,13071,13072],{"class":205},"\u002F\u002F1. 值传递\n",[34,13074,13075,13077,13080,13082,13084,13086,13089,13091,13093],{"class":36,"line":51},[34,13076,6017],{"class":87},[34,13078,13079],{"class":149}," mySwap01",[34,13081,801],{"class":40},[34,13083,804],{"class":87},[34,13085,2058],{"class":5869},[34,13087,13088],{"class":40},", ",[34,13090,804],{"class":87},[34,13092,3486],{"class":5869},[34,13094,13095],{"class":40},") {\n",[34,13097,13098,13100,13103,13105],{"class":36,"line":60},[34,13099,2638],{"class":87},[34,13101,13102],{"class":40}," temp ",[34,13104,153],{"class":87},[34,13106,2092],{"class":40},[34,13108,13109,13112,13114],{"class":36,"line":76},[34,13110,13111],{"class":40},"    a ",[34,13113,153],{"class":87},[34,13115,13116],{"class":40}," b;\n",[34,13118,13119,13121,13123],{"class":36,"line":93},[34,13120,12792],{"class":40},[34,13122,153],{"class":87},[34,13124,13125],{"class":40}," temp;\n",[34,13127,13128],{"class":36,"line":99},[34,13129,241],{"class":40},[34,13131,13132],{"class":36,"line":353},[34,13133,3053],{"emptyLinePlaceholder":726},[34,13135,13136],{"class":36,"line":359},[34,13137,13138],{"class":205},"\u002F\u002F2. 地址传递\n",[34,13140,13141,13143,13146,13148,13151,13153,13155,13157,13159],{"class":36,"line":579},[34,13142,6017],{"class":87},[34,13144,13145],{"class":149}," mySwap02",[34,13147,801],{"class":40},[34,13149,13150],{"class":87},"int*",[34,13152,2058],{"class":5869},[34,13154,13088],{"class":40},[34,13156,13150],{"class":87},[34,13158,3486],{"class":5869},[34,13160,13095],{"class":40},[34,13162,13163,13165,13167,13169,13171],{"class":36,"line":589},[34,13164,2638],{"class":87},[34,13166,13102],{"class":40},[34,13168,153],{"class":87},[34,13170,7171],{"class":87},[34,13172,6850],{"class":40},[34,13174,13175,13177,13179,13181,13183],{"class":36,"line":601},[34,13176,7056],{"class":87},[34,13178,11572],{"class":40},[34,13180,153],{"class":87},[34,13182,7171],{"class":87},[34,13184,6722],{"class":40},[34,13186,13187,13189,13191,13193],{"class":36,"line":613},[34,13188,7056],{"class":87},[34,13190,11598],{"class":40},[34,13192,153],{"class":87},[34,13194,13125],{"class":40},[34,13196,13197],{"class":36,"line":618},[34,13198,241],{"class":40},[34,13200,13201],{"class":36,"line":628},[34,13202,3053],{"emptyLinePlaceholder":726},[34,13204,13205],{"class":36,"line":640},[34,13206,13207],{"class":205},"\u002F\u002F3. 引用传递\n",[34,13209,13210,13212,13215,13217,13220,13222,13224,13226,13228],{"class":36,"line":2301},[34,13211,6017],{"class":87},[34,13213,13214],{"class":149}," mySwap03",[34,13216,801],{"class":40},[34,13218,13219],{"class":87},"int&",[34,13221,2058],{"class":5869},[34,13223,13088],{"class":40},[34,13225,13219],{"class":87},[34,13227,3486],{"class":5869},[34,13229,13095],{"class":40},[34,13231,13232,13234,13236,13238],{"class":36,"line":2307},[34,13233,2638],{"class":87},[34,13235,13102],{"class":40},[34,13237,153],{"class":87},[34,13239,2092],{"class":40},[34,13241,13242,13244,13246],{"class":36,"line":2328},[34,13243,13111],{"class":40},[34,13245,153],{"class":87},[34,13247,13116],{"class":40},[34,13249,13250,13252,13254],{"class":36,"line":2333},[34,13251,12792],{"class":40},[34,13253,153],{"class":87},[34,13255,13125],{"class":40},[34,13257,13258],{"class":36,"line":2347},[34,13259,241],{"class":40},[34,13261,13262],{"class":36,"line":2352},[34,13263,3053],{"emptyLinePlaceholder":726},[34,13265,13266,13268,13270],{"class":36,"line":2381},[34,13267,804],{"class":87},[34,13269,2626],{"class":149},[34,13271,11506],{"class":40},[34,13273,13274],{"class":36,"line":2386},[34,13275,3053],{"emptyLinePlaceholder":726},[34,13277,13278,13280,13282,13284,13286],{"class":36,"line":2403},[34,13279,2638],{"class":87},[34,13281,11522],{"class":40},[34,13283,153],{"class":87},[34,13285,2691],{"class":63},[34,13287,73],{"class":40},[34,13289,13290,13292,13294,13296,13298],{"class":36,"line":2408},[34,13291,2638],{"class":87},[34,13293,11535],{"class":40},[34,13295,153],{"class":87},[34,13297,9603],{"class":63},[34,13299,73],{"class":40},[34,13301,13302],{"class":36,"line":2413},[34,13303,3053],{"emptyLinePlaceholder":726},[34,13305,13306,13309,13312],{"class":36,"line":2418},[34,13307,13308],{"class":149},"    mySwap01",[34,13310,13311],{"class":40},"(a, b);",[34,13313,13314],{"class":205},"\u002F\u002F值传递，形参不会修饰实参\n",[34,13316,13317,13319,13321,13324,13326,13328,13330,13333,13335,13337,13339],{"class":36,"line":2432},[34,13318,7182],{"class":40},[34,13320,1837],{"class":87},[34,13322,13323],{"class":156}," \"a:\"",[34,13325,2104],{"class":87},[34,13327,11522],{"class":40},[34,13329,1837],{"class":87},[34,13331,13332],{"class":156}," \" b:\"",[34,13334,2104],{"class":87},[34,13336,11535],{"class":40},[34,13338,1837],{"class":87},[34,13340,9493],{"class":40},[34,13342,13343],{"class":36,"line":2437},[34,13344,3053],{"emptyLinePlaceholder":726},[34,13346,13347,13350,13352,13354,13357,13359,13362],{"class":36,"line":3230},[34,13348,13349],{"class":149},"    mySwap02",[34,13351,801],{"class":40},[34,13353,1148],{"class":87},[34,13355,13356],{"class":40},"a, ",[34,13358,1148],{"class":87},[34,13360,13361],{"class":40},"b);",[34,13363,13364],{"class":205},"\u002F\u002F地址传递，形参会修饰实参\n",[34,13366,13367,13369,13371,13373,13375,13377,13379,13381,13383,13385,13387],{"class":36,"line":3244},[34,13368,7182],{"class":40},[34,13370,1837],{"class":87},[34,13372,13323],{"class":156},[34,13374,2104],{"class":87},[34,13376,11522],{"class":40},[34,13378,1837],{"class":87},[34,13380,13332],{"class":156},[34,13382,2104],{"class":87},[34,13384,11535],{"class":40},[34,13386,1837],{"class":87},[34,13388,9493],{"class":40},[34,13390,13391],{"class":36,"line":3252},[34,13392,3053],{"emptyLinePlaceholder":726},[34,13394,13395,13398,13400],{"class":36,"line":3257},[34,13396,13397],{"class":149},"    mySwap03",[34,13399,13311],{"class":40},[34,13401,13402],{"class":205},"\u002F\u002F引用传递，形参会修饰实参\n",[34,13404,13405,13407,13409,13411,13413,13415,13417,13419,13421,13423,13425],{"class":36,"line":3263},[34,13406,7182],{"class":40},[34,13408,1837],{"class":87},[34,13410,13323],{"class":156},[34,13412,2104],{"class":87},[34,13414,11522],{"class":40},[34,13416,1837],{"class":87},[34,13418,13332],{"class":156},[34,13420,2104],{"class":87},[34,13422,11535],{"class":40},[34,13424,1837],{"class":87},[34,13426,9493],{"class":40},[34,13428,13429],{"class":36,"line":3269},[34,13430,3053],{"emptyLinePlaceholder":726},[34,13432,13433,13435,13437,13439],{"class":36,"line":3274},[34,13434,2956],{"class":149},[34,13436,801],{"class":40},[34,13438,2961],{"class":156},[34,13440,3372],{"class":40},[34,13442,13443],{"class":36,"line":8601},[34,13444,3053],{"emptyLinePlaceholder":726},[34,13446,13447,13449,13451],{"class":36,"line":8625},[34,13448,4743],{"class":87},[34,13450,4746],{"class":63},[34,13452,73],{"class":40},[34,13454,13455],{"class":36,"line":8630},[34,13456,241],{"class":40},[14,13458,13460],{"id":13459},"_64引用做函数的返回值","6.4引用做函数的返回值",[108,13462,13463],{},"作用：引用是可以作为函数的返回值存在的",[108,13465,9678,13466],{},[111,13467,13468],{},"不要返回局部变量引用",[108,13470,13471],{},"用法：函数调用作为左值",[24,13473,13475],{"className":10594,"code":13474,"language":10596,"meta":29,"style":29},"\u002F\u002F返回局部变量引用\nint& test01() {\n    int a = 10; \u002F\u002F局部变量\n    return a;\n}\n\n\u002F\u002F返回静态变量引用\nint& test02() {\n    static int a = 20;\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n    return a;\n}\n\nint main() {\n\n    \u002F\u002F不能返回局部变量的引用\n    int& ref = test01();\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F10 第一次正确，是因为编译器做了保留\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n\n    \u002F\u002F如果函数做左值，那么必须返回引用\n    int& ref2 = test02();\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n\n    test02() = 1000;\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,13476,13477,13482,13490,13505,13511,13515,13519,13524,13532,13549,13555,13559,13563,13571,13575,13580,13594,13614,13633,13637,13642,13655,13675,13693,13697,13713,13717,13736,13754,13758,13768,13772,13780],{"__ignoreMap":29},[34,13478,13479],{"class":36,"line":37},[34,13480,13481],{"class":205},"\u002F\u002F返回局部变量引用\n",[34,13483,13484,13486,13488],{"class":36,"line":51},[34,13485,13219],{"class":87},[34,13487,6241],{"class":149},[34,13489,11506],{"class":40},[34,13491,13492,13494,13496,13498,13500,13502],{"class":36,"line":60},[34,13493,2638],{"class":87},[34,13495,11522],{"class":40},[34,13497,153],{"class":87},[34,13499,2691],{"class":63},[34,13501,854],{"class":40},[34,13503,13504],{"class":205}," \u002F\u002F局部变量\n",[34,13506,13507,13509],{"class":36,"line":76},[34,13508,4743],{"class":87},[34,13510,2092],{"class":40},[34,13512,13513],{"class":36,"line":93},[34,13514,241],{"class":40},[34,13516,13517],{"class":36,"line":99},[34,13518,3053],{"emptyLinePlaceholder":726},[34,13520,13521],{"class":36,"line":353},[34,13522,13523],{"class":205},"\u002F\u002F返回静态变量引用\n",[34,13525,13526,13528,13530],{"class":36,"line":359},[34,13527,13219],{"class":87},[34,13529,6310],{"class":149},[34,13531,11506],{"class":40},[34,13533,13534,13536,13538,13540,13542,13544,13546],{"class":36,"line":579},[34,13535,11673],{"class":87},[34,13537,3035],{"class":87},[34,13539,11522],{"class":40},[34,13541,153],{"class":87},[34,13543,9603],{"class":63},[34,13545,854],{"class":40},[34,13547,13548],{"class":205},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[34,13550,13551,13553],{"class":36,"line":589},[34,13552,4743],{"class":87},[34,13554,2092],{"class":40},[34,13556,13557],{"class":36,"line":601},[34,13558,241],{"class":40},[34,13560,13561],{"class":36,"line":613},[34,13562,3053],{"emptyLinePlaceholder":726},[34,13564,13565,13567,13569],{"class":36,"line":618},[34,13566,804],{"class":87},[34,13568,2626],{"class":149},[34,13570,11506],{"class":40},[34,13572,13573],{"class":36,"line":628},[34,13574,3053],{"emptyLinePlaceholder":726},[34,13576,13577],{"class":36,"line":640},[34,13578,13579],{"class":205},"    \u002F\u002F不能返回局部变量的引用\n",[34,13581,13582,13585,13588,13590,13592],{"class":36,"line":2301},[34,13583,13584],{"class":87},"    int&",[34,13586,13587],{"class":40}," ref ",[34,13589,153],{"class":87},[34,13591,6241],{"class":149},[34,13593,6289],{"class":40},[34,13595,13596,13598,13600,13603,13605,13607,13609,13611],{"class":36,"line":2307},[34,13597,7182],{"class":40},[34,13599,1837],{"class":87},[34,13601,13602],{"class":156}," \"ref = \"",[34,13604,2104],{"class":87},[34,13606,13587],{"class":40},[34,13608,1837],{"class":87},[34,13610,12122],{"class":40},[34,13612,13613],{"class":205},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[34,13615,13616,13618,13620,13622,13624,13626,13628,13630],{"class":36,"line":2328},[34,13617,7182],{"class":40},[34,13619,1837],{"class":87},[34,13621,13602],{"class":156},[34,13623,2104],{"class":87},[34,13625,13587],{"class":40},[34,13627,1837],{"class":87},[34,13629,12122],{"class":40},[34,13631,13632],{"class":205},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[34,13634,13635],{"class":36,"line":2333},[34,13636,3053],{"emptyLinePlaceholder":726},[34,13638,13639],{"class":36,"line":2347},[34,13640,13641],{"class":205},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[34,13643,13644,13646,13649,13651,13653],{"class":36,"line":2352},[34,13645,13584],{"class":87},[34,13647,13648],{"class":40}," ref2 ",[34,13650,153],{"class":87},[34,13652,6310],{"class":149},[34,13654,6289],{"class":40},[34,13656,13657,13659,13661,13664,13666,13668,13670,13672],{"class":36,"line":2381},[34,13658,7182],{"class":40},[34,13660,1837],{"class":87},[34,13662,13663],{"class":156}," \"ref2 = \"",[34,13665,2104],{"class":87},[34,13667,13648],{"class":40},[34,13669,1837],{"class":87},[34,13671,12122],{"class":40},[34,13673,13674],{"class":205}," \u002F\u002F20\n",[34,13676,13677,13679,13681,13683,13685,13687,13689,13691],{"class":36,"line":2386},[34,13678,7182],{"class":40},[34,13680,1837],{"class":87},[34,13682,13663],{"class":156},[34,13684,2104],{"class":87},[34,13686,13648],{"class":40},[34,13688,1837],{"class":87},[34,13690,12122],{"class":40},[34,13692,13674],{"class":205},[34,13694,13695],{"class":36,"line":2403},[34,13696,3053],{"emptyLinePlaceholder":726},[34,13698,13699,13701,13704,13706,13708,13710],{"class":36,"line":2408},[34,13700,6355],{"class":149},[34,13702,13703],{"class":40},"() ",[34,13705,153],{"class":87},[34,13707,3652],{"class":63},[34,13709,854],{"class":40},[34,13711,13712],{"class":205},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[34,13714,13715],{"class":36,"line":2413},[34,13716,3053],{"emptyLinePlaceholder":726},[34,13718,13719,13721,13723,13725,13727,13729,13731,13733],{"class":36,"line":2418},[34,13720,7182],{"class":40},[34,13722,1837],{"class":87},[34,13724,13663],{"class":156},[34,13726,2104],{"class":87},[34,13728,13648],{"class":40},[34,13730,1837],{"class":87},[34,13732,12122],{"class":40},[34,13734,13735],{"class":205}," \u002F\u002F1000\n",[34,13737,13738,13740,13742,13744,13746,13748,13750,13752],{"class":36,"line":2432},[34,13739,7182],{"class":40},[34,13741,1837],{"class":87},[34,13743,13663],{"class":156},[34,13745,2104],{"class":87},[34,13747,13648],{"class":40},[34,13749,1837],{"class":87},[34,13751,12122],{"class":40},[34,13753,13735],{"class":205},[34,13755,13756],{"class":36,"line":2437},[34,13757,3053],{"emptyLinePlaceholder":726},[34,13759,13760,13762,13764,13766],{"class":36,"line":3230},[34,13761,2956],{"class":149},[34,13763,801],{"class":40},[34,13765,2961],{"class":156},[34,13767,3372],{"class":40},[34,13769,13770],{"class":36,"line":3244},[34,13771,3053],{"emptyLinePlaceholder":726},[34,13773,13774,13776,13778],{"class":36,"line":3252},[34,13775,4743],{"class":87},[34,13777,4746],{"class":63},[34,13779,73],{"class":40},[34,13781,13782],{"class":36,"line":3257},[34,13783,241],{"class":40},[14,13785,13787],{"id":13786},"_65引用的本质","6.5引用的本质",[108,13789,13790,13791],{},"本质：",[111,13792,13793],{},"引用的本质在c++内部实现是一个指针常量.",[24,13795,13797],{"className":789,"code":13796,"language":791,"meta":29,"style":29},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[31,13798,13799,13804,13820,13834,13838,13847,13859,13864,13869,13880,13893,13897,13913,13930,13934,13942,13950],{"__ignoreMap":29},[34,13800,13801],{"class":36,"line":37},[34,13802,13803],{"class":205},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[34,13805,13806,13808,13810,13812,13814,13817],{"class":36,"line":51},[34,13807,6017],{"class":87},[34,13809,12038],{"class":149},[34,13811,801],{"class":40},[34,13813,13219],{"class":87},[34,13815,13816],{"class":5869}," ref",[34,13818,13819],{"class":40},"){\n",[34,13821,13822,13825,13827,13829,13831],{"class":36,"line":60},[34,13823,13824],{"class":40},"    ref ",[34,13826,153],{"class":87},[34,13828,6407],{"class":63},[34,13830,854],{"class":40},[34,13832,13833],{"class":205}," \u002F\u002F ref是引用，转换为*ref = 100\n",[34,13835,13836],{"class":36,"line":76},[34,13837,241],{"class":40},[34,13839,13840,13842,13844],{"class":36,"line":93},[34,13841,804],{"class":87},[34,13843,2626],{"class":149},[34,13845,13846],{"class":40},"(){\n",[34,13848,13849,13851,13853,13855,13857],{"class":36,"line":99},[34,13850,2638],{"class":87},[34,13852,11522],{"class":40},[34,13854,153],{"class":87},[34,13856,2691],{"class":63},[34,13858,73],{"class":40},[34,13860,13861],{"class":36,"line":353},[34,13862,13863],{"class":40},"    \n",[34,13865,13866],{"class":36,"line":359},[34,13867,13868],{"class":205},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[34,13870,13871,13873,13875,13877],{"class":36,"line":579},[34,13872,13584],{"class":87},[34,13874,13587],{"class":40},[34,13876,153],{"class":87},[34,13878,13879],{"class":40}," a; \n",[34,13881,13882,13884,13886,13888,13890],{"class":36,"line":589},[34,13883,13824],{"class":40},[34,13885,153],{"class":87},[34,13887,9603],{"class":63},[34,13889,854],{"class":40},[34,13891,13892],{"class":205}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[34,13894,13895],{"class":36,"line":601},[34,13896,13863],{"class":40},[34,13898,13899,13901,13903,13905,13907,13909,13911],{"class":36,"line":613},[34,13900,7182],{"class":40},[34,13902,1837],{"class":87},[34,13904,13323],{"class":156},[34,13906,2104],{"class":87},[34,13908,11522],{"class":40},[34,13910,1837],{"class":87},[34,13912,9493],{"class":40},[34,13914,13915,13917,13919,13922,13924,13926,13928],{"class":36,"line":618},[34,13916,7182],{"class":40},[34,13918,1837],{"class":87},[34,13920,13921],{"class":156}," \"ref:\"",[34,13923,2104],{"class":87},[34,13925,13587],{"class":40},[34,13927,1837],{"class":87},[34,13929,9493],{"class":40},[34,13931,13932],{"class":36,"line":628},[34,13933,13863],{"class":40},[34,13935,13936,13939],{"class":36,"line":640},[34,13937,13938],{"class":149},"    func",[34,13940,13941],{"class":40},"(a);\n",[34,13943,13944,13946,13948],{"class":36,"line":2301},[34,13945,4743],{"class":87},[34,13947,4746],{"class":63},[34,13949,73],{"class":40},[34,13951,13952],{"class":36,"line":2307},[34,13953,241],{"class":40},[108,13955,11985],{},[752,13957,13958,13961],{},[755,13959,13960],{},"引用的本质，就是一个指针常量",[755,13962,13963],{},"引用一旦初始化，就不可以发生改变",[14,13965,13967],{"id":13966},"_66常量引用","6.6常量引用",[108,13969,13970],{},"作用：常量引用主要用来修饰形参",[108,13972,13973,13974,13977],{},"在函数形参列表中，可以加",[111,13975,13976],{},"const修饰形参","，防止形参改变实参",[24,13979,13981],{"className":789,"code":13980,"language":791,"meta":29,"style":29},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,13982,13983,13988,13993,14012,14017,14030,14034,14038,14046,14050,14055,14060,14074,14078,14086,14098,14102,14107,14119,14126,14130,14140,14144,14152],{"__ignoreMap":29},[34,13984,13985],{"class":36,"line":37},[34,13986,13987],{"class":205},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[34,13989,13990],{"class":36,"line":51},[34,13991,13992],{"class":205},"\u002F\u002F加上const就不能修改实参的\n",[34,13994,13995,13997,14000,14002,14004,14007,14010],{"class":36,"line":60},[34,13996,6017],{"class":87},[34,13998,13999],{"class":149}," showValue",[34,14001,801],{"class":40},[34,14003,7445],{"class":87},[34,14005,14006],{"class":87}," int&",[34,14008,14009],{"class":5869}," v",[34,14011,13095],{"class":40},[34,14013,14014],{"class":36,"line":76},[34,14015,14016],{"class":205},"    \u002F\u002Fv += 100;\n",[34,14018,14019,14021,14023,14026,14028],{"class":36,"line":93},[34,14020,7182],{"class":40},[34,14022,1837],{"class":87},[34,14024,14025],{"class":40}," v ",[34,14027,1837],{"class":87},[34,14029,9493],{"class":40},[34,14031,14032],{"class":36,"line":99},[34,14033,241],{"class":40},[34,14035,14036],{"class":36,"line":353},[34,14037,3053],{"emptyLinePlaceholder":726},[34,14039,14040,14042,14044],{"class":36,"line":359},[34,14041,804],{"class":87},[34,14043,2626],{"class":149},[34,14045,11506],{"class":40},[34,14047,14048],{"class":36,"line":579},[34,14049,3053],{"emptyLinePlaceholder":726},[34,14051,14052],{"class":36,"line":589},[34,14053,14054],{"class":205},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[34,14056,14057],{"class":36,"line":601},[34,14058,14059],{"class":205},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[34,14061,14062,14064,14066,14068,14070,14072],{"class":36,"line":613},[34,14063,11874],{"class":87},[34,14065,14006],{"class":87},[34,14067,13587],{"class":40},[34,14069,153],{"class":87},[34,14071,2691],{"class":63},[34,14073,73],{"class":40},[34,14075,14076],{"class":36,"line":618},[34,14077,3053],{"emptyLinePlaceholder":726},[34,14079,14080,14083],{"class":36,"line":628},[34,14081,14082],{"class":205},"    \u002F\u002Fref = 100;",[34,14084,14085],{"class":205},"  \u002F\u002F加入const后不可以修改变量\n",[34,14087,14088,14090,14092,14094,14096],{"class":36,"line":640},[34,14089,7182],{"class":40},[34,14091,1837],{"class":87},[34,14093,13587],{"class":40},[34,14095,1837],{"class":87},[34,14097,9493],{"class":40},[34,14099,14100],{"class":36,"line":2301},[34,14101,3053],{"emptyLinePlaceholder":726},[34,14103,14104],{"class":36,"line":2307},[34,14105,14106],{"class":205},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[34,14108,14109,14111,14113,14115,14117],{"class":36,"line":2328},[34,14110,2638],{"class":87},[34,14112,11522],{"class":40},[34,14114,153],{"class":87},[34,14116,2691],{"class":63},[34,14118,73],{"class":40},[34,14120,14121,14124],{"class":36,"line":2333},[34,14122,14123],{"class":149},"    showValue",[34,14125,13941],{"class":40},[34,14127,14128],{"class":36,"line":2347},[34,14129,3053],{"emptyLinePlaceholder":726},[34,14131,14132,14134,14136,14138],{"class":36,"line":2352},[34,14133,2956],{"class":149},[34,14135,801],{"class":40},[34,14137,2961],{"class":156},[34,14139,3372],{"class":40},[34,14141,14142],{"class":36,"line":2381},[34,14143,3053],{"emptyLinePlaceholder":726},[34,14145,14146,14148,14150],{"class":36,"line":2386},[34,14147,4743],{"class":87},[34,14149,4746],{"class":63},[34,14151,73],{"class":40},[34,14153,14154],{"class":36,"line":2403},[34,14155,241],{"class":40},[45,14157,14158],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":14160},[14161,14162,14163,14164,14165,14166],{"id":12693,"depth":51,"text":12694},{"id":12872,"depth":51,"text":12873},{"id":13055,"depth":51,"text":13056},{"id":13459,"depth":51,"text":13460},{"id":13786,"depth":51,"text":13787},{"id":13966,"depth":51,"text":13967},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12685,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14173,"title":14174,"body":14175,"description":29,"extension":724,"meta":15256,"navigation":726,"path":15257,"seo":15258,"stem":15259,"__hash__":15260},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14176,"toc":15248},[14177,14180,14184,14187,14192,14424,14426,14437,14441,14444,14452,14556,14559,14563,14566,14570,14573,14578,14600,14606,14933,14936,14940,14948,15245],[10,14178,14174],{"id":14179},"_7函数高级部分",[14,14181,14183],{"id":14182},"_71函数默认参数","7.1函数默认参数",[108,14185,14186],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[108,14188,5834,14189],{},[31,14190,14191],{}," 返回值类型  函数名 （参数= 默认值）{}",[24,14193,14195],{"className":789,"code":14194,"language":791,"meta":29,"style":29},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,14196,14197,14232,14247,14251,14255,14260,14265,14294,14314,14324,14328,14332,14340,14344,14372,14394,14398,14408,14412,14420],{"__ignoreMap":29},[34,14198,14199,14201,14203,14205,14207,14209,14211,14213,14215,14218,14220,14222,14224,14226,14228,14230],{"class":36,"line":37},[34,14200,804],{"class":87},[34,14202,12038],{"class":149},[34,14204,801],{"class":40},[34,14206,804],{"class":87},[34,14208,2058],{"class":5869},[34,14210,13088],{"class":40},[34,14212,804],{"class":87},[34,14214,3486],{"class":5869},[34,14216,14217],{"class":87}," =",[34,14219,2691],{"class":63},[34,14221,13088],{"class":40},[34,14223,804],{"class":87},[34,14225,3502],{"class":5869},[34,14227,14217],{"class":87},[34,14229,2691],{"class":63},[34,14231,13095],{"class":40},[34,14233,14234,14236,14238,14240,14242,14244],{"class":36,"line":51},[34,14235,4743],{"class":87},[34,14237,11522],{"class":40},[34,14239,1276],{"class":87},[34,14241,11535],{"class":40},[34,14243,1276],{"class":87},[34,14245,14246],{"class":40}," c;\n",[34,14248,14249],{"class":36,"line":60},[34,14250,241],{"class":40},[34,14252,14253],{"class":36,"line":76},[34,14254,3053],{"emptyLinePlaceholder":726},[34,14256,14257],{"class":36,"line":93},[34,14258,14259],{"class":205},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[34,14261,14262],{"class":36,"line":99},[34,14263,14264],{"class":205},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[34,14266,14267,14269,14272,14274,14276,14278,14280,14282,14284,14286,14288,14290,14292],{"class":36,"line":353},[34,14268,804],{"class":87},[34,14270,14271],{"class":149}," func2",[34,14273,801],{"class":40},[34,14275,804],{"class":87},[34,14277,2058],{"class":5869},[34,14279,14217],{"class":87},[34,14281,2691],{"class":63},[34,14283,13088],{"class":40},[34,14285,804],{"class":87},[34,14287,3486],{"class":5869},[34,14289,14217],{"class":87},[34,14291,2691],{"class":63},[34,14293,3372],{"class":40},[34,14295,14296,14298,14300,14302,14304,14306,14308,14310,14312],{"class":36,"line":359},[34,14297,804],{"class":87},[34,14299,14271],{"class":149},[34,14301,801],{"class":40},[34,14303,804],{"class":87},[34,14305,2058],{"class":5869},[34,14307,13088],{"class":40},[34,14309,804],{"class":87},[34,14311,3486],{"class":5869},[34,14313,13095],{"class":40},[34,14315,14316,14318,14320,14322],{"class":36,"line":579},[34,14317,4743],{"class":87},[34,14319,11522],{"class":40},[34,14321,1276],{"class":87},[34,14323,13116],{"class":40},[34,14325,14326],{"class":36,"line":589},[34,14327,241],{"class":40},[34,14329,14330],{"class":36,"line":601},[34,14331,3053],{"emptyLinePlaceholder":726},[34,14333,14334,14336,14338],{"class":36,"line":613},[34,14335,804],{"class":87},[34,14337,2626],{"class":149},[34,14339,11506],{"class":40},[34,14341,14342],{"class":36,"line":618},[34,14343,3053],{"emptyLinePlaceholder":726},[34,14345,14346,14348,14350,14353,14355,14357,14359,14361,14363,14365,14368,14370],{"class":36,"line":628},[34,14347,7182],{"class":40},[34,14349,1837],{"class":87},[34,14351,14352],{"class":156}," \"ret = \"",[34,14354,2104],{"class":87},[34,14356,12038],{"class":149},[34,14358,801],{"class":40},[34,14360,1495],{"class":63},[34,14362,13088],{"class":40},[34,14364,1495],{"class":63},[34,14366,14367],{"class":40},") ",[34,14369,1837],{"class":87},[34,14371,9493],{"class":40},[34,14373,14374,14376,14378,14380,14382,14384,14386,14388,14390,14392],{"class":36,"line":640},[34,14375,7182],{"class":40},[34,14377,1837],{"class":87},[34,14379,14352],{"class":156},[34,14381,2104],{"class":87},[34,14383,12038],{"class":149},[34,14385,801],{"class":40},[34,14387,1106],{"class":63},[34,14389,14367],{"class":40},[34,14391,1837],{"class":87},[34,14393,9493],{"class":40},[34,14395,14396],{"class":36,"line":2301},[34,14397,3053],{"emptyLinePlaceholder":726},[34,14399,14400,14402,14404,14406],{"class":36,"line":2307},[34,14401,2956],{"class":149},[34,14403,801],{"class":40},[34,14405,2961],{"class":156},[34,14407,3372],{"class":40},[34,14409,14410],{"class":36,"line":2328},[34,14411,3053],{"emptyLinePlaceholder":726},[34,14413,14414,14416,14418],{"class":36,"line":2333},[34,14415,4743],{"class":87},[34,14417,4746],{"class":63},[34,14419,73],{"class":40},[34,14421,14422],{"class":36,"line":2347},[34,14423,241],{"class":40},[108,14425,11985],{},[752,14427,14428,14431,14434],{},[755,14429,14430],{},"我传就用我；没传就用你",[755,14432,14433],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[755,14435,14436],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14438,14440],{"id":14439},"_72函数的占位参数","7.2函数的占位参数",[108,14442,14443],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[108,14445,14446,14448,14449],{},[111,14447,5834],{}," ",[31,14450,14451],{},"返回值类型 函数名 (数据类型){}",[24,14453,14455],{"className":789,"code":14454,"language":791,"meta":29,"style":29},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,14456,14457,14462,14480,14493,14497,14505,14509,14526,14530,14540,14544,14552],{"__ignoreMap":29},[34,14458,14459],{"class":36,"line":37},[34,14460,14461],{"class":205},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[34,14463,14464,14466,14468,14470,14472,14474,14476,14478],{"class":36,"line":51},[34,14465,6017],{"class":87},[34,14467,12038],{"class":149},[34,14469,801],{"class":40},[34,14471,804],{"class":87},[34,14473,2058],{"class":5869},[34,14475,13088],{"class":40},[34,14477,804],{"class":87},[34,14479,13095],{"class":40},[34,14481,14482,14484,14486,14489,14491],{"class":36,"line":60},[34,14483,7182],{"class":40},[34,14485,1837],{"class":87},[34,14487,14488],{"class":156}," \"this is func\"",[34,14490,2104],{"class":87},[34,14492,9493],{"class":40},[34,14494,14495],{"class":36,"line":76},[34,14496,241],{"class":40},[34,14498,14499,14501,14503],{"class":36,"line":93},[34,14500,804],{"class":87},[34,14502,2626],{"class":149},[34,14504,11506],{"class":40},[34,14506,14507],{"class":36,"line":99},[34,14508,3053],{"emptyLinePlaceholder":726},[34,14510,14511,14513,14515,14517,14519,14521,14523],{"class":36,"line":353},[34,14512,13938],{"class":149},[34,14514,801],{"class":40},[34,14516,1241],{"class":63},[34,14518,1173],{"class":40},[34,14520,1241],{"class":63},[34,14522,6619],{"class":40},[34,14524,14525],{"class":205}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[34,14527,14528],{"class":36,"line":359},[34,14529,3053],{"emptyLinePlaceholder":726},[34,14531,14532,14534,14536,14538],{"class":36,"line":579},[34,14533,2956],{"class":149},[34,14535,801],{"class":40},[34,14537,2961],{"class":156},[34,14539,3372],{"class":40},[34,14541,14542],{"class":36,"line":589},[34,14543,3053],{"emptyLinePlaceholder":726},[34,14545,14546,14548,14550],{"class":36,"line":601},[34,14547,4743],{"class":87},[34,14549,4746],{"class":63},[34,14551,73],{"class":40},[34,14553,14554],{"class":36,"line":613},[34,14555,241],{"class":40},[108,14557,14558],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14560,14562],{"id":14561},"_73函数重载","7.3函数重载",[108,14564,14565],{},"意思是函数名是可以相同的",[19,14567,14569],{"id":14568},"_731基本语法","7.3.1基本语法",[108,14571,14572],{},"作用：函数名可以相同，提高复用性",[108,14574,14575],{},[111,14576,14577],{},"函数重载满足条件：",[1800,14579,14580,14583,14586],{},[755,14581,14582],{},"同一个作用域下",[755,14584,14585],{},"函数名称相同",[755,14587,14588,14589,14592,14593,14596,14597],{},"函数参数",[111,14590,14591],{},"类型不同","  或者 ",[111,14594,14595],{},"个数不同"," 或者 ",[111,14598,14599],{},"顺序不同",[108,14601,14602,14605],{},[111,14603,14604],{},"注意:","  函数的返回值不可以作为函数重载的条件",[24,14607,14609],{"className":10594,"code":14608,"language":10596,"meta":29,"style":29},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[31,14610,14611,14616,14624,14628,14641,14645,14659,14663,14676,14680,14695,14699,14712,14716,14737,14741,14754,14758,14778,14782,14795,14799,14803,14808,14813,14818,14823,14828,14832,14836,14844,14848,14854,14864,14874,14888,14903,14907,14917,14921,14929],{"__ignoreMap":29},[34,14612,14613],{"class":36,"line":37},[34,14614,14615],{"class":205},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[34,14617,14618,14620,14622],{"class":36,"line":51},[34,14619,6017],{"class":87},[34,14621,12038],{"class":149},[34,14623,2629],{"class":40},[34,14625,14626],{"class":36,"line":60},[34,14627,2206],{"class":40},[34,14629,14630,14632,14634,14637,14639],{"class":36,"line":76},[34,14631,7182],{"class":40},[34,14633,1837],{"class":87},[34,14635,14636],{"class":156}," \"func 的调用！\"",[34,14638,2104],{"class":87},[34,14640,9493],{"class":40},[34,14642,14643],{"class":36,"line":93},[34,14644,241],{"class":40},[34,14646,14647,14649,14651,14653,14655,14657],{"class":36,"line":99},[34,14648,6017],{"class":87},[34,14650,12038],{"class":149},[34,14652,801],{"class":40},[34,14654,804],{"class":87},[34,14656,2058],{"class":5869},[34,14658,807],{"class":40},[34,14660,14661],{"class":36,"line":353},[34,14662,2206],{"class":40},[34,14664,14665,14667,14669,14672,14674],{"class":36,"line":359},[34,14666,7182],{"class":40},[34,14668,1837],{"class":87},[34,14670,14671],{"class":156}," \"func (int a) 的调用！\"",[34,14673,2104],{"class":87},[34,14675,9493],{"class":40},[34,14677,14678],{"class":36,"line":579},[34,14679,241],{"class":40},[34,14681,14682,14684,14686,14688,14691,14693],{"class":36,"line":589},[34,14683,6017],{"class":87},[34,14685,12038],{"class":149},[34,14687,801],{"class":40},[34,14689,14690],{"class":87},"double",[34,14692,2058],{"class":5869},[34,14694,807],{"class":40},[34,14696,14697],{"class":36,"line":601},[34,14698,2206],{"class":40},[34,14700,14701,14703,14705,14708,14710],{"class":36,"line":613},[34,14702,7182],{"class":40},[34,14704,1837],{"class":87},[34,14706,14707],{"class":156}," \"func (double a)的调用！\"",[34,14709,2104],{"class":87},[34,14711,9493],{"class":40},[34,14713,14714],{"class":36,"line":618},[34,14715,241],{"class":40},[34,14717,14718,14720,14722,14724,14726,14728,14731,14733,14735],{"class":36,"line":628},[34,14719,6017],{"class":87},[34,14721,12038],{"class":149},[34,14723,801],{"class":40},[34,14725,804],{"class":87},[34,14727,2058],{"class":5869},[34,14729,14730],{"class":40}," ,",[34,14732,14690],{"class":87},[34,14734,3486],{"class":5869},[34,14736,807],{"class":40},[34,14738,14739],{"class":36,"line":640},[34,14740,2206],{"class":40},[34,14742,14743,14745,14747,14750,14752],{"class":36,"line":2301},[34,14744,7182],{"class":40},[34,14746,1837],{"class":87},[34,14748,14749],{"class":156}," \"func (int a ,double b) 的调用！\"",[34,14751,2104],{"class":87},[34,14753,9493],{"class":40},[34,14755,14756],{"class":36,"line":2307},[34,14757,241],{"class":40},[34,14759,14760,14762,14764,14766,14768,14770,14772,14774,14776],{"class":36,"line":2328},[34,14761,6017],{"class":87},[34,14763,12038],{"class":149},[34,14765,801],{"class":40},[34,14767,14690],{"class":87},[34,14769,2058],{"class":5869},[34,14771,14730],{"class":40},[34,14773,804],{"class":87},[34,14775,3486],{"class":5869},[34,14777,807],{"class":40},[34,14779,14780],{"class":36,"line":2333},[34,14781,2206],{"class":40},[34,14783,14784,14786,14788,14791,14793],{"class":36,"line":2347},[34,14785,7182],{"class":40},[34,14787,1837],{"class":87},[34,14789,14790],{"class":156}," \"func (double a ,int b)的调用！\"",[34,14792,2104],{"class":87},[34,14794,9493],{"class":40},[34,14796,14797],{"class":36,"line":2352},[34,14798,241],{"class":40},[34,14800,14801],{"class":36,"line":2381},[34,14802,3053],{"emptyLinePlaceholder":726},[34,14804,14805],{"class":36,"line":2386},[34,14806,14807],{"class":205},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[34,14809,14810],{"class":36,"line":2403},[34,14811,14812],{"class":205},"\u002F\u002Fint func(double a, int b)\n",[34,14814,14815],{"class":36,"line":2408},[34,14816,14817],{"class":205},"\u002F\u002F{\n",[34,14819,14820],{"class":36,"line":2413},[34,14821,14822],{"class":205},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[34,14824,14825],{"class":36,"line":2418},[34,14826,14827],{"class":205},"\u002F\u002F}\n",[34,14829,14830],{"class":36,"line":2432},[34,14831,3053],{"emptyLinePlaceholder":726},[34,14833,14834],{"class":36,"line":2437},[34,14835,3053],{"emptyLinePlaceholder":726},[34,14837,14838,14840,14842],{"class":36,"line":3230},[34,14839,804],{"class":87},[34,14841,2626],{"class":149},[34,14843,11506],{"class":40},[34,14845,14846],{"class":36,"line":3244},[34,14847,3053],{"emptyLinePlaceholder":726},[34,14849,14850,14852],{"class":36,"line":3252},[34,14851,13938],{"class":149},[34,14853,6289],{"class":40},[34,14855,14856,14858,14860,14862],{"class":36,"line":3257},[34,14857,13938],{"class":149},[34,14859,801],{"class":40},[34,14861,1241],{"class":63},[34,14863,3372],{"class":40},[34,14865,14866,14868,14870,14872],{"class":36,"line":3263},[34,14867,13938],{"class":149},[34,14869,801],{"class":40},[34,14871,848],{"class":63},[34,14873,3372],{"class":40},[34,14875,14876,14878,14880,14882,14884,14886],{"class":36,"line":3269},[34,14877,13938],{"class":149},[34,14879,801],{"class":40},[34,14881,1241],{"class":63},[34,14883,1173],{"class":40},[34,14885,848],{"class":63},[34,14887,3372],{"class":40},[34,14889,14890,14892,14894,14896,14899,14901],{"class":36,"line":3274},[34,14891,13938],{"class":149},[34,14893,801],{"class":40},[34,14895,848],{"class":63},[34,14897,14898],{"class":40}," , ",[34,14900,1241],{"class":63},[34,14902,3372],{"class":40},[34,14904,14905],{"class":36,"line":8601},[34,14906,13863],{"class":40},[34,14908,14909,14911,14913,14915],{"class":36,"line":8625},[34,14910,2956],{"class":149},[34,14912,801],{"class":40},[34,14914,2961],{"class":156},[34,14916,3372],{"class":40},[34,14918,14919],{"class":36,"line":8630},[34,14920,3053],{"emptyLinePlaceholder":726},[34,14922,14923,14925,14927],{"class":36,"line":8636},[34,14924,4743],{"class":87},[34,14926,4746],{"class":63},[34,14928,73],{"class":40},[34,14930,14931],{"class":36,"line":8663},[34,14932,241],{"class":40},[108,14934,14935],{},"重点：函数返回值不可以作为函数重载条件！",[19,14937,14939],{"id":14938},"_732注意事项","7.3.2注意事项",[1800,14941,14942,14945],{},[755,14943,14944],{},"引用作为重载条件!!!",[755,14946,14947],{},"函数重载碰到函数默认参数",[24,14949,14951],{"className":789,"code":14950,"language":791,"meta":29,"style":29},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,14952,14953,14958,14963,14967,14983,14987,15000,15004,15008,15026,15030,15043,15047,15051,15055,15060,15064,15088,15092,15105,15109,15113,15127,15131,15144,15148,15152,15160,15164,15176,15186,15199,15203,15207,15215,15219,15229,15233,15241],{"__ignoreMap":29},[34,14954,14955],{"class":36,"line":37},[34,14956,14957],{"class":205},"\u002F\u002F函数重载注意事项\n",[34,14959,14960],{"class":36,"line":51},[34,14961,14962],{"class":205},"\u002F\u002F1、引用作为重载条件\n",[34,14964,14965],{"class":36,"line":60},[34,14966,3053],{"emptyLinePlaceholder":726},[34,14968,14969,14971,14973,14975,14977,14979,14981],{"class":36,"line":76},[34,14970,6017],{"class":87},[34,14972,12038],{"class":149},[34,14974,801],{"class":40},[34,14976,804],{"class":87},[34,14978,11237],{"class":87},[34,14980,520],{"class":5869},[34,14982,807],{"class":40},[34,14984,14985],{"class":36,"line":93},[34,14986,2206],{"class":40},[34,14988,14989,14991,14993,14996,14998],{"class":36,"line":99},[34,14990,7182],{"class":40},[34,14992,1837],{"class":87},[34,14994,14995],{"class":156}," \"func (int &a) 调用 \"",[34,14997,2104],{"class":87},[34,14999,9493],{"class":40},[34,15001,15002],{"class":36,"line":353},[34,15003,241],{"class":40},[34,15005,15006],{"class":36,"line":359},[34,15007,3053],{"emptyLinePlaceholder":726},[34,15009,15010,15012,15014,15016,15018,15020,15022,15024],{"class":36,"line":579},[34,15011,6017],{"class":87},[34,15013,12038],{"class":149},[34,15015,801],{"class":40},[34,15017,7445],{"class":87},[34,15019,3035],{"class":87},[34,15021,11237],{"class":87},[34,15023,520],{"class":5869},[34,15025,807],{"class":40},[34,15027,15028],{"class":36,"line":589},[34,15029,2206],{"class":40},[34,15031,15032,15034,15036,15039,15041],{"class":36,"line":601},[34,15033,7182],{"class":40},[34,15035,1837],{"class":87},[34,15037,15038],{"class":156}," \"func (const int &a) 调用 \"",[34,15040,2104],{"class":87},[34,15042,9493],{"class":40},[34,15044,15045],{"class":36,"line":613},[34,15046,241],{"class":40},[34,15048,15049],{"class":36,"line":618},[34,15050,3053],{"emptyLinePlaceholder":726},[34,15052,15053],{"class":36,"line":628},[34,15054,3053],{"emptyLinePlaceholder":726},[34,15056,15057],{"class":36,"line":640},[34,15058,15059],{"class":205},"\u002F\u002F2、函数重载碰到函数默认参数\n",[34,15061,15062],{"class":36,"line":2301},[34,15063,3053],{"emptyLinePlaceholder":726},[34,15065,15066,15068,15070,15072,15074,15076,15078,15080,15082,15084,15086],{"class":36,"line":2307},[34,15067,6017],{"class":87},[34,15069,14271],{"class":149},[34,15071,801],{"class":40},[34,15073,804],{"class":87},[34,15075,2058],{"class":5869},[34,15077,13088],{"class":40},[34,15079,804],{"class":87},[34,15081,3486],{"class":5869},[34,15083,14217],{"class":87},[34,15085,2691],{"class":63},[34,15087,807],{"class":40},[34,15089,15090],{"class":36,"line":2328},[34,15091,2206],{"class":40},[34,15093,15094,15096,15098,15101,15103],{"class":36,"line":2333},[34,15095,7182],{"class":40},[34,15097,1837],{"class":87},[34,15099,15100],{"class":156}," \"func2(int a, int b = 10) 调用\"",[34,15102,2104],{"class":87},[34,15104,9493],{"class":40},[34,15106,15107],{"class":36,"line":2347},[34,15108,241],{"class":40},[34,15110,15111],{"class":36,"line":2352},[34,15112,3053],{"emptyLinePlaceholder":726},[34,15114,15115,15117,15119,15121,15123,15125],{"class":36,"line":2381},[34,15116,6017],{"class":87},[34,15118,14271],{"class":149},[34,15120,801],{"class":40},[34,15122,804],{"class":87},[34,15124,2058],{"class":5869},[34,15126,807],{"class":40},[34,15128,15129],{"class":36,"line":2386},[34,15130,2206],{"class":40},[34,15132,15133,15135,15137,15140,15142],{"class":36,"line":2403},[34,15134,7182],{"class":40},[34,15136,1837],{"class":87},[34,15138,15139],{"class":156}," \"func2(int a) 调用\"",[34,15141,2104],{"class":87},[34,15143,9493],{"class":40},[34,15145,15146],{"class":36,"line":2408},[34,15147,241],{"class":40},[34,15149,15150],{"class":36,"line":2413},[34,15151,3053],{"emptyLinePlaceholder":726},[34,15153,15154,15156,15158],{"class":36,"line":2418},[34,15155,804],{"class":87},[34,15157,2626],{"class":149},[34,15159,11506],{"class":40},[34,15161,15162],{"class":36,"line":2432},[34,15163,13863],{"class":40},[34,15165,15166,15168,15170,15172,15174],{"class":36,"line":2437},[34,15167,2638],{"class":87},[34,15169,11522],{"class":40},[34,15171,153],{"class":87},[34,15173,2691],{"class":63},[34,15175,73],{"class":40},[34,15177,15178,15180,15183],{"class":36,"line":3230},[34,15179,13938],{"class":149},[34,15181,15182],{"class":40},"(a);",[34,15184,15185],{"class":205}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[34,15187,15188,15190,15192,15194,15196],{"class":36,"line":3244},[34,15189,13938],{"class":149},[34,15191,801],{"class":40},[34,15193,1241],{"class":63},[34,15195,6619],{"class":40},[34,15197,15198],{"class":205},"\u002F\u002F调用有const   10是个常量\n",[34,15200,15201],{"class":36,"line":3252},[34,15202,3053],{"emptyLinePlaceholder":726},[34,15204,15205],{"class":36,"line":3257},[34,15206,3053],{"emptyLinePlaceholder":726},[34,15208,15209,15212],{"class":36,"line":3263},[34,15210,15211],{"class":205},"    \u002F\u002Ffunc2(10);",[34,15213,15214],{"class":205}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[34,15216,15217],{"class":36,"line":3269},[34,15218,3053],{"emptyLinePlaceholder":726},[34,15220,15221,15223,15225,15227],{"class":36,"line":3274},[34,15222,2956],{"class":149},[34,15224,801],{"class":40},[34,15226,2961],{"class":156},[34,15228,3372],{"class":40},[34,15230,15231],{"class":36,"line":8601},[34,15232,3053],{"emptyLinePlaceholder":726},[34,15234,15235,15237,15239],{"class":36,"line":8625},[34,15236,4743],{"class":87},[34,15238,4746],{"class":63},[34,15240,73],{"class":40},[34,15242,15243],{"class":36,"line":8630},[34,15244,241],{"class":40},[45,15246,15247],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":15249},[15250,15251,15252],{"id":14182,"depth":51,"text":14183},{"id":14439,"depth":51,"text":14440},{"id":14561,"depth":51,"text":14562,"children":15253},[15254,15255],{"id":14568,"depth":60,"text":14569},{"id":14938,"depth":60,"text":14939},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14174,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15262,"title":15263,"body":15264,"description":24017,"extension":724,"meta":24018,"navigation":726,"path":24019,"seo":24020,"stem":24021,"__hash__":24022},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15265,"toc":23998},[15266,15269,15275,15282,15287,15290,15293,15296,15300,15304,15307,15310,15318,15323,15326,15333,15338,15497,15500,15753,15756,15759,15762,15767,15770,15773,15784,15789,16025,16029,16039,16042,16050,16197,16201,16204,16207,16211,16655,16659,16667,16675,17587,17594,17599,18227,18230,18233,18236,18355,18358,18445,18448,18574,18577,18671,18674,19027,19031,19039,19043,19050,19053,19056,19067,19073,19078,19090,19098,19118,19126,19143,19329,19332,19336,19339,19342,19345,19348,19351,19354,19357,19817,19823,19827,19830,19841,20428,20431,20920,20924,20927,20930,20933,20936,20939,20947,21343,21347,21350,21353,21800,21803,21806,21811,21814,21819,21822,21826,21829,21831,21837,21840,22146,22156,22197,22201,22204,22206,22239,22242,22549,22551,22566,22569,22592,22601,22607,22610,22614,22617,22620,22625,22636,22641,22649,22654,22784,22787,22790,22965,22970,23182,23186,23189,23303,23308,23547,23551,23555,23558,23561,23566,23671,23674,23677,23680,23684,23795,23798,23801,23806,23858,23861,23864,23869,23915,23918,23923,23991,23993,23996],[10,15267,15263],{"id":15268},"_8类和对象",[108,15270,15271,15272],{},"C++面向对象的三大特性为",[111,15273,15274],{},"封装、继承、多态",[108,15276,15277,15278,15281],{},"C++认为",[111,15279,15280],{},"万事万物都皆为对象","，对象上有其属性和行为",[108,15283,15284],{},[111,15285,15286],{},"例如：",[108,15288,15289],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[108,15291,15292],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[108,15294,15295],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15297,15299],{"id":15298},"_81封装","8.1封装",[19,15301,15303],{"id":15302},"_811封装的意义","8.1.1封装的意义",[108,15305,15306],{},"封装是C++面向对象三大特性之一",[108,15308,15309],{},"封装的意义：",[1800,15311,15312,15315],{},[755,15313,15314],{},"将属性和行为作为一个整体，表现生活中的事物",[755,15316,15317],{},"将属性和行为加以权限控制",[108,15319,15320],{},[111,15321,15322],{},"封装意义一：",[108,15324,15325],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[108,15327,15328,14448,15330],{},[111,15329,5834],{},[31,15331,15332],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[752,15334,15335],{},[755,15336,15337],{},"**示例1：**设计一个圆类，求圆的周长",[24,15339,15341],{"className":789,"code":15340,"language":791,"meta":29,"style":29},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[31,15342,15343,15351,15355,15360,15365,15370,15375,15382,15387,15397,15401,15419,15423,15427,15435,15439,15444,15449,15454,15459,15470,15493],{"__ignoreMap":29},[34,15344,15345,15348],{"class":36,"line":37},[34,15346,15347],{"class":87},"class",[34,15349,15350],{"class":149}," Circle\n",[34,15352,15353],{"class":36,"line":51},[34,15354,2206],{"class":40},[34,15356,15357],{"class":36,"line":60},[34,15358,15359],{"class":205},"    \u002F\u002F访问权限\n",[34,15361,15362],{"class":36,"line":76},[34,15363,15364],{"class":205},"    \u002F\u002F公共权限\n",[34,15366,15367],{"class":36,"line":93},[34,15368,15369],{"class":87},"public:\n",[34,15371,15372],{"class":36,"line":99},[34,15373,15374],{"class":205},"    \u002F\u002F属性\n",[34,15376,15377,15379],{"class":36,"line":353},[34,15378,2638],{"class":87},[34,15380,15381],{"class":40}," m_r;\n",[34,15383,15384],{"class":36,"line":359},[34,15385,15386],{"class":205},"    \u002F\u002F行为\n",[34,15388,15389,15392,15395],{"class":36,"line":579},[34,15390,15391],{"class":87},"    double",[34,15393,15394],{"class":149}," calculateZC",[34,15396,2629],{"class":40},[34,15398,15399],{"class":36,"line":589},[34,15400,2683],{"class":40},[34,15402,15403,15406,15409,15411,15414,15416],{"class":36,"line":601},[34,15404,15405],{"class":87},"        return",[34,15407,15408],{"class":63}," 2",[34,15410,1250],{"class":87},[34,15412,15413],{"class":40},"PI",[34,15415,1250],{"class":87},[34,15417,15418],{"class":40},"m_r;\n",[34,15420,15421],{"class":36,"line":613},[34,15422,2840],{"class":40},[34,15424,15425],{"class":36,"line":618},[34,15426,4648],{"class":40},[34,15428,15429,15431,15433],{"class":36,"line":628},[34,15430,804],{"class":87},[34,15432,2626],{"class":149},[34,15434,2629],{"class":40},[34,15436,15437],{"class":36,"line":640},[34,15438,2206],{"class":40},[34,15440,15441],{"class":36,"line":2301},[34,15442,15443],{"class":205},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[34,15445,15446],{"class":36,"line":2307},[34,15447,15448],{"class":205},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[34,15450,15451],{"class":36,"line":2328},[34,15452,15453],{"class":40},"    Circle c1;\n",[34,15455,15456],{"class":36,"line":2333},[34,15457,15458],{"class":205},"    \u002F\u002F给圆对象 的属性进行赋值\n",[34,15460,15461,15464,15466,15468],{"class":36,"line":2347},[34,15462,15463],{"class":40},"    c1.m_r",[34,15465,153],{"class":87},[34,15467,1241],{"class":63},[34,15469,73],{"class":40},[34,15471,15472,15474,15476,15479,15481,15484,15487,15489,15491],{"class":36,"line":2352},[34,15473,2211],{"class":40},[34,15475,1837],{"class":87},[34,15477,15478],{"class":156},"\"圆的周长\"",[34,15480,1837],{"class":87},[34,15482,15483],{"class":40},"c1.",[34,15485,15486],{"class":149},"calculateZC",[34,15488,3080],{"class":40},[34,15490,1837],{"class":87},[34,15492,1859],{"class":40},[34,15494,15495],{"class":36,"line":2381},[34,15496,241],{"class":40},[108,15498,15499],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[24,15501,15503],{"className":789,"code":15502,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[31,15504,15505,15511,15521,15527,15533,15537,15541,15546,15553,15558,15576,15580,15590,15594,15599,15615,15619,15629,15633,15638,15646,15650,15682,15686,15690,15698,15702,15707,15712,15726,15740,15749],{"__ignoreMap":29},[34,15506,15507,15509],{"class":36,"line":37},[34,15508,2603],{"class":87},[34,15510,2606],{"class":156},[34,15512,15513,15515,15517,15519],{"class":36,"line":51},[34,15514,2611],{"class":87},[34,15516,2614],{"class":87},[34,15518,2617],{"class":149},[34,15520,73],{"class":40},[34,15522,15523,15525],{"class":36,"line":60},[34,15524,2603],{"class":87},[34,15526,8402],{"class":156},[34,15528,15529,15531],{"class":36,"line":76},[34,15530,15347],{"class":87},[34,15532,8415],{"class":149},[34,15534,15535],{"class":36,"line":93},[34,15536,2206],{"class":40},[34,15538,15539],{"class":36,"line":99},[34,15540,15369],{"class":87},[34,15542,15543],{"class":36,"line":353},[34,15544,15545],{"class":40},"    string m_name;\n",[34,15547,15548,15550],{"class":36,"line":359},[34,15549,2638],{"class":87},[34,15551,15552],{"class":40}," m_id;\n",[34,15554,15555],{"class":36,"line":579},[34,15556,15557],{"class":205},"    \u002F\u002F赋值姓名\n",[34,15559,15560,15563,15566,15568,15571,15574],{"class":36,"line":589},[34,15561,15562],{"class":87},"    void",[34,15564,15565],{"class":149}," setName",[34,15567,801],{"class":40},[34,15569,15570],{"class":149},"string",[34,15572,15573],{"class":5869}," name",[34,15575,807],{"class":40},[34,15577,15578],{"class":36,"line":601},[34,15579,2683],{"class":40},[34,15581,15582,15585,15587],{"class":36,"line":613},[34,15583,15584],{"class":40},"        m_name",[34,15586,153],{"class":87},[34,15588,15589],{"class":40},"name;\n",[34,15591,15592],{"class":36,"line":618},[34,15593,2840],{"class":40},[34,15595,15596],{"class":36,"line":628},[34,15597,15598],{"class":205},"    \u002F\u002F赋值学号\n",[34,15600,15601,15603,15606,15608,15610,15613],{"class":36,"line":640},[34,15602,15562],{"class":87},[34,15604,15605],{"class":149}," setId",[34,15607,801],{"class":40},[34,15609,804],{"class":87},[34,15611,15612],{"class":5869}," id",[34,15614,807],{"class":40},[34,15616,15617],{"class":36,"line":2301},[34,15618,2683],{"class":40},[34,15620,15621,15624,15626],{"class":36,"line":2307},[34,15622,15623],{"class":40},"        m_id",[34,15625,153],{"class":87},[34,15627,15628],{"class":40},"id;\n",[34,15630,15631],{"class":36,"line":2328},[34,15632,2840],{"class":40},[34,15634,15635],{"class":36,"line":2333},[34,15636,15637],{"class":205},"    \u002F\u002F打印学生信息\n",[34,15639,15640,15642,15644],{"class":36,"line":2347},[34,15641,15562],{"class":87},[34,15643,10268],{"class":149},[34,15645,2629],{"class":40},[34,15647,15648],{"class":36,"line":2352},[34,15649,2683],{"class":40},[34,15651,15652,15654,15656,15659,15661,15664,15666,15668,15670,15673,15675,15678,15680],{"class":36,"line":2381},[34,15653,4104],{"class":40},[34,15655,1837],{"class":87},[34,15657,15658],{"class":156},"\"姓名：\"",[34,15660,1837],{"class":87},[34,15662,15663],{"class":40},"m_name",[34,15665,1837],{"class":87},[34,15667,5012],{"class":156},[34,15669,1837],{"class":87},[34,15671,15672],{"class":156},"\"学号：\"",[34,15674,1837],{"class":87},[34,15676,15677],{"class":40},"m_id",[34,15679,1837],{"class":87},[34,15681,1859],{"class":40},[34,15683,15684],{"class":36,"line":2386},[34,15685,2840],{"class":40},[34,15687,15688],{"class":36,"line":2403},[34,15689,4648],{"class":40},[34,15691,15692,15694,15696],{"class":36,"line":2408},[34,15693,804],{"class":87},[34,15695,2626],{"class":149},[34,15697,2629],{"class":40},[34,15699,15700],{"class":36,"line":2413},[34,15701,2206],{"class":40},[34,15703,15704],{"class":36,"line":2418},[34,15705,15706],{"class":205},"    \u002F\u002F实例化\n",[34,15708,15709],{"class":36,"line":2432},[34,15710,15711],{"class":40},"    Student s1;\n",[34,15713,15714,15717,15720,15722,15724],{"class":36,"line":2437},[34,15715,15716],{"class":40},"    s1.",[34,15718,15719],{"class":149},"setName",[34,15721,801],{"class":40},[34,15723,8569],{"class":156},[34,15725,3372],{"class":40},[34,15727,15728,15730,15733,15735,15738],{"class":36,"line":3230},[34,15729,15716],{"class":40},[34,15731,15732],{"class":149},"setId",[34,15734,801],{"class":40},[34,15736,15737],{"class":63},"123456",[34,15739,3372],{"class":40},[34,15741,15742,15744,15747],{"class":36,"line":3244},[34,15743,15716],{"class":40},[34,15745,15746],{"class":149},"printInfo",[34,15748,6289],{"class":40},[34,15750,15751],{"class":36,"line":3252},[34,15752,241],{"class":40},[108,15754,15755],{},"类中的属性和行为统称为成员",[108,15757,15758],{},"属性：成员属性(成员变量)",[108,15760,15761],{},"方法：成员函数(成员方法)",[108,15763,15764],{},[111,15765,15766],{},"封装意义二：",[108,15768,15769],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[108,15771,15772],{},"访问权限有三种：",[752,15774,15775,15778,15781],{},[755,15776,15777],{},"public        公共权限",[755,15779,15780],{},"protected 保护权限",[755,15782,15783],{},"private      私有权限",[108,15785,15786],{},[111,15787,15788],{},"示例：",[24,15790,15792],{"className":10594,"code":15791,"language":10596,"meta":29,"style":29},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,15793,15794,15799,15804,15809,15814,15818,15825,15829,15834,15838,15843,15847,15852,15857,15862,15866,15871,15876,15883,15887,15891,15899,15903,15914,15926,15938,15942,15946,15950,15958,15962,15967,15979,15987,15995,15999,16009,16013,16021],{"__ignoreMap":29},[34,15795,15796],{"class":36,"line":37},[34,15797,15798],{"class":205},"\u002F\u002F三种权限\n",[34,15800,15801],{"class":36,"line":51},[34,15802,15803],{"class":205},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[34,15805,15806],{"class":36,"line":60},[34,15807,15808],{"class":205},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[34,15810,15811],{"class":36,"line":76},[34,15812,15813],{"class":205},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[34,15815,15816],{"class":36,"line":93},[34,15817,3053],{"emptyLinePlaceholder":726},[34,15819,15820,15822],{"class":36,"line":99},[34,15821,15347],{"class":87},[34,15823,15824],{"class":149}," Person\n",[34,15826,15827],{"class":36,"line":353},[34,15828,2206],{"class":40},[34,15830,15831],{"class":36,"line":359},[34,15832,15833],{"class":205},"    \u002F\u002F姓名  公共权限\n",[34,15835,15836],{"class":36,"line":579},[34,15837,15369],{"class":87},[34,15839,15840],{"class":36,"line":589},[34,15841,15842],{"class":40},"    string m_Name;\n",[34,15844,15845],{"class":36,"line":601},[34,15846,3053],{"emptyLinePlaceholder":726},[34,15848,15849],{"class":36,"line":613},[34,15850,15851],{"class":205},"    \u002F\u002F汽车  保护权限\n",[34,15853,15854],{"class":36,"line":618},[34,15855,15856],{"class":87},"protected:\n",[34,15858,15859],{"class":36,"line":628},[34,15860,15861],{"class":40},"    string m_Car;\n",[34,15863,15864],{"class":36,"line":640},[34,15865,3053],{"emptyLinePlaceholder":726},[34,15867,15868],{"class":36,"line":2301},[34,15869,15870],{"class":205},"    \u002F\u002F银行卡密码  私有权限\n",[34,15872,15873],{"class":36,"line":2307},[34,15874,15875],{"class":87},"private:\n",[34,15877,15878,15880],{"class":36,"line":2328},[34,15879,2638],{"class":87},[34,15881,15882],{"class":40}," m_Password;\n",[34,15884,15885],{"class":36,"line":2333},[34,15886,3053],{"emptyLinePlaceholder":726},[34,15888,15889],{"class":36,"line":2347},[34,15890,15369],{"class":87},[34,15892,15893,15895,15897],{"class":36,"line":2352},[34,15894,15562],{"class":87},[34,15896,12038],{"class":149},[34,15898,2629],{"class":40},[34,15900,15901],{"class":36,"line":2381},[34,15902,2683],{"class":40},[34,15904,15905,15908,15910,15912],{"class":36,"line":2386},[34,15906,15907],{"class":40},"        m_Name ",[34,15909,153],{"class":87},[34,15911,9591],{"class":156},[34,15913,73],{"class":40},[34,15915,15916,15919,15921,15924],{"class":36,"line":2403},[34,15917,15918],{"class":40},"        m_Car ",[34,15920,153],{"class":87},[34,15922,15923],{"class":156}," \"拖拉机\"",[34,15925,73],{"class":40},[34,15927,15928,15931,15933,15936],{"class":36,"line":2408},[34,15929,15930],{"class":40},"        m_Password ",[34,15932,153],{"class":87},[34,15934,15935],{"class":63}," 123456",[34,15937,73],{"class":40},[34,15939,15940],{"class":36,"line":2413},[34,15941,2840],{"class":40},[34,15943,15944],{"class":36,"line":2418},[34,15945,4648],{"class":40},[34,15947,15948],{"class":36,"line":2432},[34,15949,3053],{"emptyLinePlaceholder":726},[34,15951,15952,15954,15956],{"class":36,"line":2437},[34,15953,804],{"class":87},[34,15955,2626],{"class":149},[34,15957,11506],{"class":40},[34,15959,15960],{"class":36,"line":3230},[34,15961,3053],{"emptyLinePlaceholder":726},[34,15963,15964],{"class":36,"line":3244},[34,15965,15966],{"class":40},"    Person p;\n",[34,15968,15969,15972,15974,15977],{"class":36,"line":3252},[34,15970,15971],{"class":40},"    p.m_Name ",[34,15973,153],{"class":87},[34,15975,15976],{"class":156}," \"李四\"",[34,15978,73],{"class":40},[34,15980,15981,15984],{"class":36,"line":3257},[34,15982,15983],{"class":205},"    \u002F\u002Fp.m_Car = \"奔驰\";",[34,15985,15986],{"class":205},"  \u002F\u002F保护权限类外访问不到\n",[34,15988,15989,15992],{"class":36,"line":3263},[34,15990,15991],{"class":205},"    \u002F\u002Fp.m_Password = 123;",[34,15993,15994],{"class":205}," \u002F\u002F私有权限类外访问不到\n",[34,15996,15997],{"class":36,"line":3269},[34,15998,3053],{"emptyLinePlaceholder":726},[34,16000,16001,16003,16005,16007],{"class":36,"line":3274},[34,16002,2956],{"class":149},[34,16004,801],{"class":40},[34,16006,2961],{"class":156},[34,16008,3372],{"class":40},[34,16010,16011],{"class":36,"line":8601},[34,16012,3053],{"emptyLinePlaceholder":726},[34,16014,16015,16017,16019],{"class":36,"line":8625},[34,16016,4743],{"class":87},[34,16018,4746],{"class":63},[34,16020,73],{"class":40},[34,16022,16023],{"class":36,"line":8630},[34,16024,241],{"class":40},[19,16026,16028],{"id":16027},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[108,16030,16031,16032,16035,16036],{},"在C++中 struct和class唯一的",[111,16033,16034],{},"区别","就在于 ",[111,16037,16038],{},"默认的访问权限不同",[108,16040,16041],{},"区别：",[1800,16043,16044,16047],{},[755,16045,16046],{},"struct 默认权限为公共",[755,16048,16049],{},"class   默认权限为私有",[24,16051,16053],{"className":10594,"code":16052,"language":10596,"meta":29,"style":29},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,16054,16055,16062,16066,16076,16080,16084,16091,16095,16105,16109,16113,16121,16125,16130,16144,16148,16153,16167,16171,16181,16185,16193],{"__ignoreMap":29},[34,16056,16057,16059],{"class":36,"line":37},[34,16058,15347],{"class":87},[34,16060,16061],{"class":149}," C1\n",[34,16063,16064],{"class":36,"line":51},[34,16065,2206],{"class":40},[34,16067,16068,16070,16073],{"class":36,"line":60},[34,16069,2638],{"class":87},[34,16071,16072],{"class":40},"  m_A;",[34,16074,16075],{"class":205}," \u002F\u002F默认是私有权限\n",[34,16077,16078],{"class":36,"line":76},[34,16079,4648],{"class":40},[34,16081,16082],{"class":36,"line":93},[34,16083,3053],{"emptyLinePlaceholder":726},[34,16085,16086,16088],{"class":36,"line":99},[34,16087,8412],{"class":87},[34,16089,16090],{"class":149}," C2\n",[34,16092,16093],{"class":36,"line":353},[34,16094,2206],{"class":40},[34,16096,16097,16099,16102],{"class":36,"line":359},[34,16098,2638],{"class":87},[34,16100,16101],{"class":40}," m_A;",[34,16103,16104],{"class":205},"  \u002F\u002F默认是公共权限\n",[34,16106,16107],{"class":36,"line":579},[34,16108,4648],{"class":40},[34,16110,16111],{"class":36,"line":589},[34,16112,3053],{"emptyLinePlaceholder":726},[34,16114,16115,16117,16119],{"class":36,"line":601},[34,16116,804],{"class":87},[34,16118,2626],{"class":149},[34,16120,11506],{"class":40},[34,16122,16123],{"class":36,"line":613},[34,16124,3053],{"emptyLinePlaceholder":726},[34,16126,16127],{"class":36,"line":618},[34,16128,16129],{"class":40},"    C1 c1;\n",[34,16131,16132,16135,16137,16139,16141],{"class":36,"line":628},[34,16133,16134],{"class":40},"    c1.m_A ",[34,16136,153],{"class":87},[34,16138,2691],{"class":63},[34,16140,854],{"class":40},[34,16142,16143],{"class":205}," \u002F\u002F错误，访问权限是私有\n",[34,16145,16146],{"class":36,"line":640},[34,16147,3053],{"emptyLinePlaceholder":726},[34,16149,16150],{"class":36,"line":2301},[34,16151,16152],{"class":40},"    C2 c2;\n",[34,16154,16155,16158,16160,16162,16164],{"class":36,"line":2307},[34,16156,16157],{"class":40},"    c2.m_A ",[34,16159,153],{"class":87},[34,16161,2691],{"class":63},[34,16163,854],{"class":40},[34,16165,16166],{"class":205}," \u002F\u002F正确，访问权限是公共\n",[34,16168,16169],{"class":36,"line":2328},[34,16170,3053],{"emptyLinePlaceholder":726},[34,16172,16173,16175,16177,16179],{"class":36,"line":2333},[34,16174,2956],{"class":149},[34,16176,801],{"class":40},[34,16178,2961],{"class":156},[34,16180,3372],{"class":40},[34,16182,16183],{"class":36,"line":2347},[34,16184,3053],{"emptyLinePlaceholder":726},[34,16186,16187,16189,16191],{"class":36,"line":2352},[34,16188,4743],{"class":87},[34,16190,4746],{"class":63},[34,16192,73],{"class":40},[34,16194,16195],{"class":36,"line":2381},[34,16196,241],{"class":40},[19,16198,16200],{"id":16199},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[108,16202,16203],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[108,16205,16206],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[108,16208,16209],{},[111,16210,15788],{},[24,16212,16214],{"className":10594,"code":16213,"language":10596,"meta":29,"style":29},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,16215,16216,16225,16229,16233,16238,16252,16261,16265,16275,16279,16286,16290,16294,16298,16303,16312,16319,16323,16328,16344,16367,16380,16387,16391,16400,16404,16408,16413,16429,16439,16443,16447,16451,16459,16463,16473,16477,16485,16489,16493,16501,16505,16509,16514,16527,16550,16554,16559,16572,16594,16598,16603,16617,16625,16629,16639,16643,16651],{"__ignoreMap":29},[34,16217,16218,16220,16223],{"class":36,"line":37},[34,16219,15347],{"class":87},[34,16221,16222],{"class":149}," Person",[34,16224,57],{"class":40},[34,16226,16227],{"class":36,"line":51},[34,16228,15369],{"class":87},[34,16230,16231],{"class":36,"line":60},[34,16232,3053],{"emptyLinePlaceholder":726},[34,16234,16235],{"class":36,"line":76},[34,16236,16237],{"class":205},"    \u002F\u002F姓名设置可读可写\n",[34,16239,16240,16242,16244,16246,16248,16250],{"class":36,"line":93},[34,16241,15562],{"class":87},[34,16243,15565],{"class":149},[34,16245,801],{"class":40},[34,16247,15570],{"class":149},[34,16249,15573],{"class":5869},[34,16251,13095],{"class":40},[34,16253,16254,16256,16258],{"class":36,"line":99},[34,16255,15907],{"class":40},[34,16257,153],{"class":87},[34,16259,16260],{"class":40}," name;\n",[34,16262,16263],{"class":36,"line":353},[34,16264,2840],{"class":40},[34,16266,16267,16270,16273],{"class":36,"line":359},[34,16268,16269],{"class":149},"    string",[34,16271,16272],{"class":149}," getName",[34,16274,2629],{"class":40},[34,16276,16277],{"class":36,"line":579},[34,16278,2683],{"class":40},[34,16280,16281,16283],{"class":36,"line":589},[34,16282,15405],{"class":87},[34,16284,16285],{"class":40}," m_Name;\n",[34,16287,16288],{"class":36,"line":601},[34,16289,2840],{"class":40},[34,16291,16292],{"class":36,"line":613},[34,16293,3053],{"emptyLinePlaceholder":726},[34,16295,16296],{"class":36,"line":618},[34,16297,3053],{"emptyLinePlaceholder":726},[34,16299,16300],{"class":36,"line":628},[34,16301,16302],{"class":205},"    \u002F\u002F获取年龄 \n",[34,16304,16305,16307,16310],{"class":36,"line":640},[34,16306,2638],{"class":87},[34,16308,16309],{"class":149}," getAge",[34,16311,11506],{"class":40},[34,16313,16314,16316],{"class":36,"line":2301},[34,16315,15405],{"class":87},[34,16317,16318],{"class":40}," m_Age;\n",[34,16320,16321],{"class":36,"line":2307},[34,16322,2840],{"class":40},[34,16324,16325],{"class":36,"line":2328},[34,16326,16327],{"class":205},"    \u002F\u002F设置年龄\n",[34,16329,16330,16332,16335,16337,16339,16342],{"class":36,"line":2333},[34,16331,15562],{"class":87},[34,16333,16334],{"class":149}," setAge",[34,16336,801],{"class":40},[34,16338,804],{"class":87},[34,16340,16341],{"class":5869}," age",[34,16343,13095],{"class":40},[34,16345,16346,16348,16351,16353,16355,16357,16360,16362,16365],{"class":36,"line":2347},[34,16347,3150],{"class":87},[34,16349,16350],{"class":40}," (age ",[34,16352,41],{"class":87},[34,16354,4746],{"class":63},[34,16356,3908],{"class":87},[34,16358,16359],{"class":40}," age ",[34,16361,1753],{"class":87},[34,16363,16364],{"class":63}," 150",[34,16366,13095],{"class":40},[34,16368,16369,16371,16373,16376,16378],{"class":36,"line":2352},[34,16370,10372],{"class":40},[34,16372,1837],{"class":87},[34,16374,16375],{"class":156}," \"你个老妖精!\"",[34,16377,2104],{"class":87},[34,16379,9493],{"class":40},[34,16381,16382,16385],{"class":36,"line":2381},[34,16383,16384],{"class":87},"            return",[34,16386,73],{"class":40},[34,16388,16389],{"class":36,"line":2386},[34,16390,3182],{"class":40},[34,16392,16393,16396,16398],{"class":36,"line":2403},[34,16394,16395],{"class":40},"        m_Age ",[34,16397,153],{"class":87},[34,16399,8450],{"class":40},[34,16401,16402],{"class":36,"line":2408},[34,16403,2840],{"class":40},[34,16405,16406],{"class":36,"line":2413},[34,16407,3053],{"emptyLinePlaceholder":726},[34,16409,16410],{"class":36,"line":2418},[34,16411,16412],{"class":205},"    \u002F\u002F情人设置为只写\n",[34,16414,16415,16417,16420,16422,16424,16427],{"class":36,"line":2432},[34,16416,15562],{"class":87},[34,16418,16419],{"class":149}," setLover",[34,16421,801],{"class":40},[34,16423,15570],{"class":149},[34,16425,16426],{"class":5869}," lover",[34,16428,13095],{"class":40},[34,16430,16431,16434,16436],{"class":36,"line":2437},[34,16432,16433],{"class":40},"        m_Lover ",[34,16435,153],{"class":87},[34,16437,16438],{"class":40}," lover;\n",[34,16440,16441],{"class":36,"line":3230},[34,16442,2840],{"class":40},[34,16444,16445],{"class":36,"line":3244},[34,16446,3053],{"emptyLinePlaceholder":726},[34,16448,16449],{"class":36,"line":3252},[34,16450,15875],{"class":87},[34,16452,16453,16456],{"class":36,"line":3257},[34,16454,16455],{"class":40},"    string m_Name;",[34,16457,16458],{"class":205}," \u002F\u002F可读可写  姓名\n",[34,16460,16461],{"class":36,"line":3263},[34,16462,13863],{"class":40},[34,16464,16465,16467,16470],{"class":36,"line":3269},[34,16466,2638],{"class":87},[34,16468,16469],{"class":40}," m_Age;",[34,16471,16472],{"class":205}," \u002F\u002F只读  年龄\n",[34,16474,16475],{"class":36,"line":3274},[34,16476,3053],{"emptyLinePlaceholder":726},[34,16478,16479,16482],{"class":36,"line":8601},[34,16480,16481],{"class":40},"    string m_Lover;",[34,16483,16484],{"class":205}," \u002F\u002F只写  情人\n",[34,16486,16487],{"class":36,"line":8625},[34,16488,4648],{"class":40},[34,16490,16491],{"class":36,"line":8630},[34,16492,3053],{"emptyLinePlaceholder":726},[34,16494,16495,16497,16499],{"class":36,"line":8636},[34,16496,804],{"class":87},[34,16498,2626],{"class":149},[34,16500,11506],{"class":40},[34,16502,16503],{"class":36,"line":8663},[34,16504,3053],{"emptyLinePlaceholder":726},[34,16506,16507],{"class":36,"line":8668},[34,16508,15966],{"class":40},[34,16510,16511],{"class":36,"line":8674},[34,16512,16513],{"class":205},"    \u002F\u002F姓名设置\n",[34,16515,16516,16519,16521,16523,16525],{"class":36,"line":8686},[34,16517,16518],{"class":40},"    p.",[34,16520,15719],{"class":149},[34,16522,801],{"class":40},[34,16524,8569],{"class":156},[34,16526,3372],{"class":40},[34,16528,16529,16531,16533,16536,16538,16541,16544,16546,16548],{"class":36,"line":8698},[34,16530,7182],{"class":40},[34,16532,1837],{"class":87},[34,16534,16535],{"class":156}," \"姓名： \"",[34,16537,2104],{"class":87},[34,16539,16540],{"class":40}," p.",[34,16542,16543],{"class":149},"getName",[34,16545,13703],{"class":40},[34,16547,1837],{"class":87},[34,16549,9493],{"class":40},[34,16551,16552],{"class":36,"line":8710},[34,16553,3053],{"emptyLinePlaceholder":726},[34,16555,16556],{"class":36,"line":10369},[34,16557,16558],{"class":205},"    \u002F\u002F年龄设置\n",[34,16560,16561,16563,16566,16568,16570],{"class":36,"line":10394},[34,16562,16518],{"class":40},[34,16564,16565],{"class":149},"setAge",[34,16567,801],{"class":40},[34,16569,1451],{"class":63},[34,16571,3372],{"class":40},[34,16573,16574,16576,16578,16581,16583,16585,16588,16590,16592],{"class":36,"line":10417},[34,16575,7182],{"class":40},[34,16577,1837],{"class":87},[34,16579,16580],{"class":156}," \"年龄： \"",[34,16582,2104],{"class":87},[34,16584,16540],{"class":40},[34,16586,16587],{"class":149},"getAge",[34,16589,13703],{"class":40},[34,16591,1837],{"class":87},[34,16593,9493],{"class":40},[34,16595,16596],{"class":36,"line":10441},[34,16597,3053],{"emptyLinePlaceholder":726},[34,16599,16600],{"class":36,"line":10446},[34,16601,16602],{"class":205},"    \u002F\u002F情人设置\n",[34,16604,16605,16607,16610,16612,16615],{"class":36,"line":10451},[34,16606,16518],{"class":40},[34,16608,16609],{"class":149},"setLover",[34,16611,801],{"class":40},[34,16613,16614],{"class":156},"\"苍井\"",[34,16616,3372],{"class":40},[34,16618,16619,16622],{"class":36,"line":10456},[34,16620,16621],{"class":205},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[34,16623,16624],{"class":205},"  \u002F\u002F只写属性，不可以读取\n",[34,16626,16627],{"class":36,"line":10465},[34,16628,3053],{"emptyLinePlaceholder":726},[34,16630,16631,16633,16635,16637],{"class":36,"line":10470},[34,16632,2956],{"class":149},[34,16634,801],{"class":40},[34,16636,2961],{"class":156},[34,16638,3372],{"class":40},[34,16640,16641],{"class":36,"line":10476},[34,16642,3053],{"emptyLinePlaceholder":726},[34,16644,16645,16647,16649],{"class":36,"line":10497},[34,16646,4743],{"class":87},[34,16648,4746],{"class":63},[34,16650,73],{"class":40},[34,16652,16653],{"class":36,"line":10503},[34,16654,241],{"class":40},[19,16656,16658],{"id":16657},"_814封装案例","8.1.4封装案例",[752,16660,16661],{},[755,16662,16663,16666],{},[111,16664,16665],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1800,16668,16669,16672],{},[755,16670,16671],{},"求出立方体的面积和体积",[755,16673,16674],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[24,16676,16678],{"className":789,"code":16677,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[31,16679,16680,16686,16696,16703,16707,16711,16716,16746,16750,16760,16770,16780,16784,16793,16797,16833,16837,16846,16850,16866,16870,16875,16884,16888,16895,16899,16908,16912,16919,16923,16932,16936,16943,16947,16952,16969,16973,17019,17023,17032,17036,17040,17044,17053,17057,17061,17066,17070,17076,17082,17088,17092,17096,17101,17123,17127,17181,17185,17193,17197,17202,17207,17220,17227,17243,17254,17260,17283,17289,17312,17326,17346,17352,17363,17386,17408,17413,17419,17433,17446,17451,17465,17470,17476,17481,17495,17500,17505,17519,17531,17536,17549,17554,17559,17564,17577,17582],{"__ignoreMap":29},[34,16681,16682,16684],{"class":36,"line":37},[34,16683,2603],{"class":87},[34,16685,2606],{"class":156},[34,16687,16688,16690,16692,16694],{"class":36,"line":51},[34,16689,2611],{"class":87},[34,16691,2614],{"class":87},[34,16693,2617],{"class":149},[34,16695,73],{"class":40},[34,16697,16698,16700],{"class":36,"line":60},[34,16699,15347],{"class":87},[34,16701,16702],{"class":149}," Cube\n",[34,16704,16705],{"class":36,"line":76},[34,16706,2206],{"class":40},[34,16708,16709],{"class":36,"line":93},[34,16710,15369],{"class":87},[34,16712,16713],{"class":36,"line":99},[34,16714,16715],{"class":205},"    \u002F\u002F输入长宽高\n",[34,16717,16718,16720,16723,16725,16727,16730,16732,16734,16737,16739,16741,16744],{"class":36,"line":353},[34,16719,15562],{"class":87},[34,16721,16722],{"class":149}," setLwh",[34,16724,801],{"class":40},[34,16726,804],{"class":87},[34,16728,16729],{"class":5869}," l",[34,16731,1173],{"class":40},[34,16733,804],{"class":87},[34,16735,16736],{"class":5869}," w",[34,16738,1173],{"class":40},[34,16740,804],{"class":87},[34,16742,16743],{"class":5869}," h",[34,16745,807],{"class":40},[34,16747,16748],{"class":36,"line":359},[34,16749,2683],{"class":40},[34,16751,16752,16755,16757],{"class":36,"line":579},[34,16753,16754],{"class":40},"        m_L",[34,16756,153],{"class":87},[34,16758,16759],{"class":40},"l;\n",[34,16761,16762,16765,16767],{"class":36,"line":589},[34,16763,16764],{"class":40},"        m_W",[34,16766,153],{"class":87},[34,16768,16769],{"class":40},"w;\n",[34,16771,16772,16775,16777],{"class":36,"line":601},[34,16773,16774],{"class":40},"        m_H",[34,16776,153],{"class":87},[34,16778,16779],{"class":40},"h;\n",[34,16781,16782],{"class":36,"line":613},[34,16783,2840],{"class":40},[34,16785,16786,16788,16791],{"class":36,"line":618},[34,16787,2638],{"class":87},[34,16789,16790],{"class":149}," mianji",[34,16792,2629],{"class":40},[34,16794,16795],{"class":36,"line":628},[34,16796,2683],{"class":40},[34,16798,16799,16801,16803,16805,16808,16810,16813,16815,16818,16820,16823,16825,16828,16830],{"class":36,"line":640},[34,16800,15405],{"class":87},[34,16802,15408],{"class":63},[34,16804,1250],{"class":87},[34,16806,16807],{"class":40},"(m_L",[34,16809,1250],{"class":87},[34,16811,16812],{"class":40},"m_W ",[34,16814,1276],{"class":87},[34,16816,16817],{"class":40}," m_L",[34,16819,1250],{"class":87},[34,16821,16822],{"class":40},"m_H ",[34,16824,1276],{"class":87},[34,16826,16827],{"class":40}," m_W",[34,16829,1250],{"class":87},[34,16831,16832],{"class":40},"m_H);\n",[34,16834,16835],{"class":36,"line":2301},[34,16836,2840],{"class":40},[34,16838,16839,16841,16844],{"class":36,"line":2307},[34,16840,2638],{"class":87},[34,16842,16843],{"class":149}," tiji",[34,16845,2629],{"class":40},[34,16847,16848],{"class":36,"line":2328},[34,16849,2683],{"class":40},[34,16851,16852,16854,16856,16858,16861,16863],{"class":36,"line":2333},[34,16853,15405],{"class":87},[34,16855,16817],{"class":40},[34,16857,1250],{"class":87},[34,16859,16860],{"class":40},"m_W",[34,16862,1250],{"class":87},[34,16864,16865],{"class":40},"m_H;\n",[34,16867,16868],{"class":36,"line":2347},[34,16869,2840],{"class":40},[34,16871,16872],{"class":36,"line":2352},[34,16873,16874],{"class":205},"    \u002F\u002F获取长宽高\n",[34,16876,16877,16879,16882],{"class":36,"line":2381},[34,16878,2638],{"class":87},[34,16880,16881],{"class":149}," getLength",[34,16883,2629],{"class":40},[34,16885,16886],{"class":36,"line":2386},[34,16887,2683],{"class":40},[34,16889,16890,16892],{"class":36,"line":2403},[34,16891,15405],{"class":87},[34,16893,16894],{"class":40}," m_L;\n",[34,16896,16897],{"class":36,"line":2408},[34,16898,2840],{"class":40},[34,16900,16901,16903,16906],{"class":36,"line":2413},[34,16902,2638],{"class":87},[34,16904,16905],{"class":149}," getWidth",[34,16907,2629],{"class":40},[34,16909,16910],{"class":36,"line":2418},[34,16911,2683],{"class":40},[34,16913,16914,16916],{"class":36,"line":2432},[34,16915,15405],{"class":87},[34,16917,16918],{"class":40}," m_W;\n",[34,16920,16921],{"class":36,"line":2437},[34,16922,2840],{"class":40},[34,16924,16925,16927,16930],{"class":36,"line":3230},[34,16926,2638],{"class":87},[34,16928,16929],{"class":149}," getHeight",[34,16931,2629],{"class":40},[34,16933,16934],{"class":36,"line":3244},[34,16935,2683],{"class":40},[34,16937,16938,16940],{"class":36,"line":3252},[34,16939,15405],{"class":87},[34,16941,16942],{"class":40}," m_H;\n",[34,16944,16945],{"class":36,"line":3257},[34,16946,2840],{"class":40},[34,16948,16949],{"class":36,"line":3263},[34,16950,16951],{"class":205},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[34,16953,16954,16957,16960,16962,16965,16967],{"class":36,"line":3269},[34,16955,16956],{"class":87},"    bool",[34,16958,16959],{"class":149}," isEqual",[34,16961,801],{"class":40},[34,16963,16964],{"class":149},"Cube",[34,16966,3502],{"class":5869},[34,16968,807],{"class":40},[34,16970,16971],{"class":36,"line":3274},[34,16972,2683],{"class":40},[34,16974,16975,16977,16980,16983,16985,16987,16990,16992,16995,16998,17000,17002,17005,17007,17009,17012,17014,17016],{"class":36,"line":8601},[34,16976,3150],{"class":87},[34,16978,16979],{"class":40}," (c.",[34,16981,16982],{"class":149},"getLength",[34,16984,13703],{"class":40},[34,16986,3602],{"class":87},[34,16988,16989],{"class":40}," m_L ",[34,16991,2369],{"class":87},[34,16993,16994],{"class":40}," c.",[34,16996,16997],{"class":149},"getWidth",[34,16999,13703],{"class":40},[34,17001,3602],{"class":87},[34,17003,17004],{"class":40}," m_W ",[34,17006,2369],{"class":87},[34,17008,16994],{"class":40},[34,17010,17011],{"class":149},"getHeight",[34,17013,13703],{"class":40},[34,17015,3602],{"class":87},[34,17017,17018],{"class":40}," m_H)\n",[34,17020,17021],{"class":36,"line":8625},[34,17022,3163],{"class":40},[34,17024,17025,17027,17030],{"class":36,"line":8630},[34,17026,16384],{"class":87},[34,17028,17029],{"class":63}," true",[34,17031,73],{"class":40},[34,17033,17034],{"class":36,"line":8636},[34,17035,3182],{"class":40},[34,17037,17038],{"class":36,"line":8663},[34,17039,3223],{"class":87},[34,17041,17042],{"class":36,"line":8668},[34,17043,3163],{"class":40},[34,17045,17046,17048,17051],{"class":36,"line":8674},[34,17047,16384],{"class":87},[34,17049,17050],{"class":63}," false",[34,17052,73],{"class":40},[34,17054,17055],{"class":36,"line":8686},[34,17056,3182],{"class":40},[34,17058,17059],{"class":36,"line":8698},[34,17060,2840],{"class":40},[34,17062,17063],{"class":36,"line":8710},[34,17064,17065],{"class":205},"    \u002F\u002F私有属性\n",[34,17067,17068],{"class":36,"line":10369},[34,17069,15875],{"class":87},[34,17071,17072,17074],{"class":36,"line":10394},[34,17073,2638],{"class":87},[34,17075,16894],{"class":40},[34,17077,17078,17080],{"class":36,"line":10417},[34,17079,2638],{"class":87},[34,17081,16918],{"class":40},[34,17083,17084,17086],{"class":36,"line":10441},[34,17085,2638],{"class":87},[34,17087,16942],{"class":40},[34,17089,17090],{"class":36,"line":10446},[34,17091,3053],{"emptyLinePlaceholder":726},[34,17093,17094],{"class":36,"line":10451},[34,17095,4648],{"class":40},[34,17097,17098],{"class":36,"line":10456},[34,17099,17100],{"class":205},"\u002F\u002F全局函数判断两个立方体是否相等\n",[34,17102,17103,17105,17107,17109,17111,17114,17116,17118,17121],{"class":36,"line":10465},[34,17104,2014],{"class":87},[34,17106,16959],{"class":149},[34,17108,801],{"class":40},[34,17110,16964],{"class":149},[34,17112,17113],{"class":5869}," c1",[34,17115,1173],{"class":40},[34,17117,16964],{"class":149},[34,17119,17120],{"class":5869}," c2",[34,17122,807],{"class":40},[34,17124,17125],{"class":36,"line":10470},[34,17126,2206],{"class":40},[34,17128,17129,17131,17134,17136,17138,17140,17143,17145,17148,17150,17152,17154,17156,17158,17160,17162,17164,17166,17168,17170,17172,17174,17176,17178],{"class":36,"line":10476},[34,17130,4743],{"class":87},[34,17132,17133],{"class":40}," (c1.",[34,17135,16982],{"class":149},[34,17137,13703],{"class":40},[34,17139,3602],{"class":87},[34,17141,17142],{"class":40}," c2.",[34,17144,16982],{"class":149},[34,17146,17147],{"class":40},"()) ",[34,17149,2369],{"class":87},[34,17151,17133],{"class":40},[34,17153,16997],{"class":149},[34,17155,13703],{"class":40},[34,17157,3602],{"class":87},[34,17159,17142],{"class":40},[34,17161,16997],{"class":149},[34,17163,17147],{"class":40},[34,17165,2369],{"class":87},[34,17167,17133],{"class":40},[34,17169,17011],{"class":149},[34,17171,13703],{"class":40},[34,17173,3602],{"class":87},[34,17175,17142],{"class":40},[34,17177,17011],{"class":149},[34,17179,17180],{"class":40},"());\n",[34,17182,17183],{"class":36,"line":10497},[34,17184,241],{"class":40},[34,17186,17187,17189,17191],{"class":36,"line":10503},[34,17188,804],{"class":87},[34,17190,2626],{"class":149},[34,17192,2629],{"class":40},[34,17194,17195],{"class":36,"line":10517},[34,17196,2206],{"class":40},[34,17198,17199],{"class":36,"line":10523},[34,17200,17201],{"class":40},"    Cube c1;\n",[34,17203,17204],{"class":36,"line":10550},[34,17205,17206],{"class":205},"    \u002F\u002F输入立方体的长宽高\n",[34,17208,17209,17211,17213,17216,17218],{"class":36,"line":10559},[34,17210,2211],{"class":40},[34,17212,1837],{"class":87},[34,17214,17215],{"class":156},"\"请输入第一个立方体的长、宽、高：\"",[34,17217,1837],{"class":87},[34,17219,1859],{"class":40},[34,17221,17222,17224],{"class":36,"line":10565},[34,17223,2638],{"class":87},[34,17225,17226],{"class":40}," l,w,h,l1,w1,h1;\n",[34,17228,17229,17231,17233,17235,17237,17239,17241],{"class":36,"line":10573},[34,17230,2665],{"class":40},[34,17232,2089],{"class":87},[34,17234,1313],{"class":40},[34,17236,2089],{"class":87},[34,17238,1590],{"class":40},[34,17240,2089],{"class":87},[34,17242,16779],{"class":40},[34,17244,17245,17248,17251],{"class":36,"line":10578},[34,17246,17247],{"class":40},"    c1.",[34,17249,17250],{"class":149},"setLwh",[34,17252,17253],{"class":40},"(l,w,h);\n",[34,17255,17257],{"class":36,"line":17256},66,[34,17258,17259],{"class":205},"    \u002F\u002F面积\n",[34,17261,17263,17265,17267,17270,17272,17274,17277,17279,17281],{"class":36,"line":17262},67,[34,17264,2211],{"class":40},[34,17266,1837],{"class":87},[34,17268,17269],{"class":156},"\"立方体的表面积为：\"",[34,17271,1837],{"class":87},[34,17273,15483],{"class":40},[34,17275,17276],{"class":149},"mianji",[34,17278,3080],{"class":40},[34,17280,1837],{"class":87},[34,17282,1859],{"class":40},[34,17284,17286],{"class":36,"line":17285},68,[34,17287,17288],{"class":205},"    \u002F\u002F体积\n",[34,17290,17292,17294,17296,17299,17301,17303,17306,17308,17310],{"class":36,"line":17291},69,[34,17293,2211],{"class":40},[34,17295,1837],{"class":87},[34,17297,17298],{"class":156},"\"立方体的体积为：\"",[34,17300,1837],{"class":87},[34,17302,15483],{"class":40},[34,17304,17305],{"class":149},"tiji",[34,17307,3080],{"class":40},[34,17309,1837],{"class":87},[34,17311,1859],{"class":40},[34,17313,17315,17317,17319,17322,17324],{"class":36,"line":17314},70,[34,17316,2211],{"class":40},[34,17318,1837],{"class":87},[34,17320,17321],{"class":156},"\"请输入第二个立方体的长、宽、高：\"",[34,17323,1837],{"class":87},[34,17325,1859],{"class":40},[34,17327,17329,17331,17333,17336,17338,17341,17343],{"class":36,"line":17328},71,[34,17330,2665],{"class":40},[34,17332,2089],{"class":87},[34,17334,17335],{"class":40},"l1",[34,17337,2089],{"class":87},[34,17339,17340],{"class":40},"w1",[34,17342,2089],{"class":87},[34,17344,17345],{"class":40},"h1;\n",[34,17347,17349],{"class":36,"line":17348},72,[34,17350,17351],{"class":40},"    Cube c2;\n",[34,17353,17355,17358,17360],{"class":36,"line":17354},73,[34,17356,17357],{"class":40},"    c2.",[34,17359,17250],{"class":149},[34,17361,17362],{"class":40},"(l1,w1,h1);\n",[34,17364,17366,17368,17370,17373,17375,17378,17380,17382,17384],{"class":36,"line":17365},74,[34,17367,2211],{"class":40},[34,17369,1837],{"class":87},[34,17371,17372],{"class":156},"\"第二个立方体的表面积为：\"",[34,17374,1837],{"class":87},[34,17376,17377],{"class":40},"c2.",[34,17379,17276],{"class":149},[34,17381,3080],{"class":40},[34,17383,1837],{"class":87},[34,17385,1859],{"class":40},[34,17387,17389,17391,17393,17396,17398,17400,17402,17404,17406],{"class":36,"line":17388},75,[34,17390,2211],{"class":40},[34,17392,1837],{"class":87},[34,17394,17395],{"class":156},"\"第二个立方体的体积为：\"",[34,17397,1837],{"class":87},[34,17399,17377],{"class":40},[34,17401,17305],{"class":149},[34,17403,3080],{"class":40},[34,17405,1837],{"class":87},[34,17407,1859],{"class":40},[34,17409,17411],{"class":36,"line":17410},76,[34,17412,3053],{"emptyLinePlaceholder":726},[34,17414,17416],{"class":36,"line":17415},77,[34,17417,17418],{"class":205},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[34,17420,17422,17424,17426,17429,17431],{"class":36,"line":17421},78,[34,17423,2211],{"class":40},[34,17425,1837],{"class":87},[34,17427,17428],{"class":156},"\"内部函数判断结果：\"",[34,17430,1837],{"class":87},[34,17432,1859],{"class":40},[34,17434,17436,17438,17440,17443],{"class":36,"line":17435},79,[34,17437,3754],{"class":87},[34,17439,17133],{"class":40},[34,17441,17442],{"class":149},"isEqual",[34,17444,17445],{"class":40},"(c2))\n",[34,17447,17449],{"class":36,"line":17448},80,[34,17450,2683],{"class":40},[34,17452,17454,17456,17458,17461,17463],{"class":36,"line":17453},81,[34,17455,4104],{"class":40},[34,17457,1837],{"class":87},[34,17459,17460],{"class":156},"\"两个立方体相等\"",[34,17462,1837],{"class":87},[34,17464,1859],{"class":40},[34,17466,17468],{"class":36,"line":17467},82,[34,17469,2840],{"class":40},[34,17471,17473],{"class":36,"line":17472},83,[34,17474,17475],{"class":87},"    else\n",[34,17477,17479],{"class":36,"line":17478},84,[34,17480,2683],{"class":40},[34,17482,17484,17486,17488,17491,17493],{"class":36,"line":17483},85,[34,17485,4104],{"class":40},[34,17487,1837],{"class":87},[34,17489,17490],{"class":156},"\"两个立方体不相等\"",[34,17492,1837],{"class":87},[34,17494,1859],{"class":40},[34,17496,17498],{"class":36,"line":17497},86,[34,17499,2840],{"class":40},[34,17501,17503],{"class":36,"line":17502},87,[34,17504,3053],{"emptyLinePlaceholder":726},[34,17506,17508,17510,17512,17515,17517],{"class":36,"line":17507},88,[34,17509,2211],{"class":40},[34,17511,1837],{"class":87},[34,17513,17514],{"class":156},"\"全局函数判断结果：\"",[34,17516,1837],{"class":87},[34,17518,1859],{"class":40},[34,17520,17522,17524,17526,17528],{"class":36,"line":17521},89,[34,17523,3754],{"class":87},[34,17525,2312],{"class":40},[34,17527,17442],{"class":149},[34,17529,17530],{"class":40},"(c1, c2))\n",[34,17532,17534],{"class":36,"line":17533},90,[34,17535,2683],{"class":40},[34,17537,17539,17541,17543,17545,17547],{"class":36,"line":17538},91,[34,17540,4104],{"class":40},[34,17542,1837],{"class":87},[34,17544,17460],{"class":156},[34,17546,1837],{"class":87},[34,17548,1859],{"class":40},[34,17550,17552],{"class":36,"line":17551},92,[34,17553,2840],{"class":40},[34,17555,17557],{"class":36,"line":17556},93,[34,17558,17475],{"class":87},[34,17560,17562],{"class":36,"line":17561},94,[34,17563,2683],{"class":40},[34,17565,17567,17569,17571,17573,17575],{"class":36,"line":17566},95,[34,17568,4104],{"class":40},[34,17570,1837],{"class":87},[34,17572,17490],{"class":156},[34,17574,1837],{"class":87},[34,17576,1859],{"class":40},[34,17578,17580],{"class":36,"line":17579},96,[34,17581,2840],{"class":40},[34,17583,17585],{"class":36,"line":17584},97,[34,17586,241],{"class":40},[752,17588,17589],{"start":51},[755,17590,17591],{},[111,17592,17593],{},"练习案例2：点和圆的关系",[1800,17595,17596],{},[755,17597,17598],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[24,17600,17602],{"className":789,"code":17601,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[31,17603,17604,17610,17620,17627,17634,17638,17642,17647,17681,17686,17702,17716,17720,17724,17731,17738,17742,17748,17752,17756,17760,17782,17805,17810,17824,17839,17843,17847,17853,17858,17863,17867,17893,17897,17927,17955,17983,18000,18004,18017,18021,18025,18029,18042,18046,18050,18058,18062,18066,18070,18075,18079,18090,18097,18106,18116,18127,18134,18147,18158,18168,18179,18186,18200,18205,18215,18223],{"__ignoreMap":29},[34,17605,17606,17608],{"class":36,"line":37},[34,17607,2603],{"class":87},[34,17609,2606],{"class":156},[34,17611,17612,17614,17616,17618],{"class":36,"line":51},[34,17613,2611],{"class":87},[34,17615,2614],{"class":87},[34,17617,2617],{"class":149},[34,17619,73],{"class":40},[34,17621,17622,17624],{"class":36,"line":60},[34,17623,2603],{"class":87},[34,17625,17626],{"class":156},"\u003Ccmath>\n",[34,17628,17629,17631],{"class":36,"line":76},[34,17630,15347],{"class":87},[34,17632,17633],{"class":149}," Point\n",[34,17635,17636],{"class":36,"line":93},[34,17637,2206],{"class":40},[34,17639,17640],{"class":36,"line":99},[34,17641,15369],{"class":87},[34,17643,17644],{"class":36,"line":353},[34,17645,17646],{"class":205},"    \u002F\u002F赋值\n",[34,17648,17649,17651,17654,17656,17658,17661,17663,17665,17668,17671,17673,17676,17678],{"class":36,"line":359},[34,17650,15562],{"class":87},[34,17652,17653],{"class":149}," setPoint",[34,17655,801],{"class":40},[34,17657,14690],{"class":87},[34,17659,17660],{"class":5869}," x",[34,17662,13088],{"class":40},[34,17664,14690],{"class":87},[34,17666,17667],{"class":5869}," y",[34,17669,17670],{"class":40},") { m_x ",[34,17672,153],{"class":87},[34,17674,17675],{"class":40}," x; m_y ",[34,17677,153],{"class":87},[34,17679,17680],{"class":40}," y; }\n",[34,17682,17683],{"class":36,"line":579},[34,17684,17685],{"class":205},"    \u002F\u002F获取坐标\n",[34,17687,17688,17690,17693,17696,17699],{"class":36,"line":589},[34,17689,15391],{"class":87},[34,17691,17692],{"class":149}," getX",[34,17694,17695],{"class":40},"() { ",[34,17697,17698],{"class":87},"return",[34,17700,17701],{"class":40}," m_x; }\n",[34,17703,17704,17706,17709,17711,17713],{"class":36,"line":601},[34,17705,15391],{"class":87},[34,17707,17708],{"class":149}," getY",[34,17710,17695],{"class":40},[34,17712,17698],{"class":87},[34,17714,17715],{"class":40}," m_y; }\n",[34,17717,17718],{"class":36,"line":613},[34,17719,3053],{"emptyLinePlaceholder":726},[34,17721,17722],{"class":36,"line":618},[34,17723,15875],{"class":87},[34,17725,17726,17728],{"class":36,"line":628},[34,17727,15391],{"class":87},[34,17729,17730],{"class":40}," m_x;\n",[34,17732,17733,17735],{"class":36,"line":640},[34,17734,15391],{"class":87},[34,17736,17737],{"class":40}," m_y;\n",[34,17739,17740],{"class":36,"line":2301},[34,17741,4648],{"class":40},[34,17743,17744,17746],{"class":36,"line":2307},[34,17745,15347],{"class":87},[34,17747,15350],{"class":149},[34,17749,17750],{"class":36,"line":2328},[34,17751,2206],{"class":40},[34,17753,17754],{"class":36,"line":2333},[34,17755,15369],{"class":87},[34,17757,17758],{"class":36,"line":2347},[34,17759,17646],{"class":205},[34,17761,17762,17764,17767,17769,17771,17774,17777,17779],{"class":36,"line":2352},[34,17763,15562],{"class":87},[34,17765,17766],{"class":149}," setRadius",[34,17768,801],{"class":40},[34,17770,14690],{"class":87},[34,17772,17773],{"class":5869}," r",[34,17775,17776],{"class":40},") { m_r ",[34,17778,153],{"class":87},[34,17780,17781],{"class":40}," r; }\n",[34,17783,17784,17786,17789,17791,17794,17797,17800,17802],{"class":36,"line":2381},[34,17785,15562],{"class":87},[34,17787,17788],{"class":149}," setCenter",[34,17790,801],{"class":40},[34,17792,17793],{"class":149},"Point",[34,17795,17796],{"class":5869}," center",[34,17798,17799],{"class":40},") { m_center ",[34,17801,153],{"class":87},[34,17803,17804],{"class":40}," center; }\n",[34,17806,17807],{"class":36,"line":2386},[34,17808,17809],{"class":205},"    \u002F\u002F获取属性\n",[34,17811,17812,17814,17817,17819,17821],{"class":36,"line":2403},[34,17813,15391],{"class":87},[34,17815,17816],{"class":149}," getRadius",[34,17818,17695],{"class":40},[34,17820,17698],{"class":87},[34,17822,17823],{"class":40}," m_r; }\n",[34,17825,17826,17829,17832,17834,17836],{"class":36,"line":2408},[34,17827,17828],{"class":149},"    Point",[34,17830,17831],{"class":149}," getCenter",[34,17833,17695],{"class":40},[34,17835,17698],{"class":87},[34,17837,17838],{"class":40}," m_center; }\n",[34,17840,17841],{"class":36,"line":2413},[34,17842,3053],{"emptyLinePlaceholder":726},[34,17844,17845],{"class":36,"line":2418},[34,17846,15875],{"class":87},[34,17848,17849,17851],{"class":36,"line":2432},[34,17850,15391],{"class":87},[34,17852,15381],{"class":40},[34,17854,17855],{"class":36,"line":2437},[34,17856,17857],{"class":205},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[34,17859,17860],{"class":36,"line":3230},[34,17861,17862],{"class":40},"    Point m_center;\n",[34,17864,17865],{"class":36,"line":3244},[34,17866,4648],{"class":40},[34,17868,17869,17871,17874,17876,17879,17881,17883,17885,17887,17889,17891],{"class":36,"line":3252},[34,17870,6017],{"class":87},[34,17872,17873],{"class":149}," isInCircle",[34,17875,801],{"class":40},[34,17877,17878],{"class":149},"Circle",[34,17880,11237],{"class":87},[34,17882,1083],{"class":5869},[34,17884,1173],{"class":40},[34,17886,17793],{"class":149},[34,17888,11237],{"class":87},[34,17890,108],{"class":5869},[34,17892,807],{"class":40},[34,17894,17895],{"class":36,"line":3257},[34,17896,2206],{"class":40},[34,17898,17899,17901,17904,17906,17908,17911,17914,17917,17919,17921,17923,17925],{"class":36,"line":3263},[34,17900,15391],{"class":87},[34,17902,17903],{"class":40}," dx ",[34,17905,153],{"class":87},[34,17907,16994],{"class":40},[34,17909,17910],{"class":149},"getCenter",[34,17912,17913],{"class":40},"().",[34,17915,17916],{"class":149},"getX",[34,17918,13703],{"class":40},[34,17920,1327],{"class":87},[34,17922,16540],{"class":40},[34,17924,17916],{"class":149},[34,17926,6289],{"class":40},[34,17928,17929,17931,17934,17936,17938,17940,17942,17945,17947,17949,17951,17953],{"class":36,"line":3269},[34,17930,15391],{"class":87},[34,17932,17933],{"class":40}," dy ",[34,17935,153],{"class":87},[34,17937,16994],{"class":40},[34,17939,17910],{"class":149},[34,17941,17913],{"class":40},[34,17943,17944],{"class":149},"getY",[34,17946,13703],{"class":40},[34,17948,1327],{"class":87},[34,17950,16540],{"class":40},[34,17952,17944],{"class":149},[34,17954,6289],{"class":40},[34,17956,17957,17959,17962,17964,17967,17970,17972,17974,17976,17978,17980],{"class":36,"line":3274},[34,17958,15391],{"class":87},[34,17960,17961],{"class":40}," distance ",[34,17963,153],{"class":87},[34,17965,17966],{"class":149}," sqrt",[34,17968,17969],{"class":40},"(dx ",[34,17971,1250],{"class":87},[34,17973,17903],{"class":40},[34,17975,1276],{"class":87},[34,17977,17933],{"class":40},[34,17979,1250],{"class":87},[34,17981,17982],{"class":40}," dy);\n",[34,17984,17985,17987,17990,17992,17994,17997],{"class":36,"line":8601},[34,17986,3754],{"class":87},[34,17988,17989],{"class":40}," (distance ",[34,17991,41],{"class":87},[34,17993,16994],{"class":40},[34,17995,17996],{"class":149},"getRadius",[34,17998,17999],{"class":40},"())\n",[34,18001,18002],{"class":36,"line":8625},[34,18003,2683],{"class":40},[34,18005,18006,18008,18010,18013,18015],{"class":36,"line":8630},[34,18007,10322],{"class":40},[34,18009,1837],{"class":87},[34,18011,18012],{"class":156}," \"点在圆内\"",[34,18014,2104],{"class":87},[34,18016,9493],{"class":40},[34,18018,18019],{"class":36,"line":8636},[34,18020,2840],{"class":40},[34,18022,18023],{"class":36,"line":8663},[34,18024,17475],{"class":87},[34,18026,18027],{"class":36,"line":8668},[34,18028,2683],{"class":40},[34,18030,18031,18033,18035,18038,18040],{"class":36,"line":8674},[34,18032,10322],{"class":40},[34,18034,1837],{"class":87},[34,18036,18037],{"class":156}," \"点在圆外\"",[34,18039,2104],{"class":87},[34,18041,9493],{"class":40},[34,18043,18044],{"class":36,"line":8686},[34,18045,2840],{"class":40},[34,18047,18048],{"class":36,"line":8698},[34,18049,241],{"class":40},[34,18051,18052,18054,18056],{"class":36,"line":8710},[34,18053,804],{"class":87},[34,18055,2626],{"class":149},[34,18057,2629],{"class":40},[34,18059,18060],{"class":36,"line":10369},[34,18061,2206],{"class":40},[34,18063,18064],{"class":36,"line":10394},[34,18065,15706],{"class":205},[34,18067,18068],{"class":36,"line":10417},[34,18069,15453],{"class":40},[34,18071,18072],{"class":36,"line":10441},[34,18073,18074],{"class":40},"    Point p1;\n",[34,18076,18077],{"class":36,"line":10446},[34,18078,17646],{"class":205},[34,18080,18081,18083,18085,18088],{"class":36,"line":10451},[34,18082,2211],{"class":40},[34,18084,1837],{"class":87},[34,18086,18087],{"class":156},"\"请输入圆的半径：\"",[34,18089,73],{"class":40},[34,18091,18092,18094],{"class":36,"line":10456},[34,18093,15391],{"class":87},[34,18095,18096],{"class":40}," r;\n",[34,18098,18099,18101,18103],{"class":36,"line":10465},[34,18100,2665],{"class":40},[34,18102,2089],{"class":87},[34,18104,18105],{"class":40},"r;\n",[34,18107,18108,18110,18113],{"class":36,"line":10470},[34,18109,17247],{"class":40},[34,18111,18112],{"class":149},"setRadius",[34,18114,18115],{"class":40},"(r);\n",[34,18117,18118,18120,18122,18125],{"class":36,"line":10476},[34,18119,2211],{"class":40},[34,18121,1837],{"class":87},[34,18123,18124],{"class":156},"\"请输入圆心坐标：\"",[34,18126,73],{"class":40},[34,18128,18129,18131],{"class":36,"line":10497},[34,18130,15391],{"class":87},[34,18132,18133],{"class":40}," x, y;\n",[34,18135,18136,18138,18140,18142,18144],{"class":36,"line":10503},[34,18137,2665],{"class":40},[34,18139,2089],{"class":87},[34,18141,1614],{"class":40},[34,18143,2089],{"class":87},[34,18145,18146],{"class":40},"y;\n",[34,18148,18149,18152,18155],{"class":36,"line":10517},[34,18150,18151],{"class":40},"    p1.",[34,18153,18154],{"class":149},"setPoint",[34,18156,18157],{"class":40},"(x, y);\n",[34,18159,18160,18162,18165],{"class":36,"line":10523},[34,18161,17247],{"class":40},[34,18163,18164],{"class":149},"setCenter",[34,18166,18167],{"class":40},"(p1);\n",[34,18169,18170,18172,18174,18177],{"class":36,"line":10550},[34,18171,2211],{"class":40},[34,18173,1837],{"class":87},[34,18175,18176],{"class":156},"\"请输入测试点坐标：\"",[34,18178,73],{"class":40},[34,18180,18181,18183],{"class":36,"line":10559},[34,18182,15391],{"class":87},[34,18184,18185],{"class":40}," x1, y1;\n",[34,18187,18188,18190,18192,18195,18197],{"class":36,"line":10565},[34,18189,2665],{"class":40},[34,18191,2089],{"class":87},[34,18193,18194],{"class":40},"x1",[34,18196,2089],{"class":87},[34,18198,18199],{"class":40},"y1;\n",[34,18201,18202],{"class":36,"line":10573},[34,18203,18204],{"class":40},"    Point p2;\n",[34,18206,18207,18210,18212],{"class":36,"line":10578},[34,18208,18209],{"class":40},"    p2.",[34,18211,18154],{"class":149},[34,18213,18214],{"class":40},"(x1, y1);\n",[34,18216,18217,18220],{"class":36,"line":17256},[34,18218,18219],{"class":149},"    isInCircle",[34,18221,18222],{"class":40},"(c1, p2);\n",[34,18224,18225],{"class":36,"line":17262},[34,18226,241],{"class":40},[108,18228,18229],{},"在类中可以让另一个类作为本来的成员",[108,18231,18232],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[108,18234,18235],{},"创建point.h",[24,18237,18239],{"className":789,"code":18238,"language":791,"meta":29,"style":29},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[31,18240,18241,18252,18258,18268,18274,18278,18283,18287,18291,18311,18315,18323,18331,18335,18339,18345,18351],{"__ignoreMap":29},[34,18242,18243,18246,18249],{"class":36,"line":37},[34,18244,18245],{"class":87},"#pragma",[34,18247,18248],{"class":149}," once",[34,18250,18251],{"class":205}," \u002F\u002F防止头文件重复包含\n",[34,18253,18254,18256],{"class":36,"line":51},[34,18255,2603],{"class":87},[34,18257,2606],{"class":156},[34,18259,18260,18262,18264,18266],{"class":36,"line":60},[34,18261,2611],{"class":87},[34,18263,2614],{"class":87},[34,18265,2617],{"class":149},[34,18267,73],{"class":40},[34,18269,18270,18272],{"class":36,"line":76},[34,18271,15347],{"class":87},[34,18273,17633],{"class":149},[34,18275,18276],{"class":36,"line":93},[34,18277,2206],{"class":40},[34,18279,18280],{"class":36,"line":99},[34,18281,18282],{"class":205},"\u002F\u002F做好声明与变量定义就可以\n",[34,18284,18285],{"class":36,"line":353},[34,18286,15369],{"class":87},[34,18288,18289],{"class":36,"line":359},[34,18290,17646],{"class":205},[34,18292,18293,18295,18297,18299,18301,18303,18305,18307,18309],{"class":36,"line":579},[34,18294,15562],{"class":87},[34,18296,17653],{"class":149},[34,18298,801],{"class":40},[34,18300,14690],{"class":87},[34,18302,17660],{"class":5869},[34,18304,13088],{"class":40},[34,18306,14690],{"class":87},[34,18308,17667],{"class":5869},[34,18310,3372],{"class":40},[34,18312,18313],{"class":36,"line":589},[34,18314,17685],{"class":205},[34,18316,18317,18319,18321],{"class":36,"line":601},[34,18318,15391],{"class":87},[34,18320,17692],{"class":149},[34,18322,6289],{"class":40},[34,18324,18325,18327,18329],{"class":36,"line":613},[34,18326,15391],{"class":87},[34,18328,17708],{"class":149},[34,18330,6289],{"class":40},[34,18332,18333],{"class":36,"line":618},[34,18334,3053],{"emptyLinePlaceholder":726},[34,18336,18337],{"class":36,"line":628},[34,18338,15875],{"class":87},[34,18340,18341,18343],{"class":36,"line":640},[34,18342,15391],{"class":87},[34,18344,17730],{"class":40},[34,18346,18347,18349],{"class":36,"line":2301},[34,18348,15391],{"class":87},[34,18350,17737],{"class":40},[34,18352,18353],{"class":36,"line":2307},[34,18354,4648],{"class":40},[108,18356,18357],{},"创建point.cpp",[24,18359,18361],{"className":789,"code":18360,"language":791,"meta":29,"style":29},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[31,18362,18363,18370,18375,18409,18413,18429],{"__ignoreMap":29},[34,18364,18365,18367],{"class":36,"line":37},[34,18366,2603],{"class":87},[34,18368,18369],{"class":156},"\u003Cpoint.h>\n",[34,18371,18372],{"class":36,"line":51},[34,18373,18374],{"class":205},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[34,18376,18377,18379,18382,18385,18387,18389,18391,18393,18395,18397,18399,18401,18403,18405,18407],{"class":36,"line":60},[34,18378,15562],{"class":87},[34,18380,18381],{"class":149}," Point",[34,18383,18384],{"class":40},"::",[34,18386,18154],{"class":149},[34,18388,801],{"class":40},[34,18390,14690],{"class":87},[34,18392,17660],{"class":5869},[34,18394,13088],{"class":40},[34,18396,14690],{"class":87},[34,18398,17667],{"class":5869},[34,18400,17670],{"class":40},[34,18402,153],{"class":87},[34,18404,17675],{"class":40},[34,18406,153],{"class":87},[34,18408,17680],{"class":40},[34,18410,18411],{"class":36,"line":76},[34,18412,17685],{"class":205},[34,18414,18415,18417,18419,18421,18423,18425,18427],{"class":36,"line":93},[34,18416,15391],{"class":87},[34,18418,18381],{"class":149},[34,18420,18384],{"class":40},[34,18422,17916],{"class":149},[34,18424,17695],{"class":40},[34,18426,17698],{"class":87},[34,18428,17701],{"class":40},[34,18430,18431,18433,18435,18437,18439,18441,18443],{"class":36,"line":99},[34,18432,15391],{"class":87},[34,18434,18381],{"class":149},[34,18436,18384],{"class":40},[34,18438,17944],{"class":149},[34,18440,17695],{"class":40},[34,18442,17698],{"class":87},[34,18444,17715],{"class":40},[108,18446,18447],{},"创建circle.h",[24,18449,18451],{"className":789,"code":18450,"language":791,"meta":29,"style":29},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[31,18452,18453,18460,18466,18476,18482,18488,18492,18496,18500,18514,18528,18532,18540,18548,18552,18556,18562,18566,18570],{"__ignoreMap":29},[34,18454,18455,18457],{"class":36,"line":37},[34,18456,18245],{"class":87},[34,18458,18459],{"class":149}," once\n",[34,18461,18462,18464],{"class":36,"line":51},[34,18463,2603],{"class":87},[34,18465,2606],{"class":156},[34,18467,18468,18470,18472,18474],{"class":36,"line":60},[34,18469,2611],{"class":87},[34,18471,2614],{"class":87},[34,18473,2617],{"class":149},[34,18475,73],{"class":40},[34,18477,18478,18480],{"class":36,"line":76},[34,18479,2603],{"class":87},[34,18481,18369],{"class":156},[34,18483,18484,18486],{"class":36,"line":93},[34,18485,15347],{"class":87},[34,18487,15350],{"class":149},[34,18489,18490],{"class":36,"line":99},[34,18491,2206],{"class":40},[34,18493,18494],{"class":36,"line":353},[34,18495,15369],{"class":87},[34,18497,18498],{"class":36,"line":359},[34,18499,17646],{"class":205},[34,18501,18502,18504,18506,18508,18510,18512],{"class":36,"line":579},[34,18503,15562],{"class":87},[34,18505,17766],{"class":149},[34,18507,801],{"class":40},[34,18509,14690],{"class":87},[34,18511,17773],{"class":5869},[34,18513,3372],{"class":40},[34,18515,18516,18518,18520,18522,18524,18526],{"class":36,"line":589},[34,18517,15562],{"class":87},[34,18519,17788],{"class":149},[34,18521,801],{"class":40},[34,18523,17793],{"class":149},[34,18525,17796],{"class":5869},[34,18527,3372],{"class":40},[34,18529,18530],{"class":36,"line":601},[34,18531,17809],{"class":205},[34,18533,18534,18536,18538],{"class":36,"line":613},[34,18535,15391],{"class":87},[34,18537,17816],{"class":149},[34,18539,6289],{"class":40},[34,18541,18542,18544,18546],{"class":36,"line":618},[34,18543,17828],{"class":149},[34,18545,17831],{"class":149},[34,18547,6289],{"class":40},[34,18549,18550],{"class":36,"line":628},[34,18551,3053],{"emptyLinePlaceholder":726},[34,18553,18554],{"class":36,"line":640},[34,18555,15875],{"class":87},[34,18557,18558,18560],{"class":36,"line":2301},[34,18559,15391],{"class":87},[34,18561,15381],{"class":40},[34,18563,18564],{"class":36,"line":2307},[34,18565,17857],{"class":205},[34,18567,18568],{"class":36,"line":2328},[34,18569,17862],{"class":40},[34,18571,18572],{"class":36,"line":2333},[34,18573,4648],{"class":40},[108,18575,18576],{},"创建circle.cpp",[24,18578,18580],{"className":789,"code":18579,"language":791,"meta":29,"style":29},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[31,18581,18582,18589,18612,18634,18639,18655],{"__ignoreMap":29},[34,18583,18584,18586],{"class":36,"line":37},[34,18585,2603],{"class":87},[34,18587,18588],{"class":156},"\u003Ccircle.h>\n",[34,18590,18591,18593,18596,18598,18600,18602,18604,18606,18608,18610],{"class":36,"line":51},[34,18592,6017],{"class":87},[34,18594,18595],{"class":149}," Circle",[34,18597,18384],{"class":40},[34,18599,18112],{"class":149},[34,18601,801],{"class":40},[34,18603,14690],{"class":87},[34,18605,17773],{"class":5869},[34,18607,17776],{"class":40},[34,18609,153],{"class":87},[34,18611,17781],{"class":40},[34,18613,18614,18616,18618,18620,18622,18624,18626,18628,18630,18632],{"class":36,"line":60},[34,18615,6017],{"class":87},[34,18617,18595],{"class":149},[34,18619,18384],{"class":40},[34,18621,18164],{"class":149},[34,18623,801],{"class":40},[34,18625,17793],{"class":149},[34,18627,17796],{"class":5869},[34,18629,17799],{"class":40},[34,18631,153],{"class":87},[34,18633,17804],{"class":40},[34,18635,18636],{"class":36,"line":76},[34,18637,18638],{"class":205},"\u002F\u002F获取属性\n",[34,18640,18641,18643,18645,18647,18649,18651,18653],{"class":36,"line":93},[34,18642,14690],{"class":87},[34,18644,18595],{"class":149},[34,18646,18384],{"class":40},[34,18648,17996],{"class":149},[34,18650,17695],{"class":40},[34,18652,17698],{"class":87},[34,18654,17823],{"class":40},[34,18656,18657,18659,18661,18663,18665,18667,18669],{"class":36,"line":99},[34,18658,17793],{"class":149},[34,18660,18595],{"class":149},[34,18662,18384],{"class":40},[34,18664,17910],{"class":149},[34,18666,17695],{"class":40},[34,18668,17698],{"class":87},[34,18670,17838],{"class":40},[108,18672,18673],{},"使用封装的类",[24,18675,18677],{"className":789,"code":18676,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[31,18678,18679,18685,18695,18701,18707,18731,18735,18761,18787,18811,18825,18829,18841,18845,18849,18853,18865,18869,18873,18881,18885,18889,18893,18897,18901,18911,18917,18925,18933,18943,18949,18961,18969,18977,18987,18993,19005,19009,19017,19023],{"__ignoreMap":29},[34,18680,18681,18683],{"class":36,"line":37},[34,18682,2603],{"class":87},[34,18684,2606],{"class":156},[34,18686,18687,18689,18691,18693],{"class":36,"line":51},[34,18688,2611],{"class":87},[34,18690,2614],{"class":87},[34,18692,2617],{"class":149},[34,18694,73],{"class":40},[34,18696,18697,18699],{"class":36,"line":60},[34,18698,2603],{"class":87},[34,18700,18588],{"class":156},[34,18702,18703,18705],{"class":36,"line":76},[34,18704,2603],{"class":87},[34,18706,18369],{"class":156},[34,18708,18709,18711,18713,18715,18717,18719,18721,18723,18725,18727,18729],{"class":36,"line":93},[34,18710,6017],{"class":87},[34,18712,17873],{"class":149},[34,18714,801],{"class":40},[34,18716,17878],{"class":149},[34,18718,11237],{"class":87},[34,18720,1083],{"class":5869},[34,18722,1173],{"class":40},[34,18724,17793],{"class":149},[34,18726,11237],{"class":87},[34,18728,108],{"class":5869},[34,18730,807],{"class":40},[34,18732,18733],{"class":36,"line":99},[34,18734,2206],{"class":40},[34,18736,18737,18739,18741,18743,18745,18747,18749,18751,18753,18755,18757,18759],{"class":36,"line":353},[34,18738,15391],{"class":87},[34,18740,17903],{"class":40},[34,18742,153],{"class":87},[34,18744,16994],{"class":40},[34,18746,17910],{"class":149},[34,18748,17913],{"class":40},[34,18750,17916],{"class":149},[34,18752,13703],{"class":40},[34,18754,1327],{"class":87},[34,18756,16540],{"class":40},[34,18758,17916],{"class":149},[34,18760,6289],{"class":40},[34,18762,18763,18765,18767,18769,18771,18773,18775,18777,18779,18781,18783,18785],{"class":36,"line":359},[34,18764,15391],{"class":87},[34,18766,17933],{"class":40},[34,18768,153],{"class":87},[34,18770,16994],{"class":40},[34,18772,17910],{"class":149},[34,18774,17913],{"class":40},[34,18776,17944],{"class":149},[34,18778,13703],{"class":40},[34,18780,1327],{"class":87},[34,18782,16540],{"class":40},[34,18784,17944],{"class":149},[34,18786,6289],{"class":40},[34,18788,18789,18791,18793,18795,18797,18799,18801,18803,18805,18807,18809],{"class":36,"line":579},[34,18790,15391],{"class":87},[34,18792,17961],{"class":40},[34,18794,153],{"class":87},[34,18796,17966],{"class":149},[34,18798,17969],{"class":40},[34,18800,1250],{"class":87},[34,18802,17903],{"class":40},[34,18804,1276],{"class":87},[34,18806,17933],{"class":40},[34,18808,1250],{"class":87},[34,18810,17982],{"class":40},[34,18812,18813,18815,18817,18819,18821,18823],{"class":36,"line":589},[34,18814,3754],{"class":87},[34,18816,17989],{"class":40},[34,18818,41],{"class":87},[34,18820,16994],{"class":40},[34,18822,17996],{"class":149},[34,18824,17999],{"class":40},[34,18826,18827],{"class":36,"line":601},[34,18828,2683],{"class":40},[34,18830,18831,18833,18835,18837,18839],{"class":36,"line":613},[34,18832,10322],{"class":40},[34,18834,1837],{"class":87},[34,18836,18012],{"class":156},[34,18838,2104],{"class":87},[34,18840,9493],{"class":40},[34,18842,18843],{"class":36,"line":618},[34,18844,2840],{"class":40},[34,18846,18847],{"class":36,"line":628},[34,18848,17475],{"class":87},[34,18850,18851],{"class":36,"line":640},[34,18852,2683],{"class":40},[34,18854,18855,18857,18859,18861,18863],{"class":36,"line":2301},[34,18856,10322],{"class":40},[34,18858,1837],{"class":87},[34,18860,18037],{"class":156},[34,18862,2104],{"class":87},[34,18864,9493],{"class":40},[34,18866,18867],{"class":36,"line":2307},[34,18868,2840],{"class":40},[34,18870,18871],{"class":36,"line":2328},[34,18872,241],{"class":40},[34,18874,18875,18877,18879],{"class":36,"line":2333},[34,18876,804],{"class":87},[34,18878,2626],{"class":149},[34,18880,2629],{"class":40},[34,18882,18883],{"class":36,"line":2347},[34,18884,2206],{"class":40},[34,18886,18887],{"class":36,"line":2352},[34,18888,15706],{"class":205},[34,18890,18891],{"class":36,"line":2381},[34,18892,15453],{"class":40},[34,18894,18895],{"class":36,"line":2386},[34,18896,18074],{"class":40},[34,18898,18899],{"class":36,"line":2403},[34,18900,17646],{"class":205},[34,18902,18903,18905,18907,18909],{"class":36,"line":2408},[34,18904,2211],{"class":40},[34,18906,1837],{"class":87},[34,18908,18087],{"class":156},[34,18910,73],{"class":40},[34,18912,18913,18915],{"class":36,"line":2413},[34,18914,15391],{"class":87},[34,18916,18096],{"class":40},[34,18918,18919,18921,18923],{"class":36,"line":2418},[34,18920,2665],{"class":40},[34,18922,2089],{"class":87},[34,18924,18105],{"class":40},[34,18926,18927,18929,18931],{"class":36,"line":2432},[34,18928,17247],{"class":40},[34,18930,18112],{"class":149},[34,18932,18115],{"class":40},[34,18934,18935,18937,18939,18941],{"class":36,"line":2437},[34,18936,2211],{"class":40},[34,18938,1837],{"class":87},[34,18940,18124],{"class":156},[34,18942,73],{"class":40},[34,18944,18945,18947],{"class":36,"line":3230},[34,18946,15391],{"class":87},[34,18948,18133],{"class":40},[34,18950,18951,18953,18955,18957,18959],{"class":36,"line":3244},[34,18952,2665],{"class":40},[34,18954,2089],{"class":87},[34,18956,1614],{"class":40},[34,18958,2089],{"class":87},[34,18960,18146],{"class":40},[34,18962,18963,18965,18967],{"class":36,"line":3252},[34,18964,18151],{"class":40},[34,18966,18154],{"class":149},[34,18968,18157],{"class":40},[34,18970,18971,18973,18975],{"class":36,"line":3257},[34,18972,17247],{"class":40},[34,18974,18164],{"class":149},[34,18976,18167],{"class":40},[34,18978,18979,18981,18983,18985],{"class":36,"line":3263},[34,18980,2211],{"class":40},[34,18982,1837],{"class":87},[34,18984,18176],{"class":156},[34,18986,73],{"class":40},[34,18988,18989,18991],{"class":36,"line":3269},[34,18990,15391],{"class":87},[34,18992,18185],{"class":40},[34,18994,18995,18997,18999,19001,19003],{"class":36,"line":3274},[34,18996,2665],{"class":40},[34,18998,2089],{"class":87},[34,19000,18194],{"class":40},[34,19002,2089],{"class":87},[34,19004,18199],{"class":40},[34,19006,19007],{"class":36,"line":8601},[34,19008,18204],{"class":40},[34,19010,19011,19013,19015],{"class":36,"line":8625},[34,19012,18209],{"class":40},[34,19014,18154],{"class":149},[34,19016,18214],{"class":40},[34,19018,19019,19021],{"class":36,"line":8630},[34,19020,18219],{"class":149},[34,19022,18222],{"class":40},[34,19024,19025],{"class":36,"line":8636},[34,19026,241],{"class":40},[14,19028,19030],{"id":19029},"_82对象的初始化清理","8.2对象的初始化清理",[1800,19032,19033,19036],{},[755,19034,19035],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[755,19037,19038],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[19,19040,19042],{"id":19041},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[108,19044,19045,19046,19049],{},"对象的",[111,19047,19048],{},"初始化和清理","也是两个非常重要的安全问题",[108,19051,19052],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[108,19054,19055],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[108,19057,19058,19059,19062,19063,19066],{},"c++利用了",[111,19060,19061],{},"构造函数","和",[111,19064,19065],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[108,19068,19069,19070],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[111,19071,19072],{},"我们不提供构造和析构，编译器会提供",[108,19074,19075],{},[111,19076,19077],{},"编译器提供的构造函数和析构函数是空实现。",[1800,19079,19080,19083],{},[755,19081,19082],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[755,19084,19085,19086,19089],{},"析构函数：主要作用在于对象",[111,19087,19088],{},"销毁前","系统自动调用，执行一些清理工作。",[108,19091,19092,19095],{},[111,19093,19094],{},"构造函数语法：",[31,19096,19097],{},"类名(){}",[752,19099,19100,19103,19106,19109,19112],{},[755,19101,19102],{},"构造函数，没有返回值也不写void",[755,19104,19105],{},"函数名称与类名相同",[755,19107,19108],{},"构造函数可以有参数，因此可以发生重载",[755,19110,19111],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[755,19113,19114,19115,1224],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[31,19116,19117],{},"Person(){}",[108,19119,19120,14448,19123],{},[111,19121,19122],{},"析构函数语法：",[31,19124,19125],{},"~类名(){}",[752,19127,19128,19131,19134,19140],{},[755,19129,19130],{},"析构函数，没有返回值也不写void",[755,19132,19133],{},"函数名称与类名相同,在名称前加上符号  ~",[755,19135,19136,19137],{},"析构函数不可以有参数，因此",[111,19138,19139],{},"不可以发生重载",[755,19141,19142],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[24,19144,19146],{"className":789,"code":19145,"language":791,"meta":29,"style":29},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[31,19147,19148,19154,19158,19162,19167,19174,19178,19191,19195,19200,19207,19211,19224,19228,19232,19236,19240,19248,19252,19260,19264,19268,19276,19280,19285,19289,19296,19300,19313,19317,19325],{"__ignoreMap":29},[34,19149,19150,19152],{"class":36,"line":37},[34,19151,15347],{"class":87},[34,19153,15824],{"class":149},[34,19155,19156],{"class":36,"line":51},[34,19157,2206],{"class":40},[34,19159,19160],{"class":36,"line":60},[34,19161,15369],{"class":87},[34,19163,19164],{"class":36,"line":76},[34,19165,19166],{"class":205},"    \u002F\u002F构造函数\n",[34,19168,19169,19172],{"class":36,"line":93},[34,19170,19171],{"class":149},"    Person",[34,19173,2629],{"class":40},[34,19175,19176],{"class":36,"line":99},[34,19177,2683],{"class":40},[34,19179,19180,19182,19184,19187,19189],{"class":36,"line":353},[34,19181,10322],{"class":40},[34,19183,1837],{"class":87},[34,19185,19186],{"class":156}," \"Person的构造函数调用\"",[34,19188,2104],{"class":87},[34,19190,9493],{"class":40},[34,19192,19193],{"class":36,"line":359},[34,19194,2840],{"class":40},[34,19196,19197],{"class":36,"line":579},[34,19198,19199],{"class":205},"    \u002F\u002F析构函数\n",[34,19201,19202,19205],{"class":36,"line":589},[34,19203,19204],{"class":149},"    ~Person",[34,19206,2629],{"class":40},[34,19208,19209],{"class":36,"line":601},[34,19210,2683],{"class":40},[34,19212,19213,19215,19217,19220,19222],{"class":36,"line":613},[34,19214,10322],{"class":40},[34,19216,1837],{"class":87},[34,19218,19219],{"class":156}," \"Person的析构函数调用\"",[34,19221,2104],{"class":87},[34,19223,9493],{"class":40},[34,19225,19226],{"class":36,"line":618},[34,19227,2840],{"class":40},[34,19229,19230],{"class":36,"line":628},[34,19231,3053],{"emptyLinePlaceholder":726},[34,19233,19234],{"class":36,"line":640},[34,19235,4648],{"class":40},[34,19237,19238],{"class":36,"line":2301},[34,19239,3053],{"emptyLinePlaceholder":726},[34,19241,19242,19244,19246],{"class":36,"line":2307},[34,19243,6017],{"class":87},[34,19245,6241],{"class":149},[34,19247,2629],{"class":40},[34,19249,19250],{"class":36,"line":2328},[34,19251,2206],{"class":40},[34,19253,19254,19257],{"class":36,"line":2333},[34,19255,19256],{"class":40},"    Person p;",[34,19258,19259],{"class":205},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[34,19261,19262],{"class":36,"line":2347},[34,19263,241],{"class":40},[34,19265,19266],{"class":36,"line":2352},[34,19267,3053],{"emptyLinePlaceholder":726},[34,19269,19270,19272,19274],{"class":36,"line":2381},[34,19271,804],{"class":87},[34,19273,2626],{"class":149},[34,19275,11506],{"class":40},[34,19277,19278],{"class":36,"line":2386},[34,19279,13863],{"class":40},[34,19281,19282],{"class":36,"line":2403},[34,19283,19284],{"class":205},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[34,19286,19287],{"class":36,"line":2408},[34,19288,3053],{"emptyLinePlaceholder":726},[34,19290,19291,19293],{"class":36,"line":2413},[34,19292,19256],{"class":40},[34,19294,19295],{"class":205},"\u002F\u002F只有构造函数\n",[34,19297,19298],{"class":36,"line":2418},[34,19299,3053],{"emptyLinePlaceholder":726},[34,19301,19302,19304,19306,19308,19310],{"class":36,"line":2432},[34,19303,2956],{"class":149},[34,19305,801],{"class":40},[34,19307,2961],{"class":156},[34,19309,6619],{"class":40},[34,19311,19312],{"class":205},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[34,19314,19315],{"class":36,"line":2437},[34,19316,3053],{"emptyLinePlaceholder":726},[34,19318,19319,19321,19323],{"class":36,"line":3230},[34,19320,4743],{"class":87},[34,19322,4746],{"class":63},[34,19324,73],{"class":40},[34,19326,19327],{"class":36,"line":3244},[34,19328,241],{"class":40},[108,19330,19331],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[19,19333,19335],{"id":19334},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[108,19337,19338],{},"两种分类方式：",[108,19340,19341],{},"​\t按参数分为： 有参构造和无参构造",[108,19343,19344],{},"​\t按类型分为： 普通构造和拷贝构造",[108,19346,19347],{},"三种调用方式：",[108,19349,19350],{},"​\t括号法",[108,19352,19353],{},"​\t显示法",[108,19355,19356],{},"​\t隐式转换法",[24,19358,19360],{"className":789,"code":19359,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[31,19361,19362,19368,19378,19383,19388,19393,19398,19402,19410,19414,19418,19422,19428,19432,19445,19449,19461,19465,19474,19487,19491,19495,19501,19505,19518,19522,19527,19543,19547,19552,19561,19574,19578,19584,19588,19593,19601,19605,19610,19614,19622,19626,19631,19636,19641,19646,19651,19655,19660,19665,19670,19675,19679,19684,19689,19705,19717,19722,19726,19731,19736,19741,19745,19750,19764,19777,19781,19789,19793,19799,19805,19813],{"__ignoreMap":29},[34,19363,19364,19366],{"class":36,"line":37},[34,19365,2603],{"class":87},[34,19367,2606],{"class":156},[34,19369,19370,19372,19374,19376],{"class":36,"line":51},[34,19371,2611],{"class":87},[34,19373,2614],{"class":87},[34,19375,2617],{"class":149},[34,19377,73],{"class":40},[34,19379,19380],{"class":36,"line":60},[34,19381,19382],{"class":205},"\u002F\u002F1.构造函数的分类及调用\n",[34,19384,19385],{"class":36,"line":76},[34,19386,19387],{"class":205},"\u002F\u002F分类\n",[34,19389,19390],{"class":36,"line":93},[34,19391,19392],{"class":205},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[34,19394,19395],{"class":36,"line":99},[34,19396,19397],{"class":205},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[34,19399,19400],{"class":36,"line":353},[34,19401,3053],{"emptyLinePlaceholder":726},[34,19403,19404,19406,19408],{"class":36,"line":359},[34,19405,15347],{"class":87},[34,19407,16222],{"class":149},[34,19409,3327],{"class":40},[34,19411,19412],{"class":36,"line":579},[34,19413,2206],{"class":40},[34,19415,19416],{"class":36,"line":589},[34,19417,15369],{"class":87},[34,19419,19420],{"class":36,"line":601},[34,19421,19166],{"class":205},[34,19423,19424,19426],{"class":36,"line":613},[34,19425,19171],{"class":149},[34,19427,2629],{"class":40},[34,19429,19430],{"class":36,"line":618},[34,19431,2683],{"class":40},[34,19433,19434,19436,19438,19441,19443],{"class":36,"line":628},[34,19435,4104],{"class":40},[34,19437,1837],{"class":87},[34,19439,19440],{"class":156},"\"Person构造函数无参构造\"",[34,19442,1837],{"class":87},[34,19444,1859],{"class":40},[34,19446,19447],{"class":36,"line":640},[34,19448,2840],{"class":40},[34,19450,19451,19453,19455,19457,19459],{"class":36,"line":2301},[34,19452,19171],{"class":149},[34,19454,801],{"class":40},[34,19456,804],{"class":87},[34,19458,2058],{"class":5869},[34,19460,807],{"class":40},[34,19462,19463],{"class":36,"line":2307},[34,19464,2683],{"class":40},[34,19466,19467,19470,19472],{"class":36,"line":2328},[34,19468,19469],{"class":40},"        age",[34,19471,153],{"class":87},[34,19473,6850],{"class":40},[34,19475,19476,19478,19480,19483,19485],{"class":36,"line":2333},[34,19477,4104],{"class":40},[34,19479,1837],{"class":87},[34,19481,19482],{"class":156},"\"Person构造函数有参构造\"",[34,19484,1837],{"class":87},[34,19486,1859],{"class":40},[34,19488,19489],{"class":36,"line":2347},[34,19490,2840],{"class":40},[34,19492,19493],{"class":36,"line":2352},[34,19494,19199],{"class":205},[34,19496,19497,19499],{"class":36,"line":2381},[34,19498,19204],{"class":149},[34,19500,2629],{"class":40},[34,19502,19503],{"class":36,"line":2386},[34,19504,2683],{"class":40},[34,19506,19507,19509,19511,19514,19516],{"class":36,"line":2403},[34,19508,4104],{"class":40},[34,19510,1837],{"class":87},[34,19512,19513],{"class":156},"\"Person析构函数被调用\"",[34,19515,1837],{"class":87},[34,19517,1859],{"class":40},[34,19519,19520],{"class":36,"line":2408},[34,19521,2840],{"class":40},[34,19523,19524],{"class":36,"line":2413},[34,19525,19526],{"class":205},"    \u002F\u002F拷贝构造函数\n",[34,19528,19529,19531,19533,19535,19537,19539,19541],{"class":36,"line":2418},[34,19530,19171],{"class":149},[34,19532,801],{"class":40},[34,19534,7445],{"class":87},[34,19536,16222],{"class":149},[34,19538,11237],{"class":87},[34,19540,108],{"class":5869},[34,19542,807],{"class":40},[34,19544,19545],{"class":36,"line":2432},[34,19546,2683],{"class":40},[34,19548,19549],{"class":36,"line":2437},[34,19550,19551],{"class":205},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[34,19553,19554,19556,19558],{"class":36,"line":3230},[34,19555,19469],{"class":40},[34,19557,153],{"class":87},[34,19559,19560],{"class":40},"p.age;\n",[34,19562,19563,19565,19567,19570,19572],{"class":36,"line":3244},[34,19564,4104],{"class":40},[34,19566,1837],{"class":87},[34,19568,19569],{"class":156},"\"Person拷贝构造函数被调用\"",[34,19571,1837],{"class":87},[34,19573,1859],{"class":40},[34,19575,19576],{"class":36,"line":3252},[34,19577,2840],{"class":40},[34,19579,19580,19582],{"class":36,"line":3257},[34,19581,2638],{"class":87},[34,19583,8450],{"class":40},[34,19585,19586],{"class":36,"line":3263},[34,19587,4648],{"class":40},[34,19589,19590],{"class":36,"line":3269},[34,19591,19592],{"class":205},"\u002F\u002F调用\n",[34,19594,19595,19597,19599],{"class":36,"line":3274},[34,19596,6017],{"class":87},[34,19598,6241],{"class":149},[34,19600,2629],{"class":40},[34,19602,19603],{"class":36,"line":8601},[34,19604,2206],{"class":40},[34,19606,19607],{"class":36,"line":8625},[34,19608,19609],{"class":205},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[34,19611,19612],{"class":36,"line":8630},[34,19613,241],{"class":40},[34,19615,19616,19618,19620],{"class":36,"line":8636},[34,19617,6017],{"class":87},[34,19619,6310],{"class":149},[34,19621,2629],{"class":40},[34,19623,19624],{"class":36,"line":8663},[34,19625,2206],{"class":40},[34,19627,19628],{"class":36,"line":8668},[34,19629,19630],{"class":205},"    \u002F\u002F1.括号法\n",[34,19632,19633],{"class":36,"line":8674},[34,19634,19635],{"class":205},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[34,19637,19638],{"class":36,"line":8686},[34,19639,19640],{"class":205},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[34,19642,19643],{"class":36,"line":8698},[34,19644,19645],{"class":205},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[34,19647,19648],{"class":36,"line":8710},[34,19649,19650],{"class":205},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[34,19652,19653],{"class":36,"line":10369},[34,19654,3053],{"emptyLinePlaceholder":726},[34,19656,19657],{"class":36,"line":10394},[34,19658,19659],{"class":205},"    \u002F\u002F注意事项\n",[34,19661,19662],{"class":36,"line":10417},[34,19663,19664],{"class":205},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[34,19666,19667],{"class":36,"line":10441},[34,19668,19669],{"class":205},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[34,19671,19672],{"class":36,"line":10446},[34,19673,19674],{"class":205},"    \u002F\u002F Person p4();\n",[34,19676,19677],{"class":36,"line":10451},[34,19678,3053],{"emptyLinePlaceholder":726},[34,19680,19681],{"class":36,"line":10456},[34,19682,19683],{"class":205},"    \u002F\u002F2.显示法\n",[34,19685,19686],{"class":36,"line":10465},[34,19687,19688],{"class":40},"    Person p1;\n",[34,19690,19691,19694,19696,19699,19701,19703],{"class":36,"line":10470},[34,19692,19693],{"class":40},"    Person p2",[34,19695,153],{"class":87},[34,19697,19698],{"class":149},"Person",[34,19700,801],{"class":40},[34,19702,1241],{"class":63},[34,19704,3372],{"class":40},[34,19706,19707,19710,19712,19714],{"class":36,"line":10476},[34,19708,19709],{"class":40},"    Person p3",[34,19711,153],{"class":87},[34,19713,19698],{"class":149},[34,19715,19716],{"class":40},"(p2);\n",[34,19718,19719],{"class":36,"line":10497},[34,19720,19721],{"class":205},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[34,19723,19724],{"class":36,"line":10503},[34,19725,3053],{"emptyLinePlaceholder":726},[34,19727,19728],{"class":36,"line":10517},[34,19729,19730],{"class":205},"    \u002F\u002F 注意事项2\n",[34,19732,19733],{"class":36,"line":10523},[34,19734,19735],{"class":205},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[34,19737,19738],{"class":36,"line":10550},[34,19739,19740],{"class":205},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[34,19742,19743],{"class":36,"line":10559},[34,19744,3053],{"emptyLinePlaceholder":726},[34,19746,19747],{"class":36,"line":10565},[34,19748,19749],{"class":205},"    \u002F\u002F3.隐士转换法\n",[34,19751,19752,19755,19757,19759,19761],{"class":36,"line":10573},[34,19753,19754],{"class":40},"    Person p4",[34,19756,153],{"class":87},[34,19758,1241],{"class":63},[34,19760,854],{"class":40},[34,19762,19763],{"class":205},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[34,19765,19766,19769,19771,19774],{"class":36,"line":10578},[34,19767,19768],{"class":40},"    Person p5",[34,19770,153],{"class":87},[34,19772,19773],{"class":40},"p4;",[34,19775,19776],{"class":205}," \u002F\u002F 这里会调用拷贝构造函数\n",[34,19778,19779],{"class":36,"line":17256},[34,19780,241],{"class":40},[34,19782,19783,19785,19787],{"class":36,"line":17262},[34,19784,804],{"class":87},[34,19786,2626],{"class":149},[34,19788,2629],{"class":40},[34,19790,19791],{"class":36,"line":17285},[34,19792,2206],{"class":40},[34,19794,19795,19797],{"class":36,"line":17291},[34,19796,6286],{"class":149},[34,19798,6289],{"class":40},[34,19800,19801,19803],{"class":36,"line":17314},[34,19802,6355],{"class":149},[34,19804,6289],{"class":40},[34,19806,19807,19809,19811],{"class":36,"line":17328},[34,19808,4743],{"class":87},[34,19810,4746],{"class":63},[34,19812,73],{"class":40},[34,19814,19815],{"class":36,"line":17348},[34,19816,241],{"class":40},[108,19818,19819,19822],{},[111,19820,19821],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[19,19824,19826],{"id":19825},"_823拷贝构造函数","8.2.3拷贝构造函数",[108,19828,19829],{},"C++中拷贝构造函数调用时机通常有三种情况",[1800,19831,19832,19835,19838],{},[755,19833,19834],{},"使用一个已经创建完毕的对象来初始化一个新对象",[755,19836,19837],{},"值传递的方式给函数参数传值",[755,19839,19840],{},"以值方式返回局部对象",[24,19842,19844],{"className":789,"code":19843,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[31,19845,19846,19852,19862,19866,19871,19875,19880,19885,19890,19896,19900,19904,19910,19914,19927,19931,19936,19948,19952,19960,19973,19977,19981,19997,20001,20010,20023,20027,20033,20037,20049,20053,20059,20063,20067,20075,20079,20092,20100,20118,20122,20127,20132,20147,20151,20164,20168,20176,20180,20184,20192,20196,20201,20210,20214,20218,20243,20253,20257,20265,20269,20280,20305,20309,20313,20317,20325,20329,20334,20339,20346,20351,20356,20361,20366,20370,20375,20379,20384,20388,20393,20398,20402,20406,20411,20416,20424],{"__ignoreMap":29},[34,19847,19848,19850],{"class":36,"line":37},[34,19849,2603],{"class":87},[34,19851,2606],{"class":156},[34,19853,19854,19856,19858,19860],{"class":36,"line":51},[34,19855,2611],{"class":87},[34,19857,2614],{"class":87},[34,19859,2617],{"class":149},[34,19861,73],{"class":40},[34,19863,19864],{"class":36,"line":60},[34,19865,3053],{"emptyLinePlaceholder":726},[34,19867,19868],{"class":36,"line":76},[34,19869,19870],{"class":205},"\u002F\u002F拷贝构造函数调用时机\n",[34,19872,19873],{"class":36,"line":93},[34,19874,3053],{"emptyLinePlaceholder":726},[34,19876,19877],{"class":36,"line":99},[34,19878,19879],{"class":205},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[34,19881,19882],{"class":36,"line":353},[34,19883,19884],{"class":205},"\u002F\u002F2.值传递的方式给函数参数传值\n",[34,19886,19887],{"class":36,"line":359},[34,19888,19889],{"class":205},"\u002F\u002F3.以值方式返回局部对象\n",[34,19891,19892,19894],{"class":36,"line":579},[34,19893,15347],{"class":87},[34,19895,15824],{"class":149},[34,19897,19898],{"class":36,"line":589},[34,19899,2206],{"class":40},[34,19901,19902],{"class":36,"line":601},[34,19903,15369],{"class":87},[34,19905,19906,19908],{"class":36,"line":613},[34,19907,19171],{"class":149},[34,19909,2629],{"class":40},[34,19911,19912],{"class":36,"line":618},[34,19913,2683],{"class":40},[34,19915,19916,19918,19920,19923,19925],{"class":36,"line":628},[34,19917,10322],{"class":40},[34,19919,1837],{"class":87},[34,19921,19922],{"class":156}," \"Person的默认构造函数调用\"",[34,19924,2104],{"class":87},[34,19926,9493],{"class":40},[34,19928,19929],{"class":36,"line":640},[34,19930,2840],{"class":40},[34,19932,19933],{"class":36,"line":2301},[34,19934,19935],{"class":205},"    \u002F\u002F有参构造\n",[34,19937,19938,19940,19942,19944,19946],{"class":36,"line":2307},[34,19939,19171],{"class":149},[34,19941,801],{"class":40},[34,19943,804],{"class":87},[34,19945,16341],{"class":5869},[34,19947,807],{"class":40},[34,19949,19950],{"class":36,"line":2328},[34,19951,2683],{"class":40},[34,19953,19954,19956,19958],{"class":36,"line":2333},[34,19955,16395],{"class":40},[34,19957,153],{"class":87},[34,19959,8450],{"class":40},[34,19961,19962,19964,19966,19969,19971],{"class":36,"line":2347},[34,19963,10322],{"class":40},[34,19965,1837],{"class":87},[34,19967,19968],{"class":156}," \"Person的有参构造函数调用\"",[34,19970,2104],{"class":87},[34,19972,9493],{"class":40},[34,19974,19975],{"class":36,"line":2352},[34,19976,2840],{"class":40},[34,19978,19979],{"class":36,"line":2381},[34,19980,19526],{"class":205},[34,19982,19983,19985,19987,19989,19991,19993,19995],{"class":36,"line":2386},[34,19984,19171],{"class":149},[34,19986,801],{"class":40},[34,19988,7445],{"class":87},[34,19990,16222],{"class":149},[34,19992,11237],{"class":87},[34,19994,108],{"class":5869},[34,19996,807],{"class":40},[34,19998,19999],{"class":36,"line":2403},[34,20000,2683],{"class":40},[34,20002,20003,20005,20007],{"class":36,"line":2408},[34,20004,16395],{"class":40},[34,20006,153],{"class":87},[34,20008,20009],{"class":40}," p.m_Age;\n",[34,20011,20012,20014,20016,20019,20021],{"class":36,"line":2413},[34,20013,10322],{"class":40},[34,20015,1837],{"class":87},[34,20017,20018],{"class":156}," \"Person的拷贝构造函数调用\"",[34,20020,2104],{"class":87},[34,20022,9493],{"class":40},[34,20024,20025],{"class":36,"line":2418},[34,20026,2840],{"class":40},[34,20028,20029,20031],{"class":36,"line":2432},[34,20030,19204],{"class":149},[34,20032,2629],{"class":40},[34,20034,20035],{"class":36,"line":2437},[34,20036,2683],{"class":40},[34,20038,20039,20041,20043,20045,20047],{"class":36,"line":3230},[34,20040,10322],{"class":40},[34,20042,1837],{"class":87},[34,20044,19219],{"class":156},[34,20046,2104],{"class":87},[34,20048,9493],{"class":40},[34,20050,20051],{"class":36,"line":3244},[34,20052,2840],{"class":40},[34,20054,20055,20057],{"class":36,"line":3252},[34,20056,2638],{"class":87},[34,20058,16318],{"class":40},[34,20060,20061],{"class":36,"line":3257},[34,20062,4648],{"class":40},[34,20064,20065],{"class":36,"line":3263},[34,20066,19879],{"class":205},[34,20068,20069,20071,20073],{"class":36,"line":3269},[34,20070,6017],{"class":87},[34,20072,6241],{"class":149},[34,20074,2629],{"class":40},[34,20076,20077],{"class":36,"line":3274},[34,20078,2206],{"class":40},[34,20080,20081,20084,20086,20088,20090],{"class":36,"line":8601},[34,20082,20083],{"class":40},"    Person ",[34,20085,7783],{"class":149},[34,20087,801],{"class":40},[34,20089,1495],{"class":63},[34,20091,3372],{"class":40},[34,20093,20094,20096,20098],{"class":36,"line":8625},[34,20095,20083],{"class":40},[34,20097,7686],{"class":149},[34,20099,18167],{"class":40},[34,20101,20102,20104,20106,20109,20111,20114,20116],{"class":36,"line":8630},[34,20103,2211],{"class":40},[34,20105,1837],{"class":87},[34,20107,20108],{"class":156},"\"P2的年龄为：\"",[34,20110,1837],{"class":87},[34,20112,20113],{"class":40},"p2.m_Age",[34,20115,1837],{"class":87},[34,20117,1859],{"class":40},[34,20119,20120],{"class":36,"line":8636},[34,20121,241],{"class":40},[34,20123,20124],{"class":36,"line":8663},[34,20125,20126],{"class":205},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[34,20128,20129],{"class":36,"line":8668},[34,20130,20131],{"class":205},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[34,20133,20134,20136,20139,20141,20143,20145],{"class":36,"line":8674},[34,20135,6017],{"class":87},[34,20137,20138],{"class":149}," doWork",[34,20140,801],{"class":40},[34,20142,19698],{"class":149},[34,20144,7478],{"class":5869},[34,20146,807],{"class":40},[34,20148,20149],{"class":36,"line":8686},[34,20150,2206],{"class":40},[34,20152,20153,20155,20157,20160,20162],{"class":36,"line":8698},[34,20154,7182],{"class":40},[34,20156,1837],{"class":87},[34,20158,20159],{"class":156}," \"doWork函数调用\"",[34,20161,2104],{"class":87},[34,20163,9493],{"class":40},[34,20165,20166],{"class":36,"line":8710},[34,20167,241],{"class":40},[34,20169,20170,20172,20174],{"class":36,"line":10369},[34,20171,6017],{"class":87},[34,20173,6310],{"class":149},[34,20175,2629],{"class":40},[34,20177,20178],{"class":36,"line":10394},[34,20179,2206],{"class":40},[34,20181,20182],{"class":36,"line":10417},[34,20183,15966],{"class":40},[34,20185,20186,20189],{"class":36,"line":10441},[34,20187,20188],{"class":149},"    doWork",[34,20190,20191],{"class":40},"(p);\n",[34,20193,20194],{"class":36,"line":10446},[34,20195,241],{"class":40},[34,20197,20198],{"class":36,"line":10451},[34,20199,20200],{"class":205},"\u002F\u002F 3.以值方式返回局部对象\n",[34,20202,20203,20205,20208],{"class":36,"line":10456},[34,20204,19698],{"class":149},[34,20206,20207],{"class":149}," doWork2",[34,20209,2629],{"class":40},[34,20211,20212],{"class":36,"line":10465},[34,20213,2206],{"class":40},[34,20215,20216],{"class":36,"line":10470},[34,20217,19688],{"class":40},[34,20219,20220,20222,20224,20226,20228,20230,20232,20234,20236,20238,20240],{"class":36,"line":10476},[34,20221,2211],{"class":40},[34,20223,1837],{"class":87},[34,20225,801],{"class":40},[34,20227,804],{"class":87},[34,20229,7171],{"class":87},[34,20231,1224],{"class":40},[34,20233,1148],{"class":87},[34,20235,7783],{"class":40},[34,20237,1837],{"class":87},[34,20239,1902],{"class":40},[34,20241,20242],{"class":205},"\u002F\u002F打印p1的地址\n",[34,20244,20245,20247,20250],{"class":36,"line":10497},[34,20246,4743],{"class":87},[34,20248,20249],{"class":40}," p1;",[34,20251,20252],{"class":205},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[34,20254,20255],{"class":36,"line":10503},[34,20256,241],{"class":40},[34,20258,20259,20261,20263],{"class":36,"line":10517},[34,20260,6017],{"class":87},[34,20262,6382],{"class":149},[34,20264,2629],{"class":40},[34,20266,20267],{"class":36,"line":10523},[34,20268,2206],{"class":40},[34,20270,20271,20274,20276,20278],{"class":36,"line":10550},[34,20272,20273],{"class":40},"    Person p ",[34,20275,153],{"class":87},[34,20277,20207],{"class":149},[34,20279,6289],{"class":40},[34,20281,20282,20284,20286,20288,20290,20292,20294,20296,20298,20300,20302],{"class":36,"line":10559},[34,20283,2211],{"class":40},[34,20285,1837],{"class":87},[34,20287,801],{"class":40},[34,20289,804],{"class":87},[34,20291,7171],{"class":87},[34,20293,1224],{"class":40},[34,20295,1148],{"class":87},[34,20297,108],{"class":40},[34,20299,1837],{"class":87},[34,20301,1902],{"class":40},[34,20303,20304],{"class":205},"\u002F\u002F打印p的地址\n",[34,20306,20307],{"class":36,"line":10565},[34,20308,241],{"class":40},[34,20310,20311],{"class":36,"line":10573},[34,20312,3053],{"emptyLinePlaceholder":726},[34,20314,20315],{"class":36,"line":10578},[34,20316,3053],{"emptyLinePlaceholder":726},[34,20318,20319,20321,20323],{"class":36,"line":17256},[34,20320,804],{"class":87},[34,20322,2626],{"class":149},[34,20324,2629],{"class":40},[34,20326,20327],{"class":36,"line":17262},[34,20328,2206],{"class":40},[34,20330,20331],{"class":36,"line":17285},[34,20332,20333],{"class":205},"    \u002F\u002F test01();\n",[34,20335,20336],{"class":36,"line":17291},[34,20337,20338],{"class":205},"    \u002F\u002F test02();\n",[34,20340,20341,20344],{"class":36,"line":17314},[34,20342,20343],{"class":149},"    test03",[34,20345,6289],{"class":40},[34,20347,20348],{"class":36,"line":17328},[34,20349,20350],{"class":205},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[34,20352,20353],{"class":36,"line":17348},[34,20354,20355],{"class":205},"\u002F\u002F 输出结果如下：\n",[34,20357,20358],{"class":36,"line":17354},[34,20359,20360],{"class":205},"\u002F\u002F Person的默认构造函数调用\n",[34,20362,20363],{"class":36,"line":17365},[34,20364,20365],{"class":205},"\u002F\u002F 0x7fffffffceec\n",[34,20367,20368],{"class":36,"line":17388},[34,20369,20365],{"class":205},[34,20371,20372],{"class":36,"line":17410},[34,20373,20374],{"class":205},"\u002F\u002F Person的析构函数调用\n",[34,20376,20377],{"class":36,"line":17415},[34,20378,3053],{"emptyLinePlaceholder":726},[34,20380,20381],{"class":36,"line":17421},[34,20382,20383],{"class":205},"\u002F\u002F 之前的输出结果如下：\n",[34,20385,20386],{"class":36,"line":17435},[34,20387,20360],{"class":205},[34,20389,20390],{"class":36,"line":17448},[34,20391,20392],{"class":205},"\u002F\u002F 地址\n",[34,20394,20395],{"class":36,"line":17453},[34,20396,20397],{"class":205},"\u002F\u002F Person的拷贝构造函数调用\n",[34,20399,20400],{"class":36,"line":17467},[34,20401,20374],{"class":205},[34,20403,20404],{"class":36,"line":17472},[34,20405,20392],{"class":205},[34,20407,20408],{"class":36,"line":17478},[34,20409,20410],{"class":205},"\u002F\u002F (这两次输出的地址也是不同的) \n",[34,20412,20413],{"class":36,"line":17483},[34,20414,20415],{"class":205},"\u002F\u002F Person的析构函数调用     \n",[34,20417,20418,20420,20422],{"class":36,"line":17497},[34,20419,4743],{"class":87},[34,20421,4746],{"class":63},[34,20423,73],{"class":40},[34,20425,20426],{"class":36,"line":17502},[34,20427,241],{"class":40},[108,20429,20430],{},"简化版理解",[24,20432,20434],{"className":789,"code":20433,"language":791,"meta":29,"style":29},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,20435,20436,20444,20448,20454,20467,20478,20482,20494,20507,20515,20519,20535,20548,20557,20561,20566,20572,20585,20589,20593,20600,20604,20608,20613,20621,20625,20641,20654,20667,20671,20676,20684,20688,20692,20697,20702,20718,20726,20733,20739,20743,20747,20752,20760,20764,20768,20791,20798,20802,20806,20814,20818,20828,20850,20854,20858,20862,20870,20874,20879,20884,20890,20894,20904,20908,20916],{"__ignoreMap":29},[34,20437,20438,20440,20442],{"class":36,"line":37},[34,20439,15347],{"class":87},[34,20441,16222],{"class":149},[34,20443,57],{"class":40},[34,20445,20446],{"class":36,"line":51},[34,20447,15369],{"class":87},[34,20449,20450,20452],{"class":36,"line":60},[34,20451,19171],{"class":149},[34,20453,11506],{"class":40},[34,20455,20456,20458,20460,20463,20465],{"class":36,"line":76},[34,20457,10322],{"class":40},[34,20459,1837],{"class":87},[34,20461,20462],{"class":156}," \"无参构造函数!\"",[34,20464,2104],{"class":87},[34,20466,9493],{"class":40},[34,20468,20469,20472,20474,20476],{"class":36,"line":93},[34,20470,20471],{"class":40},"        mAge ",[34,20473,153],{"class":87},[34,20475,4746],{"class":63},[34,20477,73],{"class":40},[34,20479,20480],{"class":36,"line":99},[34,20481,2840],{"class":40},[34,20483,20484,20486,20488,20490,20492],{"class":36,"line":353},[34,20485,19171],{"class":149},[34,20487,801],{"class":40},[34,20489,804],{"class":87},[34,20491,16341],{"class":5869},[34,20493,13095],{"class":40},[34,20495,20496,20498,20500,20503,20505],{"class":36,"line":359},[34,20497,10322],{"class":40},[34,20499,1837],{"class":87},[34,20501,20502],{"class":156}," \"有参构造函数!\"",[34,20504,2104],{"class":87},[34,20506,9493],{"class":40},[34,20508,20509,20511,20513],{"class":36,"line":579},[34,20510,20471],{"class":40},[34,20512,153],{"class":87},[34,20514,8450],{"class":40},[34,20516,20517],{"class":36,"line":589},[34,20518,2840],{"class":40},[34,20520,20521,20523,20525,20527,20529,20531,20533],{"class":36,"line":601},[34,20522,19171],{"class":149},[34,20524,801],{"class":40},[34,20526,7445],{"class":87},[34,20528,16222],{"class":149},[34,20530,1148],{"class":87},[34,20532,7478],{"class":5869},[34,20534,13095],{"class":40},[34,20536,20537,20539,20541,20544,20546],{"class":36,"line":613},[34,20538,10322],{"class":40},[34,20540,1837],{"class":87},[34,20542,20543],{"class":156}," \"拷贝构造函数!\"",[34,20545,2104],{"class":87},[34,20547,9493],{"class":40},[34,20549,20550,20552,20554],{"class":36,"line":618},[34,20551,20471],{"class":40},[34,20553,153],{"class":87},[34,20555,20556],{"class":40}," p.mAge;\n",[34,20558,20559],{"class":36,"line":628},[34,20560,2840],{"class":40},[34,20562,20563],{"class":36,"line":640},[34,20564,20565],{"class":205},"    \u002F\u002F析构函数在释放内存之前调用\n",[34,20567,20568,20570],{"class":36,"line":2301},[34,20569,19204],{"class":149},[34,20571,11506],{"class":40},[34,20573,20574,20576,20578,20581,20583],{"class":36,"line":2307},[34,20575,10322],{"class":40},[34,20577,1837],{"class":87},[34,20579,20580],{"class":156}," \"析构函数!\"",[34,20582,2104],{"class":87},[34,20584,9493],{"class":40},[34,20586,20587],{"class":36,"line":2328},[34,20588,2840],{"class":40},[34,20590,20591],{"class":36,"line":2333},[34,20592,15369],{"class":87},[34,20594,20595,20597],{"class":36,"line":2347},[34,20596,2638],{"class":87},[34,20598,20599],{"class":40}," mAge;\n",[34,20601,20602],{"class":36,"line":2352},[34,20603,4648],{"class":40},[34,20605,20606],{"class":36,"line":2381},[34,20607,3053],{"emptyLinePlaceholder":726},[34,20609,20610],{"class":36,"line":2386},[34,20611,20612],{"class":205},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[34,20614,20615,20617,20619],{"class":36,"line":2403},[34,20616,6017],{"class":87},[34,20618,6241],{"class":149},[34,20620,11506],{"class":40},[34,20622,20623],{"class":36,"line":2408},[34,20624,3053],{"emptyLinePlaceholder":726},[34,20626,20627,20629,20632,20634,20636,20638],{"class":36,"line":2413},[34,20628,20083],{"class":40},[34,20630,20631],{"class":149},"man",[34,20633,801],{"class":40},[34,20635,1106],{"class":63},[34,20637,6619],{"class":40},[34,20639,20640],{"class":205}," \u002F\u002Fp对象已经创建完毕\n",[34,20642,20643,20645,20648,20651],{"class":36,"line":2418},[34,20644,20083],{"class":40},[34,20646,20647],{"class":149},"newman",[34,20649,20650],{"class":40},"(man);",[34,20652,20653],{"class":205}," \u002F\u002F调用拷贝构造函数\n",[34,20655,20656,20659,20661,20664],{"class":36,"line":2432},[34,20657,20658],{"class":40},"    Person newman2 ",[34,20660,153],{"class":87},[34,20662,20663],{"class":40}," man;",[34,20665,20666],{"class":205}," \u002F\u002F拷贝构造\n",[34,20668,20669],{"class":36,"line":2437},[34,20670,3053],{"emptyLinePlaceholder":726},[34,20672,20673],{"class":36,"line":3230},[34,20674,20675],{"class":205},"    \u002F\u002FPerson newman3;\n",[34,20677,20678,20681],{"class":36,"line":3244},[34,20679,20680],{"class":205},"    \u002F\u002Fnewman3 = man;",[34,20682,20683],{"class":205}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[34,20685,20686],{"class":36,"line":3252},[34,20687,241],{"class":40},[34,20689,20690],{"class":36,"line":3257},[34,20691,3053],{"emptyLinePlaceholder":726},[34,20693,20694],{"class":36,"line":3263},[34,20695,20696],{"class":205},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[34,20698,20699],{"class":36,"line":3269},[34,20700,20701],{"class":205},"\u002F\u002F相当于Person p1 = p;\n",[34,20703,20704,20706,20708,20710,20712,20715],{"class":36,"line":3274},[34,20705,6017],{"class":87},[34,20707,20138],{"class":149},[34,20709,801],{"class":40},[34,20711,19698],{"class":149},[34,20713,20714],{"class":5869}," p1",[34,20716,20717],{"class":40},") {}\n",[34,20719,20720,20722,20724],{"class":36,"line":8601},[34,20721,6017],{"class":87},[34,20723,6310],{"class":149},[34,20725,11506],{"class":40},[34,20727,20728,20730],{"class":36,"line":8625},[34,20729,19256],{"class":40},[34,20731,20732],{"class":205}," \u002F\u002F无参构造函数\n",[34,20734,20735,20737],{"class":36,"line":8630},[34,20736,20188],{"class":149},[34,20738,20191],{"class":40},[34,20740,20741],{"class":36,"line":8636},[34,20742,241],{"class":40},[34,20744,20745],{"class":36,"line":8663},[34,20746,3053],{"emptyLinePlaceholder":726},[34,20748,20749],{"class":36,"line":8668},[34,20750,20751],{"class":205},"\u002F\u002F3. 以值方式返回局部对象\n",[34,20753,20754,20756,20758],{"class":36,"line":8674},[34,20755,19698],{"class":149},[34,20757,20207],{"class":149},[34,20759,2629],{"class":40},[34,20761,20762],{"class":36,"line":8686},[34,20763,2206],{"class":40},[34,20765,20766],{"class":36,"line":8698},[34,20767,19688],{"class":40},[34,20769,20770,20772,20774,20776,20778,20780,20782,20784,20787,20789],{"class":36,"line":8710},[34,20771,7182],{"class":40},[34,20773,1837],{"class":87},[34,20775,2312],{"class":40},[34,20777,804],{"class":87},[34,20779,7171],{"class":87},[34,20781,1224],{"class":40},[34,20783,1148],{"class":87},[34,20785,20786],{"class":40},"p1 ",[34,20788,1837],{"class":87},[34,20790,9493],{"class":40},[34,20792,20793,20795],{"class":36,"line":10369},[34,20794,4743],{"class":87},[34,20796,20797],{"class":40}," p1;\n",[34,20799,20800],{"class":36,"line":10394},[34,20801,241],{"class":40},[34,20803,20804],{"class":36,"line":10417},[34,20805,3053],{"emptyLinePlaceholder":726},[34,20807,20808,20810,20812],{"class":36,"line":10441},[34,20809,6017],{"class":87},[34,20811,6382],{"class":149},[34,20813,2629],{"class":40},[34,20815,20816],{"class":36,"line":10446},[34,20817,2206],{"class":40},[34,20819,20820,20822,20824,20826],{"class":36,"line":10451},[34,20821,20273],{"class":40},[34,20823,153],{"class":87},[34,20825,20207],{"class":149},[34,20827,6289],{"class":40},[34,20829,20830,20832,20834,20836,20838,20840,20842,20844,20846,20848],{"class":36,"line":10456},[34,20831,7182],{"class":40},[34,20833,1837],{"class":87},[34,20835,2312],{"class":40},[34,20837,804],{"class":87},[34,20839,7171],{"class":87},[34,20841,1224],{"class":40},[34,20843,1148],{"class":87},[34,20845,12101],{"class":40},[34,20847,1837],{"class":87},[34,20849,9493],{"class":40},[34,20851,20852],{"class":36,"line":10465},[34,20853,241],{"class":40},[34,20855,20856],{"class":36,"line":10470},[34,20857,3053],{"emptyLinePlaceholder":726},[34,20859,20860],{"class":36,"line":10476},[34,20861,3053],{"emptyLinePlaceholder":726},[34,20863,20864,20866,20868],{"class":36,"line":10497},[34,20865,804],{"class":87},[34,20867,2626],{"class":149},[34,20869,11506],{"class":40},[34,20871,20872],{"class":36,"line":10503},[34,20873,3053],{"emptyLinePlaceholder":726},[34,20875,20876],{"class":36,"line":10517},[34,20877,20878],{"class":205},"    \u002F\u002Ftest01();\n",[34,20880,20881],{"class":36,"line":10523},[34,20882,20883],{"class":205},"    \u002F\u002Ftest02();\n",[34,20885,20886,20888],{"class":36,"line":10550},[34,20887,20343],{"class":149},[34,20889,6289],{"class":40},[34,20891,20892],{"class":36,"line":10559},[34,20893,3053],{"emptyLinePlaceholder":726},[34,20895,20896,20898,20900,20902],{"class":36,"line":10565},[34,20897,2956],{"class":149},[34,20899,801],{"class":40},[34,20901,2961],{"class":156},[34,20903,3372],{"class":40},[34,20905,20906],{"class":36,"line":10573},[34,20907,3053],{"emptyLinePlaceholder":726},[34,20909,20910,20912,20914],{"class":36,"line":10578},[34,20911,4743],{"class":87},[34,20913,4746],{"class":63},[34,20915,73],{"class":40},[34,20917,20918],{"class":36,"line":17256},[34,20919,241],{"class":40},[19,20921,20923],{"id":20922},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[108,20925,20926],{},"默认情况下，c++编译器至少给一个类添加3个函数",[108,20928,20929],{},"1．默认构造函数(无参，函数体为空)",[108,20931,20932],{},"2．默认析构函数(无参，函数体为空)",[108,20934,20935],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[108,20937,20938],{},"构造函数调用规则如下：",[1800,20940,20941,20944],{},[755,20942,20943],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[755,20945,20946],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[24,20948,20950],{"className":789,"code":20949,"language":791,"meta":29,"style":29},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,20951,20952,20960,20964,20969,20975,20987,20991,20996,21008,21017,21029,21033,21037,21053,21062,21074,21078,21082,21088,21100,21104,21108,21114,21118,21122,21130,21134,21146,21151,21159,21163,21181,21185,21189,21197,21201,21206,21214,21229,21242,21246,21251,21258,21274,21287,21291,21295,21303,21307,21313,21317,21327,21331,21339],{"__ignoreMap":29},[34,20953,20954,20956,20958],{"class":36,"line":37},[34,20955,15347],{"class":87},[34,20957,16222],{"class":149},[34,20959,57],{"class":40},[34,20961,20962],{"class":36,"line":51},[34,20963,15369],{"class":87},[34,20965,20966],{"class":36,"line":60},[34,20967,20968],{"class":205},"    \u002F\u002F无参（默认）构造函数\n",[34,20970,20971,20973],{"class":36,"line":76},[34,20972,19171],{"class":149},[34,20974,11506],{"class":40},[34,20976,20977,20979,20981,20983,20985],{"class":36,"line":93},[34,20978,10322],{"class":40},[34,20980,1837],{"class":87},[34,20982,20462],{"class":156},[34,20984,2104],{"class":87},[34,20986,9493],{"class":40},[34,20988,20989],{"class":36,"line":99},[34,20990,2840],{"class":40},[34,20992,20993],{"class":36,"line":353},[34,20994,20995],{"class":205},"    \u002F\u002F有参构造函数\n",[34,20997,20998,21000,21002,21004,21006],{"class":36,"line":359},[34,20999,19171],{"class":149},[34,21001,801],{"class":40},[34,21003,804],{"class":87},[34,21005,2058],{"class":5869},[34,21007,13095],{"class":40},[34,21009,21010,21013,21015],{"class":36,"line":579},[34,21011,21012],{"class":40},"        age ",[34,21014,153],{"class":87},[34,21016,2092],{"class":40},[34,21018,21019,21021,21023,21025,21027],{"class":36,"line":589},[34,21020,10322],{"class":40},[34,21022,1837],{"class":87},[34,21024,20502],{"class":156},[34,21026,2104],{"class":87},[34,21028,9493],{"class":40},[34,21030,21031],{"class":36,"line":601},[34,21032,2840],{"class":40},[34,21034,21035],{"class":36,"line":613},[34,21036,19526],{"class":205},[34,21038,21039,21041,21043,21045,21047,21049,21051],{"class":36,"line":618},[34,21040,19171],{"class":149},[34,21042,801],{"class":40},[34,21044,7445],{"class":87},[34,21046,16222],{"class":149},[34,21048,1148],{"class":87},[34,21050,7478],{"class":5869},[34,21052,13095],{"class":40},[34,21054,21055,21057,21059],{"class":36,"line":628},[34,21056,21012],{"class":40},[34,21058,153],{"class":87},[34,21060,21061],{"class":40}," p.age;\n",[34,21063,21064,21066,21068,21070,21072],{"class":36,"line":640},[34,21065,10322],{"class":40},[34,21067,1837],{"class":87},[34,21069,20543],{"class":156},[34,21071,2104],{"class":87},[34,21073,9493],{"class":40},[34,21075,21076],{"class":36,"line":2301},[34,21077,2840],{"class":40},[34,21079,21080],{"class":36,"line":2307},[34,21081,19199],{"class":205},[34,21083,21084,21086],{"class":36,"line":2328},[34,21085,19204],{"class":149},[34,21087,11506],{"class":40},[34,21089,21090,21092,21094,21096,21098],{"class":36,"line":2333},[34,21091,10322],{"class":40},[34,21093,1837],{"class":87},[34,21095,20580],{"class":156},[34,21097,2104],{"class":87},[34,21099,9493],{"class":40},[34,21101,21102],{"class":36,"line":2347},[34,21103,2840],{"class":40},[34,21105,21106],{"class":36,"line":2352},[34,21107,15369],{"class":87},[34,21109,21110,21112],{"class":36,"line":2381},[34,21111,2638],{"class":87},[34,21113,8450],{"class":40},[34,21115,21116],{"class":36,"line":2386},[34,21117,4648],{"class":40},[34,21119,21120],{"class":36,"line":2403},[34,21121,3053],{"emptyLinePlaceholder":726},[34,21123,21124,21126,21128],{"class":36,"line":2408},[34,21125,6017],{"class":87},[34,21127,6241],{"class":149},[34,21129,2629],{"class":40},[34,21131,21132],{"class":36,"line":2413},[34,21133,2206],{"class":40},[34,21135,21136,21138,21140,21142,21144],{"class":36,"line":2418},[34,21137,20083],{"class":40},[34,21139,7783],{"class":149},[34,21141,801],{"class":40},[34,21143,1445],{"class":63},[34,21145,3372],{"class":40},[34,21147,21148],{"class":36,"line":2432},[34,21149,21150],{"class":205},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[34,21152,21153,21155,21157],{"class":36,"line":2437},[34,21154,20083],{"class":40},[34,21156,7686],{"class":149},[34,21158,18167],{"class":40},[34,21160,21161],{"class":36,"line":3230},[34,21162,3053],{"emptyLinePlaceholder":726},[34,21164,21165,21167,21169,21172,21174,21177,21179],{"class":36,"line":3244},[34,21166,7182],{"class":40},[34,21168,1837],{"class":87},[34,21170,21171],{"class":156}," \"p2的年龄为： \"",[34,21173,2104],{"class":87},[34,21175,21176],{"class":40}," p2.age ",[34,21178,1837],{"class":87},[34,21180,9493],{"class":40},[34,21182,21183],{"class":36,"line":3252},[34,21184,241],{"class":40},[34,21186,21187],{"class":36,"line":3257},[34,21188,3053],{"emptyLinePlaceholder":726},[34,21190,21191,21193,21195],{"class":36,"line":3263},[34,21192,6017],{"class":87},[34,21194,6310],{"class":149},[34,21196,2629],{"class":40},[34,21198,21199],{"class":36,"line":3269},[34,21200,2206],{"class":40},[34,21202,21203],{"class":36,"line":3274},[34,21204,21205],{"class":205},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[34,21207,21208,21211],{"class":36,"line":8601},[34,21209,21210],{"class":40},"    Person p1;",[34,21212,21213],{"class":205}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[34,21215,21216,21218,21220,21222,21224,21226],{"class":36,"line":8625},[34,21217,20083],{"class":40},[34,21219,7686],{"class":149},[34,21221,801],{"class":40},[34,21223,1241],{"class":63},[34,21225,6619],{"class":40},[34,21227,21228],{"class":205}," \u002F\u002F用户提供的有参\n",[34,21230,21231,21233,21236,21239],{"class":36,"line":8630},[34,21232,20083],{"class":40},[34,21234,21235],{"class":149},"p3",[34,21237,21238],{"class":40},"(p2);",[34,21240,21241],{"class":205}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[34,21243,21244],{"class":36,"line":8636},[34,21245,3053],{"emptyLinePlaceholder":726},[34,21247,21248],{"class":36,"line":8663},[34,21249,21250],{"class":205},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[34,21252,21253,21256],{"class":36,"line":8668},[34,21254,21255],{"class":40},"    Person p4;",[34,21257,21213],{"class":205},[34,21259,21260,21262,21265,21267,21269,21271],{"class":36,"line":8674},[34,21261,20083],{"class":40},[34,21263,21264],{"class":149},"p5",[34,21266,801],{"class":40},[34,21268,1241],{"class":63},[34,21270,6619],{"class":40},[34,21272,21273],{"class":205}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[34,21275,21276,21278,21281,21284],{"class":36,"line":8686},[34,21277,20083],{"class":40},[34,21279,21280],{"class":149},"p6",[34,21282,21283],{"class":40},"(p5);",[34,21285,21286],{"class":205}," \u002F\u002F用户自己提供拷贝构造\n",[34,21288,21289],{"class":36,"line":8698},[34,21290,241],{"class":40},[34,21292,21293],{"class":36,"line":8710},[34,21294,3053],{"emptyLinePlaceholder":726},[34,21296,21297,21299,21301],{"class":36,"line":10369},[34,21298,804],{"class":87},[34,21300,2626],{"class":149},[34,21302,11506],{"class":40},[34,21304,21305],{"class":36,"line":10394},[34,21306,3053],{"emptyLinePlaceholder":726},[34,21308,21309,21311],{"class":36,"line":10417},[34,21310,6286],{"class":149},[34,21312,6289],{"class":40},[34,21314,21315],{"class":36,"line":10441},[34,21316,3053],{"emptyLinePlaceholder":726},[34,21318,21319,21321,21323,21325],{"class":36,"line":10446},[34,21320,2956],{"class":149},[34,21322,801],{"class":40},[34,21324,2961],{"class":156},[34,21326,3372],{"class":40},[34,21328,21329],{"class":36,"line":10451},[34,21330,3053],{"emptyLinePlaceholder":726},[34,21332,21333,21335,21337],{"class":36,"line":10456},[34,21334,4743],{"class":87},[34,21336,4746],{"class":63},[34,21338,73],{"class":40},[34,21340,21341],{"class":36,"line":10465},[34,21342,241],{"class":40},[19,21344,21346],{"id":21345},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[108,21348,21349],{},"浅拷贝：简单的赋值拷贝操作",[108,21351,21352],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[24,21354,21356],{"className":789,"code":21355,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[31,21357,21358,21364,21374,21380,21384,21388,21393,21399,21403,21416,21420,21424,21431,21435,21445,21460,21473,21477,21482,21487,21503,21507,21520,21525,21530,21535,21544,21549,21564,21568,21572,21576,21582,21586,21591,21606,21610,21621,21635,21639,21648,21652,21658,21670,21674,21682,21686,21703,21734,21742,21770,21774,21778,21786,21790,21796],{"__ignoreMap":29},[34,21359,21360,21362],{"class":36,"line":37},[34,21361,2603],{"class":87},[34,21363,2606],{"class":156},[34,21365,21366,21368,21370,21372],{"class":36,"line":51},[34,21367,2611],{"class":87},[34,21369,2614],{"class":87},[34,21371,2617],{"class":149},[34,21373,73],{"class":40},[34,21375,21376,21378],{"class":36,"line":60},[34,21377,15347],{"class":87},[34,21379,15824],{"class":149},[34,21381,21382],{"class":36,"line":76},[34,21383,2206],{"class":40},[34,21385,21386],{"class":36,"line":93},[34,21387,15369],{"class":87},[34,21389,21390],{"class":36,"line":99},[34,21391,21392],{"class":205},"    \u002F\u002F默认构造函数\n",[34,21394,21395,21397],{"class":36,"line":353},[34,21396,19171],{"class":149},[34,21398,2629],{"class":40},[34,21400,21401],{"class":36,"line":359},[34,21402,2683],{"class":40},[34,21404,21405,21407,21409,21412,21414],{"class":36,"line":579},[34,21406,4104],{"class":40},[34,21408,1837],{"class":87},[34,21410,21411],{"class":156},"\"默认构造函数\"",[34,21413,1837],{"class":87},[34,21415,1859],{"class":40},[34,21417,21418],{"class":36,"line":589},[34,21419,2840],{"class":40},[34,21421,21422],{"class":36,"line":601},[34,21423,20995],{"class":205},[34,21425,21426,21428],{"class":36,"line":613},[34,21427,19204],{"class":149},[34,21429,21430],{"class":40},"(int age,int height)\n",[34,21432,21433],{"class":36,"line":618},[34,21434,2683],{"class":40},[34,21436,21437,21440,21442],{"class":36,"line":628},[34,21438,21439],{"class":40},"        m_Age",[34,21441,153],{"class":87},[34,21443,21444],{"class":40},"age;\n",[34,21446,21447,21450,21452,21454,21457],{"class":36,"line":640},[34,21448,21449],{"class":40},"        m_Height",[34,21451,12370],{"class":87},[34,21453,3035],{"class":87},[34,21455,21456],{"class":40},"(height);",[34,21458,21459],{"class":205},"\u002F\u002F放到堆区\n",[34,21461,21462,21464,21466,21469,21471],{"class":36,"line":2301},[34,21463,4104],{"class":40},[34,21465,1837],{"class":87},[34,21467,21468],{"class":156},"\"有参构造函数\"",[34,21470,1837],{"class":87},[34,21472,1859],{"class":40},[34,21474,21475],{"class":36,"line":2307},[34,21476,2840],{"class":40},[34,21478,21479],{"class":36,"line":2328},[34,21480,21481],{"class":205},"    \u002F\u002F深拷贝解决上述问题\n",[34,21483,21484],{"class":36,"line":2333},[34,21485,21486],{"class":205},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[34,21488,21489,21491,21493,21495,21497,21499,21501],{"class":36,"line":2347},[34,21490,19171],{"class":149},[34,21492,801],{"class":40},[34,21494,7445],{"class":87},[34,21496,16222],{"class":149},[34,21498,11237],{"class":87},[34,21500,108],{"class":5869},[34,21502,807],{"class":40},[34,21504,21505],{"class":36,"line":2352},[34,21506,2683],{"class":40},[34,21508,21509,21511,21513,21516,21518],{"class":36,"line":2381},[34,21510,4104],{"class":40},[34,21512,1837],{"class":87},[34,21514,21515],{"class":156},"\"拷贝构造函数\"",[34,21517,1837],{"class":87},[34,21519,1859],{"class":40},[34,21521,21522],{"class":36,"line":2386},[34,21523,21524],{"class":205},"        \u002F\u002F编译器默认的写如下注释部分\n",[34,21526,21527],{"class":36,"line":2403},[34,21528,21529],{"class":205},"        \u002F\u002Fm_Age=p.m_Age;\n",[34,21531,21532],{"class":36,"line":2408},[34,21533,21534],{"class":205},"        \u002F\u002Fm_Height=p.m_Height;\n",[34,21536,21537,21539,21541],{"class":36,"line":2413},[34,21538,21439],{"class":40},[34,21540,153],{"class":87},[34,21542,21543],{"class":40},"p.m_Age;\n",[34,21545,21546],{"class":36,"line":2418},[34,21547,21548],{"class":205},"        \u002F\u002F深拷贝操作\n",[34,21550,21551,21553,21555,21557,21559,21561],{"class":36,"line":2432},[34,21552,21449],{"class":40},[34,21554,12370],{"class":87},[34,21556,3035],{"class":87},[34,21558,801],{"class":40},[34,21560,1250],{"class":87},[34,21562,21563],{"class":40},"p.m_Height);\n",[34,21565,21566],{"class":36,"line":2437},[34,21567,2840],{"class":40},[34,21569,21570],{"class":36,"line":3230},[34,21571,3053],{"emptyLinePlaceholder":726},[34,21573,21574],{"class":36,"line":3244},[34,21575,19199],{"class":205},[34,21577,21578,21580],{"class":36,"line":3252},[34,21579,19204],{"class":149},[34,21581,2629],{"class":40},[34,21583,21584],{"class":36,"line":3257},[34,21585,2683],{"class":40},[34,21587,21588],{"class":36,"line":3263},[34,21589,21590],{"class":205},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[34,21592,21593,21595,21598,21601,21604],{"class":36,"line":3269},[34,21594,3150],{"class":87},[34,21596,21597],{"class":40},"(m_Height ",[34,21599,21600],{"class":87},"!=",[34,21602,21603],{"class":63}," NULL",[34,21605,807],{"class":40},[34,21607,21608],{"class":36,"line":3274},[34,21609,3163],{"class":40},[34,21611,21612,21615,21618],{"class":36,"line":8601},[34,21613,21614],{"class":87},"            delete",[34,21616,21617],{"class":40}," m_Height;",[34,21619,21620],{"class":205}," \u002F\u002F释放堆区内存\n",[34,21622,21623,21626,21628,21630,21632],{"class":36,"line":8625},[34,21624,21625],{"class":40},"            m_Height",[34,21627,153],{"class":87},[34,21629,3045],{"class":63},[34,21631,854],{"class":40},[34,21633,21634],{"class":205}," \u002F\u002F防止野指针\n",[34,21636,21637],{"class":36,"line":8630},[34,21638,3182],{"class":40},[34,21640,21641,21643,21645],{"class":36,"line":8636},[34,21642,4104],{"class":40},[34,21644,1837],{"class":87},[34,21646,21647],{"class":156},"\"Person的析构函数调用\"\n",[34,21649,21650],{"class":36,"line":8663},[34,21651,2840],{"class":40},[34,21653,21654,21656],{"class":36,"line":8668},[34,21655,2638],{"class":87},[34,21657,16318],{"class":40},[34,21659,21660,21662,21664,21667],{"class":36,"line":8674},[34,21661,2638],{"class":87},[34,21663,7171],{"class":87},[34,21665,21666],{"class":40},"m_Height;",[34,21668,21669],{"class":205}," \u002F\u002F定义一个指针，指向身高\n",[34,21671,21672],{"class":36,"line":8686},[34,21673,4648],{"class":40},[34,21675,21676,21678,21680],{"class":36,"line":8698},[34,21677,6017],{"class":87},[34,21679,6241],{"class":149},[34,21681,2629],{"class":40},[34,21683,21684],{"class":36,"line":8710},[34,21685,2206],{"class":40},[34,21687,21688,21690,21692,21694,21696,21698,21701],{"class":36,"line":10369},[34,21689,20083],{"class":40},[34,21691,7783],{"class":149},[34,21693,801],{"class":40},[34,21695,1445],{"class":63},[34,21697,1173],{"class":40},[34,21699,21700],{"class":63},"160",[34,21702,3372],{"class":40},[34,21704,21705,21707,21709,21712,21714,21717,21719,21722,21724,21727,21729,21731],{"class":36,"line":10394},[34,21706,2211],{"class":40},[34,21708,1837],{"class":87},[34,21710,21711],{"class":156},"\"p1的年龄为:\"",[34,21713,1837],{"class":87},[34,21715,21716],{"class":40},"p1.m_Age",[34,21718,1837],{"class":87},[34,21720,21721],{"class":156},"\"身高为：\"",[34,21723,7072],{"class":87},[34,21725,21726],{"class":40},"p1.m_Height",[34,21728,1837],{"class":87},[34,21730,1902],{"class":40},[34,21732,21733],{"class":205},"  \u002F\u002F18\n",[34,21735,21736,21738,21740],{"class":36,"line":10417},[34,21737,20083],{"class":40},[34,21739,7686],{"class":149},[34,21741,18167],{"class":40},[34,21743,21744,21746,21748,21751,21753,21755,21757,21759,21761,21764,21766,21768],{"class":36,"line":10441},[34,21745,2211],{"class":40},[34,21747,1837],{"class":87},[34,21749,21750],{"class":156},"\"p2的年龄为：\"",[34,21752,1837],{"class":87},[34,21754,20113],{"class":40},[34,21756,1837],{"class":87},[34,21758,21721],{"class":156},[34,21760,7072],{"class":87},[34,21762,21763],{"class":40},"p2.m_Height",[34,21765,1837],{"class":87},[34,21767,1902],{"class":40},[34,21769,21733],{"class":205},[34,21771,21772],{"class":36,"line":10446},[34,21773,13863],{"class":40},[34,21775,21776],{"class":36,"line":10451},[34,21777,241],{"class":40},[34,21779,21780,21782,21784],{"class":36,"line":10456},[34,21781,804],{"class":87},[34,21783,2626],{"class":149},[34,21785,2629],{"class":40},[34,21787,21788],{"class":36,"line":10465},[34,21789,2206],{"class":40},[34,21791,21792,21794],{"class":36,"line":10470},[34,21793,6286],{"class":149},[34,21795,6289],{"class":40},[34,21797,21798],{"class":36,"line":10476},[34,21799,241],{"class":40},[108,21801,21802],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[108,21804,21805],{},"浅拷贝带来的问题是堆区的内存重复释放",[108,21807,21808],{},[2122,21809],{"alt":29,"src":21810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[108,21812,21813],{},"浅拷贝问题要使用深拷贝来解决",[108,21815,21816],{},[2122,21817],{"alt":29,"src":21818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[108,21820,21821],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[19,21823,21825],{"id":21824},"_826初始化列表","8.2.6初始化列表",[108,21827,21828],{},"作用：初始化属性",[108,21830,5834],{},[24,21832,21835],{"className":21833,"code":21834,"language":5840},[5838],"构造函数():属性1(值1),属性2(值2).....{}\n",[31,21836,21834],{"__ignoreMap":29},[108,21838,21839],{},"例子",[24,21841,21843],{"className":789,"code":21842,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[31,21844,21845,21851,21861,21867,21871,21876,21880,21885,21890,21895,21900,21905,21910,21914,21919,21924,21967,21976,21994,22012,22030,22034,22038,22045,22052,22059,22063,22067,22075,22079,22083,22103,22112,22116,22120,22130,22134,22142],{"__ignoreMap":29},[34,21846,21847,21849],{"class":36,"line":37},[34,21848,2603],{"class":87},[34,21850,2606],{"class":156},[34,21852,21853,21855,21857,21859],{"class":36,"line":51},[34,21854,2611],{"class":87},[34,21856,2614],{"class":87},[34,21858,2617],{"class":149},[34,21860,73],{"class":40},[34,21862,21863,21865],{"class":36,"line":60},[34,21864,15347],{"class":87},[34,21866,15824],{"class":149},[34,21868,21869],{"class":36,"line":76},[34,21870,2206],{"class":40},[34,21872,21873],{"class":36,"line":93},[34,21874,21875],{"class":87},"    public:\n",[34,21877,21878],{"class":36,"line":99},[34,21879,3053],{"emptyLinePlaceholder":726},[34,21881,21882],{"class":36,"line":353},[34,21883,21884],{"class":205},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[34,21886,21887],{"class":36,"line":359},[34,21888,21889],{"class":205},"    \u002F\u002FPerson(int a, int b, int c) {\n",[34,21891,21892],{"class":36,"line":579},[34,21893,21894],{"class":205},"    \u002F\u002F  m_A = a;\n",[34,21896,21897],{"class":36,"line":589},[34,21898,21899],{"class":205},"    \u002F\u002F  m_B = b;\n",[34,21901,21902],{"class":36,"line":601},[34,21903,21904],{"class":205},"    \u002F\u002F  m_C = c;\n",[34,21906,21907],{"class":36,"line":613},[34,21908,21909],{"class":205},"    \u002F\u002F}\n",[34,21911,21912],{"class":36,"line":618},[34,21913,3053],{"emptyLinePlaceholder":726},[34,21915,21916],{"class":36,"line":628},[34,21917,21918],{"class":205},"    \u002F\u002F初始化列表方式初始化\n",[34,21920,21921],{"class":36,"line":640},[34,21922,21923],{"class":205},"    \u002F\u002F使用有参构造函数\n",[34,21925,21926,21928,21930,21932,21934,21936,21938,21940,21942,21944,21946,21949,21952,21955,21958,21961,21964],{"class":36,"line":2301},[34,21927,19171],{"class":149},[34,21929,801],{"class":40},[34,21931,804],{"class":87},[34,21933,2058],{"class":5869},[34,21935,13088],{"class":40},[34,21937,804],{"class":87},[34,21939,3486],{"class":5869},[34,21941,13088],{"class":40},[34,21943,804],{"class":87},[34,21945,3502],{"class":5869},[34,21947,21948],{"class":40},") :",[34,21950,21951],{"class":149},"m_A",[34,21953,21954],{"class":40},"(a), ",[34,21956,21957],{"class":149},"m_B",[34,21959,21960],{"class":40},"(b), ",[34,21962,21963],{"class":149},"m_C",[34,21965,21966],{"class":40},"(c) {}\n",[34,21968,21969,21971,21974],{"class":36,"line":2307},[34,21970,15562],{"class":87},[34,21972,21973],{"class":149}," PrintPerson",[34,21975,11506],{"class":40},[34,21977,21978,21980,21982,21985,21987,21990,21992],{"class":36,"line":2328},[34,21979,10322],{"class":40},[34,21981,1837],{"class":87},[34,21983,21984],{"class":156}," \"mA:\"",[34,21986,2104],{"class":87},[34,21988,21989],{"class":40}," m_A ",[34,21991,1837],{"class":87},[34,21993,9493],{"class":40},[34,21995,21996,21998,22000,22003,22005,22008,22010],{"class":36,"line":2333},[34,21997,10322],{"class":40},[34,21999,1837],{"class":87},[34,22001,22002],{"class":156}," \"mB:\"",[34,22004,2104],{"class":87},[34,22006,22007],{"class":40}," m_B ",[34,22009,1837],{"class":87},[34,22011,9493],{"class":40},[34,22013,22014,22016,22018,22021,22023,22026,22028],{"class":36,"line":2347},[34,22015,10322],{"class":40},[34,22017,1837],{"class":87},[34,22019,22020],{"class":156}," \"mC:\"",[34,22022,2104],{"class":87},[34,22024,22025],{"class":40}," m_C ",[34,22027,1837],{"class":87},[34,22029,9493],{"class":40},[34,22031,22032],{"class":36,"line":2352},[34,22033,2840],{"class":40},[34,22035,22036],{"class":36,"line":2381},[34,22037,15875],{"class":87},[34,22039,22040,22042],{"class":36,"line":2386},[34,22041,2638],{"class":87},[34,22043,22044],{"class":40}," m_A;\n",[34,22046,22047,22049],{"class":36,"line":2403},[34,22048,2638],{"class":87},[34,22050,22051],{"class":40}," m_B;\n",[34,22053,22054,22056],{"class":36,"line":2408},[34,22055,2638],{"class":87},[34,22057,22058],{"class":40}," m_C;\n",[34,22060,22061],{"class":36,"line":2413},[34,22062,4648],{"class":40},[34,22064,22065],{"class":36,"line":2418},[34,22066,3053],{"emptyLinePlaceholder":726},[34,22068,22069,22071,22073],{"class":36,"line":2432},[34,22070,804],{"class":87},[34,22072,2626],{"class":149},[34,22074,6631],{"class":40},[34,22076,22077],{"class":36,"line":2437},[34,22078,2206],{"class":40},[34,22080,22081],{"class":36,"line":3230},[34,22082,3053],{"emptyLinePlaceholder":726},[34,22084,22085,22087,22089,22091,22093,22095,22097,22099,22101],{"class":36,"line":3244},[34,22086,20083],{"class":40},[34,22088,108],{"class":149},[34,22090,801],{"class":40},[34,22092,1013],{"class":63},[34,22094,13088],{"class":40},[34,22096,875],{"class":63},[34,22098,13088],{"class":40},[34,22100,869],{"class":63},[34,22102,3372],{"class":40},[34,22104,22105,22107,22110],{"class":36,"line":3252},[34,22106,16518],{"class":40},[34,22108,22109],{"class":149},"PrintPerson",[34,22111,6289],{"class":40},[34,22113,22114],{"class":36,"line":3257},[34,22115,3053],{"emptyLinePlaceholder":726},[34,22117,22118],{"class":36,"line":3263},[34,22119,3053],{"emptyLinePlaceholder":726},[34,22121,22122,22124,22126,22128],{"class":36,"line":3269},[34,22123,2956],{"class":149},[34,22125,801],{"class":40},[34,22127,2961],{"class":156},[34,22129,3372],{"class":40},[34,22131,22132],{"class":36,"line":3274},[34,22133,3053],{"emptyLinePlaceholder":726},[34,22135,22136,22138,22140],{"class":36,"line":8601},[34,22137,4743],{"class":87},[34,22139,4746],{"class":63},[34,22141,73],{"class":40},[34,22143,22144],{"class":36,"line":8625},[34,22145,241],{"class":40},[108,22147,22148,22149,22152,22153],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[111,22150,22151],{},"参数名就是定义的对象属性","，",[111,22154,22155],{},"属性后面的值为有参构造函数的形参",[24,22157,22159],{"className":789,"code":22158,"language":791,"meta":29,"style":29},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[31,22160,22161],{"__ignoreMap":29},[34,22162,22163,22165,22167,22169,22172,22174,22177,22179,22182,22184,22187,22189,22192,22194],{"class":36,"line":37},[34,22164,19698],{"class":149},[34,22166,801],{"class":40},[34,22168,804],{"class":87},[34,22170,22171],{"class":40}," a.",[34,22173,804],{"class":87},[34,22175,22176],{"class":40}," b,",[34,22178,804],{"class":87},[34,22180,22181],{"class":40}," b):",[34,22183,21951],{"class":149},[34,22185,22186],{"class":40},"(a),",[34,22188,21957],{"class":149},[34,22190,22191],{"class":40},"(c),",[34,22193,21963],{"class":149},[34,22195,22196],{"class":40},"(b) {}\n",[19,22198,22200],{"id":22199},"_827类对象作为类成员","8.2.7类对象作为类成员",[108,22202,22203],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[108,22205,15286],{},[24,22207,22209],{"className":789,"code":22208,"language":791,"meta":29,"style":29},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[31,22210,22211,22216,22221,22225,22230,22234],{"__ignoreMap":29},[34,22212,22213],{"class":36,"line":37},[34,22214,22215],{"class":40},"A{};\n",[34,22217,22218],{"class":36,"line":51},[34,22219,22220],{"class":40},"B\n",[34,22222,22223],{"class":36,"line":60},[34,22224,2206],{"class":40},[34,22226,22227],{"class":36,"line":76},[34,22228,22229],{"class":40},"    A a;\n",[34,22231,22232],{"class":36,"line":93},[34,22233,241],{"class":40},[34,22235,22236],{"class":36,"line":99},[34,22237,22238],{"class":205},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[108,22240,22241],{},"案例",[24,22243,22245],{"className":789,"code":22244,"language":791,"meta":29,"style":29},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[31,22246,22247,22252,22259,22263,22268,22273,22287,22291,22301,22312,22316,22323,22327,22340,22344,22349,22354,22358,22364,22368,22372,22376,22407,22411,22422,22426,22432,22436,22449,22453,22457,22461,22466,22471,22475,22483,22487,22504,22523,22527,22535,22539,22545],{"__ignoreMap":29},[34,22248,22249],{"class":36,"line":37},[34,22250,22251],{"class":205},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[34,22253,22254,22256],{"class":36,"line":51},[34,22255,15347],{"class":87},[34,22257,22258],{"class":149}," Phone\n",[34,22260,22261],{"class":36,"line":60},[34,22262,2206],{"class":40},[34,22264,22265],{"class":36,"line":76},[34,22266,22267],{"class":40},"public：\n",[34,22269,22270],{"class":36,"line":93},[34,22271,22272],{"class":205},"    \u002F\u002F 赋值(构造函数)\n",[34,22274,22275,22278,22280,22282,22285],{"class":36,"line":99},[34,22276,22277],{"class":149},"    Phone",[34,22279,801],{"class":40},[34,22281,15570],{"class":149},[34,22283,22284],{"class":5869}," pName",[34,22286,807],{"class":40},[34,22288,22289],{"class":36,"line":353},[34,22290,2683],{"class":40},[34,22292,22293,22296,22298],{"class":36,"line":359},[34,22294,22295],{"class":40},"        m_pName",[34,22297,153],{"class":87},[34,22299,22300],{"class":40},"pName;\n",[34,22302,22303,22305,22307,22310],{"class":36,"line":579},[34,22304,4104],{"class":40},[34,22306,1837],{"class":87},[34,22308,22309],{"class":156},"\"Phone的构造函数调用\"",[34,22311,73],{"class":40},[34,22313,22314],{"class":36,"line":589},[34,22315,2840],{"class":40},[34,22317,22318,22321],{"class":36,"line":601},[34,22319,22320],{"class":149},"    ~Phone",[34,22322,2629],{"class":40},[34,22324,22325],{"class":36,"line":613},[34,22326,2683],{"class":40},[34,22328,22329,22331,22333,22336,22338],{"class":36,"line":618},[34,22330,4104],{"class":40},[34,22332,1837],{"class":87},[34,22334,22335],{"class":156},"\"Phone析构函数调用\"",[34,22337,1837],{"class":87},[34,22339,1859],{"class":40},[34,22341,22342],{"class":36,"line":628},[34,22343,2840],{"class":40},[34,22345,22346],{"class":36,"line":640},[34,22347,22348],{"class":205},"    \u002F\u002F\n",[34,22350,22351],{"class":36,"line":2301},[34,22352,22353],{"class":40},"    string m_PName;\n",[34,22355,22356],{"class":36,"line":2307},[34,22357,4648],{"class":40},[34,22359,22360,22362],{"class":36,"line":2328},[34,22361,15347],{"class":87},[34,22363,15824],{"class":149},[34,22365,22366],{"class":36,"line":2333},[34,22367,2206],{"class":40},[34,22369,22370],{"class":36,"line":2347},[34,22371,15369],{"class":87},[34,22373,22374],{"class":36,"line":2352},[34,22375,17646],{"class":205},[34,22377,22378,22380,22382,22384,22386,22388,22390,22393,22396,22398,22401,22404],{"class":36,"line":2381},[34,22379,19171],{"class":149},[34,22381,801],{"class":40},[34,22383,15570],{"class":149},[34,22385,15573],{"class":5869},[34,22387,1173],{"class":40},[34,22389,15570],{"class":149},[34,22391,22392],{"class":5869}," pname",[34,22394,22395],{"class":40},"):",[34,22397,15663],{"class":149},[34,22399,22400],{"class":40},"(name),m_phone.",[34,22402,22403],{"class":149},"m_PName",[34,22405,22406],{"class":40},"(pname) \n",[34,22408,22409],{"class":36,"line":2386},[34,22410,2683],{"class":40},[34,22412,22413,22415,22417,22420],{"class":36,"line":2403},[34,22414,4104],{"class":40},[34,22416,1837],{"class":87},[34,22418,22419],{"class":156},"\"Person的构造函数调用\"",[34,22421,73],{"class":40},[34,22423,22424],{"class":36,"line":2408},[34,22425,2840],{"class":40},[34,22427,22428,22430],{"class":36,"line":2413},[34,22429,19204],{"class":149},[34,22431,2629],{"class":40},[34,22433,22434],{"class":36,"line":2418},[34,22435,2683],{"class":40},[34,22437,22438,22440,22442,22445,22447],{"class":36,"line":2432},[34,22439,4104],{"class":40},[34,22441,1837],{"class":87},[34,22443,22444],{"class":156},"\"Person析构函数调用\"",[34,22446,1837],{"class":87},[34,22448,1859],{"class":40},[34,22450,22451],{"class":36,"line":2437},[34,22452,2840],{"class":40},[34,22454,22455],{"class":36,"line":3230},[34,22456,8433],{"class":205},[34,22458,22459],{"class":36,"line":3244},[34,22460,15545],{"class":40},[34,22462,22463],{"class":36,"line":3252},[34,22464,22465],{"class":205},"    \u002F\u002F手机\n",[34,22467,22468],{"class":36,"line":3257},[34,22469,22470],{"class":40},"    Phone m_Phone;\n",[34,22472,22473],{"class":36,"line":3263},[34,22474,4648],{"class":40},[34,22476,22477,22479,22481],{"class":36,"line":3269},[34,22478,6017],{"class":87},[34,22480,6241],{"class":149},[34,22482,2629],{"class":40},[34,22484,22485],{"class":36,"line":3274},[34,22486,2206],{"class":40},[34,22488,22489,22491,22493,22495,22497,22499,22502],{"class":36,"line":8601},[34,22490,20083],{"class":40},[34,22492,108],{"class":149},[34,22494,801],{"class":40},[34,22496,8569],{"class":156},[34,22498,1173],{"class":40},[34,22500,22501],{"class":156},"\"安卓\"",[34,22503,3372],{"class":40},[34,22505,22506,22508,22510,22513,22515,22518,22520],{"class":36,"line":8625},[34,22507,2211],{"class":40},[34,22509,1837],{"class":87},[34,22511,22512],{"class":40},"p.Name",[34,22514,1837],{"class":87},[34,22516,22517],{"class":156},"\"拿着：\"",[34,22519,1837],{"class":87},[34,22521,22522],{"class":40},"p.m_phone.m_PName;\n",[34,22524,22525],{"class":36,"line":8630},[34,22526,241],{"class":40},[34,22528,22529,22531,22533],{"class":36,"line":8636},[34,22530,804],{"class":87},[34,22532,2626],{"class":149},[34,22534,2629],{"class":40},[34,22536,22537],{"class":36,"line":8663},[34,22538,2206],{"class":40},[34,22540,22541,22543],{"class":36,"line":8668},[34,22542,6286],{"class":149},[34,22544,6289],{"class":40},[34,22546,22547],{"class":36,"line":8674},[34,22548,241],{"class":40},[108,22550,9678],{},[24,22552,22554],{"className":789,"code":22553,"language":791,"meta":29,"style":29},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[31,22555,22556,22561],{"__ignoreMap":29},[34,22557,22558],{"class":36,"line":37},[34,22559,22560],{"class":205},"    \u002F\u002F不需要写这个：\n",[34,22562,22563],{"class":36,"line":51},[34,22564,22565],{"class":205},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[108,22567,22568],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[24,22570,22572],{"className":789,"code":22571,"language":791,"meta":29,"style":29},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[31,22573,22574],{"__ignoreMap":29},[34,22575,22576,22578,22581,22583,22586,22589],{"class":36,"line":37},[34,22577,19698],{"class":149},[34,22579,22580],{"class":40},"(string name.string pname):",[34,22582,15663],{"class":149},[34,22584,22585],{"class":40},"(name),",[34,22587,22588],{"class":149},"m_phone",[34,22590,22591],{"class":40},"(pname) {}\n",[108,22593,22594,22595,153,22598],{},"采用的是隐式转换法，实际为如下：\n",[31,22596,22597],{},"m_phone(pname)",[31,22599,22600],{},"Phone m_phone=pname",[108,22602,22603,22606],{},[111,22604,22605],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[108,22608,22609],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[19,22611,22613],{"id":22612},"_828静态对象","8.2.8静态对象",[108,22615,22616],{},"静态对象在成员对象前static，称为静态对象",[108,22618,22619],{},"静态对象分为两类：",[752,22621,22622],{},[755,22623,22624],{},"静态成员变量",[1800,22626,22627,22630,22633],{},[755,22628,22629],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[755,22631,22632],{},"②在编译阶段分配内存",[755,22634,22635],{},"③类内声明，类外初始化",[752,22637,22638],{"start":51},[755,22639,22640],{},"静态成员函数",[1800,22642,22643,22646],{},[755,22644,22645],{},"①所有对象共享同一个函数",[755,22647,22648],{},"②静态成员函数只能访问静态成员变量",[22650,22651,22653],"h4",{"id":22652},"_8281静态成员变量","8.2.8.1静态成员变量",[24,22655,22657],{"className":789,"code":22656,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[31,22658,22659,22665,22675,22681,22685,22689,22694,22699,22704,22712,22716,22720,22724,22732,22736,22740,22745,22758,22762,22770,22774,22780],{"__ignoreMap":29},[34,22660,22661,22663],{"class":36,"line":37},[34,22662,2603],{"class":87},[34,22664,2606],{"class":156},[34,22666,22667,22669,22671,22673],{"class":36,"line":51},[34,22668,2611],{"class":87},[34,22670,2614],{"class":87},[34,22672,2617],{"class":149},[34,22674,73],{"class":40},[34,22676,22677,22679],{"class":36,"line":60},[34,22678,15347],{"class":87},[34,22680,15824],{"class":149},[34,22682,22683],{"class":36,"line":76},[34,22684,2206],{"class":40},[34,22686,22687],{"class":36,"line":93},[34,22688,15369],{"class":87},[34,22690,22691],{"class":36,"line":99},[34,22692,22693],{"class":205},"    \u002F\u002F非静态成员变量\n",[34,22695,22696],{"class":36,"line":353},[34,22697,22698],{"class":205},"    \u002F\u002F int m_A;\n",[34,22700,22701],{"class":36,"line":359},[34,22702,22703],{"class":205},"    \u002F\u002F定义静态成员变量\n",[34,22705,22706,22708,22710],{"class":36,"line":579},[34,22707,11673],{"class":87},[34,22709,3035],{"class":87},[34,22711,22044],{"class":40},[34,22713,22714],{"class":36,"line":589},[34,22715,3053],{"emptyLinePlaceholder":726},[34,22717,22718],{"class":36,"line":601},[34,22719,3053],{"emptyLinePlaceholder":726},[34,22721,22722],{"class":36,"line":613},[34,22723,4648],{"class":40},[34,22725,22726,22728,22730],{"class":36,"line":618},[34,22727,6017],{"class":87},[34,22729,6241],{"class":149},[34,22731,2629],{"class":40},[34,22733,22734],{"class":36,"line":628},[34,22735,2206],{"class":40},[34,22737,22738],{"class":36,"line":640},[34,22739,15966],{"class":40},[34,22741,22742],{"class":36,"line":2301},[34,22743,22744],{"class":205},"    \u002F\u002F输出类成员变量这块内存\n",[34,22746,22747,22749,22751,22754,22756],{"class":36,"line":2307},[34,22748,2211],{"class":40},[34,22750,1837],{"class":87},[34,22752,22753],{"class":40},"p.m_A",[34,22755,1837],{"class":87},[34,22757,1859],{"class":40},[34,22759,22760],{"class":36,"line":2328},[34,22761,241],{"class":40},[34,22763,22764,22766,22768],{"class":36,"line":2333},[34,22765,804],{"class":87},[34,22767,2626],{"class":149},[34,22769,2629],{"class":40},[34,22771,22772],{"class":36,"line":2347},[34,22773,2206],{"class":40},[34,22775,22776,22778],{"class":36,"line":2352},[34,22777,6286],{"class":149},[34,22779,2629],{"class":40},[34,22781,22782],{"class":36,"line":2381},[34,22783,241],{"class":40},[108,22785,22786],{},"此时输出是报错的：无法解析外部命令",[108,22788,22789],{},"解决这一问题：必须用到类内声明，类外初始化操作",[24,22791,22793],{"className":789,"code":22792,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[31,22794,22795,22801,22811,22817,22821,22825,22830,22838,22842,22847,22862,22870,22874,22878,22883,22888,22900,22905,22916,22921,22926,22939,22943,22951,22955,22961],{"__ignoreMap":29},[34,22796,22797,22799],{"class":36,"line":37},[34,22798,2603],{"class":87},[34,22800,2606],{"class":156},[34,22802,22803,22805,22807,22809],{"class":36,"line":51},[34,22804,2611],{"class":87},[34,22806,2614],{"class":87},[34,22808,2617],{"class":149},[34,22810,73],{"class":40},[34,22812,22813,22815],{"class":36,"line":60},[34,22814,15347],{"class":87},[34,22816,15824],{"class":149},[34,22818,22819],{"class":36,"line":76},[34,22820,2206],{"class":40},[34,22822,22823],{"class":36,"line":93},[34,22824,15369],{"class":87},[34,22826,22827],{"class":36,"line":99},[34,22828,22829],{"class":205},"    \u002F\u002F类内声明\n",[34,22831,22832,22834,22836],{"class":36,"line":353},[34,22833,11673],{"class":87},[34,22835,3035],{"class":87},[34,22837,22044],{"class":40},[34,22839,22840],{"class":36,"line":359},[34,22841,4648],{"class":40},[34,22843,22844],{"class":36,"line":579},[34,22845,22846],{"class":205},"\u002F\u002F类外初始化\n",[34,22848,22849,22851,22853,22856,22858,22860],{"class":36,"line":589},[34,22850,804],{"class":87},[34,22852,16222],{"class":149},[34,22854,22855],{"class":40},"::m_A",[34,22857,153],{"class":87},[34,22859,1241],{"class":63},[34,22861,73],{"class":40},[34,22863,22864,22866,22868],{"class":36,"line":601},[34,22865,6017],{"class":87},[34,22867,6241],{"class":149},[34,22869,2629],{"class":40},[34,22871,22872],{"class":36,"line":613},[34,22873,2206],{"class":40},[34,22875,22876],{"class":36,"line":618},[34,22877,15966],{"class":40},[34,22879,22880],{"class":36,"line":628},[34,22881,22882],{"class":205},"    \u002F\u002F访问变量的原内存空间\n",[34,22884,22885],{"class":36,"line":640},[34,22886,22887],{"class":205},"    \u002F\u002F100\n",[34,22889,22890,22892,22894,22896,22898],{"class":36,"line":2301},[34,22891,2211],{"class":40},[34,22893,1837],{"class":87},[34,22895,22753],{"class":40},[34,22897,1837],{"class":87},[34,22899,1859],{"class":40},[34,22901,22902],{"class":36,"line":2307},[34,22903,22904],{"class":40},"    Person p2;\n",[34,22906,22907,22910,22912,22914],{"class":36,"line":2328},[34,22908,22909],{"class":40},"    p2.m_A",[34,22911,153],{"class":87},[34,22913,2376],{"class":63},[34,22915,73],{"class":40},[34,22917,22918],{"class":36,"line":2333},[34,22919,22920],{"class":205},"    \u002F\u002F继续访问这片空间\n",[34,22922,22923],{"class":36,"line":2347},[34,22924,22925],{"class":205},"    \u002F\u002F200\n",[34,22927,22928,22930,22932,22935,22937],{"class":36,"line":2352},[34,22929,2211],{"class":40},[34,22931,1837],{"class":87},[34,22933,22934],{"class":40},"p2.m_A",[34,22936,1837],{"class":87},[34,22938,1859],{"class":40},[34,22940,22941],{"class":36,"line":2381},[34,22942,241],{"class":40},[34,22944,22945,22947,22949],{"class":36,"line":2386},[34,22946,804],{"class":87},[34,22948,2626],{"class":149},[34,22950,2629],{"class":40},[34,22952,22953],{"class":36,"line":2403},[34,22954,2206],{"class":40},[34,22956,22957,22959],{"class":36,"line":2408},[34,22958,6286],{"class":149},[34,22960,6289],{"class":40},[34,22962,22963],{"class":36,"line":2413},[34,22964,241],{"class":40},[108,22966,22967],{},[111,22968,22969],{},"静态变量的访问",[24,22971,22973],{"className":789,"code":22972,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[31,22974,22975,22981,22991,22997,23001,23005,23009,23017,23021,23026,23034,23038,23042,23056,23071,23079,23083,23088,23093,23098,23103,23115,23120,23125,23139,23156,23160,23168,23172,23178],{"__ignoreMap":29},[34,22976,22977,22979],{"class":36,"line":37},[34,22978,2603],{"class":87},[34,22980,2606],{"class":156},[34,22982,22983,22985,22987,22989],{"class":36,"line":51},[34,22984,2611],{"class":87},[34,22986,2614],{"class":87},[34,22988,2617],{"class":149},[34,22990,73],{"class":40},[34,22992,22993,22995],{"class":36,"line":60},[34,22994,15347],{"class":87},[34,22996,15824],{"class":149},[34,22998,22999],{"class":36,"line":76},[34,23000,2206],{"class":40},[34,23002,23003],{"class":36,"line":93},[34,23004,15369],{"class":87},[34,23006,23007],{"class":36,"line":99},[34,23008,22829],{"class":205},[34,23010,23011,23013,23015],{"class":36,"line":353},[34,23012,11673],{"class":87},[34,23014,3035],{"class":87},[34,23016,22044],{"class":40},[34,23018,23019],{"class":36,"line":359},[34,23020,15875],{"class":87},[34,23022,23023],{"class":36,"line":579},[34,23024,23025],{"class":205},"    \u002F\u002F静态成员变量也是有访问权限的\n",[34,23027,23028,23030,23032],{"class":36,"line":589},[34,23029,11673],{"class":87},[34,23031,3035],{"class":87},[34,23033,22051],{"class":40},[34,23035,23036],{"class":36,"line":601},[34,23037,4648],{"class":40},[34,23039,23040],{"class":36,"line":613},[34,23041,22846],{"class":205},[34,23043,23044,23046,23048,23050,23052,23054],{"class":36,"line":618},[34,23045,804],{"class":87},[34,23047,16222],{"class":149},[34,23049,22855],{"class":40},[34,23051,153],{"class":87},[34,23053,1241],{"class":63},[34,23055,73],{"class":40},[34,23057,23058,23060,23062,23065,23067,23069],{"class":36,"line":628},[34,23059,804],{"class":87},[34,23061,16222],{"class":149},[34,23063,23064],{"class":40},"::m_B",[34,23066,153],{"class":87},[34,23068,1495],{"class":63},[34,23070,73],{"class":40},[34,23072,23073,23075,23077],{"class":36,"line":640},[34,23074,6017],{"class":87},[34,23076,6310],{"class":149},[34,23078,2629],{"class":40},[34,23080,23081],{"class":36,"line":2301},[34,23082,2206],{"class":40},[34,23084,23085],{"class":36,"line":2307},[34,23086,23087],{"class":205},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[34,23089,23090],{"class":36,"line":2328},[34,23091,23092],{"class":205},"    \u002F\u002F静态成员变量有两种访问方式：\n",[34,23094,23095],{"class":36,"line":2333},[34,23096,23097],{"class":205},"    \u002F\u002F1.通过对象进行访问\n",[34,23099,23100],{"class":36,"line":2347},[34,23101,23102],{"class":40},"    Person p;  \n",[34,23104,23105,23107,23109,23111,23113],{"class":36,"line":2352},[34,23106,2211],{"class":40},[34,23108,1837],{"class":87},[34,23110,22753],{"class":40},[34,23112,1837],{"class":87},[34,23114,1859],{"class":40},[34,23116,23117],{"class":36,"line":2381},[34,23118,23119],{"class":205},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[34,23121,23122],{"class":36,"line":2386},[34,23123,23124],{"class":205},"    \u002F\u002F2.通过类名进行访问\n",[34,23126,23127,23129,23131,23133,23135,23137],{"class":36,"line":2403},[34,23128,2211],{"class":40},[34,23130,1837],{"class":87},[34,23132,19698],{"class":149},[34,23134,22855],{"class":40},[34,23136,1837],{"class":87},[34,23138,1859],{"class":40},[34,23140,23141,23143,23145,23147,23149,23151,23153],{"class":36,"line":2408},[34,23142,2211],{"class":40},[34,23144,1837],{"class":87},[34,23146,19698],{"class":149},[34,23148,23064],{"class":40},[34,23150,1837],{"class":87},[34,23152,1902],{"class":40},[34,23154,23155],{"class":205}," \u002F\u002F没有访问权限，报错\n",[34,23157,23158],{"class":36,"line":2413},[34,23159,241],{"class":40},[34,23161,23162,23164,23166],{"class":36,"line":2418},[34,23163,804],{"class":87},[34,23165,2626],{"class":149},[34,23167,2629],{"class":40},[34,23169,23170],{"class":36,"line":2432},[34,23171,2206],{"class":40},[34,23173,23174,23176],{"class":36,"line":2437},[34,23175,6355],{"class":149},[34,23177,6289],{"class":40},[34,23179,23180],{"class":36,"line":3230},[34,23181,241],{"class":40},[22650,23183,23185],{"id":23184},"_8282静态成员函数","8.2.8.2静态成员函数",[108,23187,23188],{},"1.静态成员函数定义与访问",[24,23190,23192],{"className":789,"code":23191,"language":791,"meta":29,"style":29},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[31,23193,23194,23200,23204,23208,23213,23224,23228,23242,23246,23250,23258,23262,23267,23272,23276,23284,23289,23299],{"__ignoreMap":29},[34,23195,23196,23198],{"class":36,"line":37},[34,23197,15347],{"class":87},[34,23199,15824],{"class":149},[34,23201,23202],{"class":36,"line":51},[34,23203,2206],{"class":40},[34,23205,23206],{"class":36,"line":60},[34,23207,15369],{"class":87},[34,23209,23210],{"class":36,"line":76},[34,23211,23212],{"class":205},"    \u002F\u002F在公共权限下定义静态成员函数\n",[34,23214,23215,23217,23220,23222],{"class":36,"line":93},[34,23216,11673],{"class":87},[34,23218,23219],{"class":87}," void",[34,23221,12038],{"class":149},[34,23223,2629],{"class":40},[34,23225,23226],{"class":36,"line":99},[34,23227,2683],{"class":40},[34,23229,23230,23233,23235,23238,23240],{"class":36,"line":353},[34,23231,23232],{"class":40},"        coout",[34,23234,1837],{"class":87},[34,23236,23237],{"class":156},"\"静态成员函数的调用\"",[34,23239,1837],{"class":87},[34,23241,1859],{"class":40},[34,23243,23244],{"class":36,"line":359},[34,23245,2840],{"class":40},[34,23247,23248],{"class":36,"line":579},[34,23249,4648],{"class":40},[34,23251,23252,23254,23256],{"class":36,"line":589},[34,23253,6017],{"class":87},[34,23255,6241],{"class":149},[34,23257,2629],{"class":40},[34,23259,23260],{"class":36,"line":601},[34,23261,2206],{"class":40},[34,23263,23264],{"class":36,"line":613},[34,23265,23266],{"class":205},"    \u002F\u002F静态成员函数的调用方式:\n",[34,23268,23269],{"class":36,"line":618},[34,23270,23271],{"class":205},"    \u002F\u002F1.通过对象访问\n",[34,23273,23274],{"class":36,"line":628},[34,23275,15966],{"class":40},[34,23277,23278,23280,23282],{"class":36,"line":640},[34,23279,16518],{"class":40},[34,23281,12204],{"class":149},[34,23283,6289],{"class":40},[34,23285,23286],{"class":36,"line":2301},[34,23287,23288],{"class":205},"    \u002F\u002F2.通过类名访问\n",[34,23290,23291,23293,23295,23297],{"class":36,"line":2307},[34,23292,19171],{"class":149},[34,23294,18384],{"class":40},[34,23296,12204],{"class":149},[34,23298,6289],{"class":40},[34,23300,23301],{"class":36,"line":2328},[34,23302,241],{"class":40},[752,23304,23305],{"start":51},[755,23306,23307],{},"静态成员函数只能访问静态成员变量",[24,23309,23311],{"className":789,"code":23310,"language":791,"meta":29,"style":29},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[31,23312,23313,23319,23323,23327,23331,23341,23345,23359,23364,23376,23380,23391,23401,23405,23409,23413,23423,23427,23440,23444,23448,23452,23456,23470,23478,23482,23486,23490,23494,23502,23506,23516,23521,23525,23533,23537,23543],{"__ignoreMap":29},[34,23314,23315,23317],{"class":36,"line":37},[34,23316,15347],{"class":87},[34,23318,15824],{"class":149},[34,23320,23321],{"class":36,"line":51},[34,23322,2206],{"class":40},[34,23324,23325],{"class":36,"line":60},[34,23326,15369],{"class":87},[34,23328,23329],{"class":36,"line":76},[34,23330,23212],{"class":205},[34,23332,23333,23335,23337,23339],{"class":36,"line":93},[34,23334,11673],{"class":87},[34,23336,23219],{"class":87},[34,23338,12038],{"class":149},[34,23340,2629],{"class":40},[34,23342,23343],{"class":36,"line":99},[34,23344,2683],{"class":40},[34,23346,23347,23350,23352,23354,23356],{"class":36,"line":353},[34,23348,23349],{"class":40},"        m_A",[34,23351,153],{"class":87},[34,23353,1106],{"class":63},[34,23355,854],{"class":40},[34,23357,23358],{"class":205}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[34,23360,23361],{"class":36,"line":359},[34,23362,23363],{"class":205},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[34,23365,23366,23368,23370,23372,23374],{"class":36,"line":579},[34,23367,23232],{"class":40},[34,23369,1837],{"class":87},[34,23371,23237],{"class":156},[34,23373,1837],{"class":87},[34,23375,1859],{"class":40},[34,23377,23378],{"class":36,"line":589},[34,23379,2840],{"class":40},[34,23381,23382,23384,23386,23388],{"class":36,"line":601},[34,23383,11673],{"class":87},[34,23385,3035],{"class":87},[34,23387,16101],{"class":40},[34,23389,23390],{"class":205}," \u002F\u002F静态成员变量\n",[34,23392,23393,23395,23398],{"class":36,"line":613},[34,23394,2638],{"class":87},[34,23396,23397],{"class":40}," m_B;",[34,23399,23400],{"class":205}," \u002F\u002F非静态成员变量\n",[34,23402,23403],{"class":36,"line":618},[34,23404,3053],{"emptyLinePlaceholder":726},[34,23406,23407],{"class":36,"line":628},[34,23408,15875],{"class":87},[34,23410,23411],{"class":36,"line":640},[34,23412,23025],{"class":205},[34,23414,23415,23417,23419,23421],{"class":36,"line":2301},[34,23416,11673],{"class":87},[34,23418,23219],{"class":87},[34,23420,14271],{"class":149},[34,23422,2629],{"class":40},[34,23424,23425],{"class":36,"line":2307},[34,23426,2683],{"class":40},[34,23428,23429,23431,23433,23436,23438],{"class":36,"line":2328},[34,23430,4104],{"class":40},[34,23432,1837],{"class":87},[34,23434,23435],{"class":156},"\"这是私有权限下的静态函数调用\"",[34,23437,1837],{"class":87},[34,23439,1859],{"class":40},[34,23441,23442],{"class":36,"line":2333},[34,23443,2840],{"class":40},[34,23445,23446],{"class":36,"line":2347},[34,23447,3053],{"emptyLinePlaceholder":726},[34,23449,23450],{"class":36,"line":2352},[34,23451,3053],{"emptyLinePlaceholder":726},[34,23453,23454],{"class":36,"line":2381},[34,23455,4648],{"class":40},[34,23457,23458,23460,23462,23464,23466,23468],{"class":36,"line":2386},[34,23459,804],{"class":87},[34,23461,16222],{"class":149},[34,23463,22855],{"class":40},[34,23465,153],{"class":87},[34,23467,987],{"class":63},[34,23469,73],{"class":40},[34,23471,23472,23474,23476],{"class":36,"line":2403},[34,23473,6017],{"class":87},[34,23475,6241],{"class":149},[34,23477,2629],{"class":40},[34,23479,23480],{"class":36,"line":2408},[34,23481,2206],{"class":40},[34,23483,23484],{"class":36,"line":2413},[34,23485,23266],{"class":205},[34,23487,23488],{"class":36,"line":2418},[34,23489,23271],{"class":205},[34,23491,23492],{"class":36,"line":2432},[34,23493,15966],{"class":40},[34,23495,23496,23498,23500],{"class":36,"line":2437},[34,23497,16518],{"class":40},[34,23499,12204],{"class":149},[34,23501,6289],{"class":40},[34,23503,23504],{"class":36,"line":3230},[34,23505,23288],{"class":205},[34,23507,23508,23510,23512,23514],{"class":36,"line":3244},[34,23509,19171],{"class":149},[34,23511,18384],{"class":40},[34,23513,12204],{"class":149},[34,23515,6289],{"class":40},[34,23517,23518],{"class":36,"line":3252},[34,23519,23520],{"class":205},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[34,23522,23523],{"class":36,"line":3257},[34,23524,241],{"class":40},[34,23526,23527,23529,23531],{"class":36,"line":3263},[34,23528,804],{"class":87},[34,23530,2626],{"class":149},[34,23532,2629],{"class":40},[34,23534,23535],{"class":36,"line":3269},[34,23536,2206],{"class":40},[34,23538,23539,23541],{"class":36,"line":3274},[34,23540,6286],{"class":149},[34,23542,6289],{"class":40},[34,23544,23545],{"class":36,"line":8601},[34,23546,241],{"class":40},[19,23548,23550],{"id":23549},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22650,23552,23554],{"id":23553},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[108,23556,23557],{},"在c++中，类内的成员变量和成员函数分开存储",[108,23559,23560],{},"只有非静态成员变量才属于类的对象上",[23562,23563,23565],"h5",{"id":23564},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[24,23567,23569],{"className":789,"code":23568,"language":791,"meta":29,"style":29},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[31,23570,23571,23578,23588,23594,23598,23602,23606,23614,23618,23622,23645,23649,23657,23661,23667],{"__ignoreMap":29},[34,23572,23573,23575],{"class":36,"line":37},[34,23574,2603],{"class":87},[34,23576,23577],{"class":156},"\u003Ciostraem>\n",[34,23579,23580,23582,23584,23586],{"class":36,"line":51},[34,23581,2611],{"class":87},[34,23583,2614],{"class":87},[34,23585,2617],{"class":149},[34,23587,73],{"class":40},[34,23589,23590,23592],{"class":36,"line":60},[34,23591,15347],{"class":87},[34,23593,15824],{"class":149},[34,23595,23596],{"class":36,"line":76},[34,23597,2206],{"class":40},[34,23599,23600],{"class":36,"line":93},[34,23601,3053],{"emptyLinePlaceholder":726},[34,23603,23604],{"class":36,"line":99},[34,23605,4648],{"class":40},[34,23607,23608,23610,23612],{"class":36,"line":353},[34,23609,6017],{"class":87},[34,23611,6241],{"class":149},[34,23613,2629],{"class":40},[34,23615,23616],{"class":36,"line":359},[34,23617,2206],{"class":40},[34,23619,23620],{"class":36,"line":579},[34,23621,15966],{"class":40},[34,23623,23624,23626,23628,23631,23633,23636,23638,23640,23642],{"class":36,"line":589},[34,23625,2211],{"class":40},[34,23627,1837],{"class":87},[34,23629,23630],{"class":156},"\"size of p=\"",[34,23632,1837],{"class":87},[34,23634,23635],{"class":149},"sizeoif",[34,23637,7192],{"class":40},[34,23639,1837],{"class":87},[34,23641,1902],{"class":40},[34,23643,23644],{"class":205}," \u002F\u002F查看这个空类的占用的内存空间\n",[34,23646,23647],{"class":36,"line":601},[34,23648,241],{"class":40},[34,23650,23651,23653,23655],{"class":36,"line":613},[34,23652,804],{"class":87},[34,23654,2626],{"class":149},[34,23656,2629],{"class":40},[34,23658,23659],{"class":36,"line":618},[34,23660,2206],{"class":40},[34,23662,23663,23665],{"class":36,"line":628},[34,23664,6286],{"class":149},[34,23666,6289],{"class":40},[34,23668,23669],{"class":36,"line":640},[34,23670,241],{"class":40},[108,23672,23673],{},"输出结果为：size of p=1",[108,23675,23676],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[108,23678,23679],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23562,23681,23683],{"id":23682},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[24,23685,23687],{"className":789,"code":23686,"language":791,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[31,23688,23689,23695,23705,23713,23717,23726,23730,23738,23742,23746,23765,23769,23773,23781,23785,23791],{"__ignoreMap":29},[34,23690,23691,23693],{"class":36,"line":37},[34,23692,2603],{"class":87},[34,23694,2606],{"class":156},[34,23696,23697,23699,23701,23703],{"class":36,"line":51},[34,23698,2611],{"class":87},[34,23700,2614],{"class":87},[34,23702,2617],{"class":149},[34,23704,73],{"class":40},[34,23706,23707,23709,23711],{"class":36,"line":60},[34,23708,15347],{"class":87},[34,23710,16222],{"class":149},[34,23712,3327],{"class":40},[34,23714,23715],{"class":36,"line":76},[34,23716,2206],{"class":40},[34,23718,23719,23721,23723],{"class":36,"line":93},[34,23720,2638],{"class":87},[34,23722,16101],{"class":40},[34,23724,23725],{"class":205},"\u002F\u002F非静态成员变量\n",[34,23727,23728],{"class":36,"line":99},[34,23729,4648],{"class":40},[34,23731,23732,23734,23736],{"class":36,"line":353},[34,23733,6017],{"class":87},[34,23735,6241],{"class":149},[34,23737,2629],{"class":40},[34,23739,23740],{"class":36,"line":359},[34,23741,2206],{"class":40},[34,23743,23744],{"class":36,"line":579},[34,23745,15966],{"class":40},[34,23747,23748,23750,23752,23754,23756,23758,23760,23762],{"class":36,"line":589},[34,23749,2211],{"class":40},[34,23751,1837],{"class":87},[34,23753,23630],{"class":156},[34,23755,2032],{"class":87},[34,23757,7192],{"class":40},[34,23759,1837],{"class":87},[34,23761,1902],{"class":40},[34,23763,23764],{"class":205}," \u002F\u002F查看不是空对象时占用多少内存\n",[34,23766,23767],{"class":36,"line":601},[34,23768,3053],{"emptyLinePlaceholder":726},[34,23770,23771],{"class":36,"line":613},[34,23772,241],{"class":40},[34,23774,23775,23777,23779],{"class":36,"line":618},[34,23776,804],{"class":87},[34,23778,2626],{"class":149},[34,23780,2629],{"class":40},[34,23782,23783],{"class":36,"line":628},[34,23784,2206],{"class":40},[34,23786,23787,23789],{"class":36,"line":640},[34,23788,6286],{"class":149},[34,23790,6289],{"class":40},[34,23792,23793],{"class":36,"line":2301},[34,23794,241],{"class":40},[108,23796,23797],{},"输出结果：size of p=4",[108,23799,23800],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[752,23802,23803],{},[755,23804,23805],{},"如果加上非静态成员变量，Person类修改如下",[24,23807,23809],{"className":789,"code":23808,"language":791,"meta":29,"style":29},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[31,23810,23811,23817,23821,23827,23835,23839,23844],{"__ignoreMap":29},[34,23812,23813,23815],{"class":36,"line":37},[34,23814,15347],{"class":87},[34,23816,15824],{"class":149},[34,23818,23819],{"class":36,"line":51},[34,23820,2206],{"class":40},[34,23822,23823,23825],{"class":36,"line":60},[34,23824,2638],{"class":87},[34,23826,22044],{"class":40},[34,23828,23829,23831,23833],{"class":36,"line":76},[34,23830,11673],{"class":87},[34,23832,3035],{"class":87},[34,23834,22051],{"class":40},[34,23836,23837],{"class":36,"line":93},[34,23838,4648],{"class":40},[34,23840,23841],{"class":36,"line":99},[34,23842,23843],{"class":205},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[34,23845,23846,23848,23850,23852,23854,23856],{"class":36,"line":353},[34,23847,804],{"class":87},[34,23849,16222],{"class":149},[34,23851,23064],{"class":40},[34,23853,153],{"class":87},[34,23855,987],{"class":63},[34,23857,73],{"class":40},[108,23859,23860],{},"输出结果：4",[108,23862,23863],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[752,23865,23866],{"start":51},[755,23867,23868],{},"加上非静态成员函数",[24,23870,23872],{"className":789,"code":23871,"language":791,"meta":29,"style":29},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[31,23873,23874,23881,23885,23891,23899,23903,23907,23911],{"__ignoreMap":29},[34,23875,23876,23878],{"class":36,"line":37},[34,23877,15347],{"class":87},[34,23879,23880],{"class":149},"  Person\n",[34,23882,23883],{"class":36,"line":51},[34,23884,2206],{"class":40},[34,23886,23887,23889],{"class":36,"line":60},[34,23888,2638],{"class":87},[34,23890,22044],{"class":40},[34,23892,23893,23895,23897],{"class":36,"line":76},[34,23894,15562],{"class":87},[34,23896,12038],{"class":149},[34,23898,2629],{"class":40},[34,23900,23901],{"class":36,"line":93},[34,23902,2683],{"class":40},[34,23904,23905],{"class":36,"line":99},[34,23906,3053],{"emptyLinePlaceholder":726},[34,23908,23909],{"class":36,"line":353},[34,23910,2840],{"class":40},[34,23912,23913],{"class":36,"line":359},[34,23914,4648],{"class":40},[108,23916,23917],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[752,23919,23920],{"start":60},[755,23921,23922],{},"加上静态成员函数",[24,23924,23926],{"className":789,"code":23925,"language":791,"meta":29,"style":29},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[31,23927,23928,23934,23938,23944,23952,23956,23960,23964,23975,23979,23983,23987],{"__ignoreMap":29},[34,23929,23930,23932],{"class":36,"line":37},[34,23931,15347],{"class":87},[34,23933,23880],{"class":149},[34,23935,23936],{"class":36,"line":51},[34,23937,2206],{"class":40},[34,23939,23940,23942],{"class":36,"line":60},[34,23941,2638],{"class":87},[34,23943,22044],{"class":40},[34,23945,23946,23948,23950],{"class":36,"line":76},[34,23947,15562],{"class":87},[34,23949,12038],{"class":149},[34,23951,2629],{"class":40},[34,23953,23954],{"class":36,"line":93},[34,23955,2683],{"class":40},[34,23957,23958],{"class":36,"line":99},[34,23959,3053],{"emptyLinePlaceholder":726},[34,23961,23962],{"class":36,"line":353},[34,23963,2840],{"class":40},[34,23965,23966,23968,23970,23973],{"class":36,"line":359},[34,23967,11673],{"class":87},[34,23969,23219],{"class":87},[34,23971,23972],{"class":149}," func1",[34,23974,2629],{"class":40},[34,23976,23977],{"class":36,"line":579},[34,23978,2683],{"class":40},[34,23980,23981],{"class":36,"line":589},[34,23982,3053],{"emptyLinePlaceholder":726},[34,23984,23985],{"class":36,"line":601},[34,23986,2840],{"class":40},[34,23988,23989],{"class":36,"line":613},[34,23990,4648],{"class":40},[108,23992,23860],{},[108,23994,23995],{},"解释：静态成员函数也不属于类上",[45,23997,8327],{},{"title":29,"searchDepth":51,"depth":51,"links":23999},[24000,24006],{"id":15298,"depth":51,"text":15299,"children":24001},[24002,24003,24004,24005],{"id":15302,"depth":60,"text":15303},{"id":16027,"depth":60,"text":16028},{"id":16199,"depth":60,"text":16200},{"id":16657,"depth":60,"text":16658},{"id":19029,"depth":51,"text":19030,"children":24007},[24008,24009,24010,24011,24012,24013,24014,24015,24016],{"id":19041,"depth":60,"text":19042},{"id":19334,"depth":60,"text":19335},{"id":19825,"depth":60,"text":19826},{"id":20922,"depth":60,"text":20923},{"id":21345,"depth":60,"text":21346},{"id":21824,"depth":60,"text":21825},{"id":22199,"depth":60,"text":22200},{"id":22612,"depth":60,"text":22613},{"id":23549,"depth":60,"text":23550},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15263,"description":24017},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24024,"title":791,"body":24025,"description":723,"extension":724,"meta":24029,"navigation":726,"path":24031,"seo":24032,"stem":24033,"__hash__":24034},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24026,"toc":24027},[],{"title":29,"searchDepth":51,"depth":51,"links":24028},[],{"category":24030},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":791,"description":723},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24036,"title":24037,"body":24038,"description":29,"extension":724,"meta":24629,"navigation":726,"path":24630,"seo":24631,"stem":24632,"__hash__":24633},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24039,"toc":24611},[24040,24043,24047,24050,24053,24056,24074,24079,24082,24085,24088,24091,24096,24099,24104,24107,24110,24114,24117,24120,24126,24129,24147,24151,24155,24158,24163,24166,24170,24173,24186,24189,24193,24196,24199,24202,24227,24230,24239,24250,24265,24297,24301,24308,24316,24320,24323,24326,24331,24335,24338,24341,24346,24349,24353,24356,24359,24364,24367,24371,24376,24380,24447,24451,24454,24457,24460,24463,24466,24472,24493,24496,24510,24519,24523,24526,24529,24534,24537,24542,24547,24550,24553,24558,24563,24566,24571,24576,24579,24584,24589,24592,24595,24600,24603,24608],[10,24041,24037],{"id":24042},"_1强化学习基本认识",[14,24044,24046],{"id":24045},"_11什么是强化学习","1.1.什么是强化学习",[108,24048,24049],{},"强化学习有两部分组成：智能体和环境；",[108,24051,24052],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[108,24054,24055],{},"强化学习与监督学习的区别:",[752,24057,24058,24061,24064,24067],{},[755,24059,24060],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[755,24062,24063],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[755,24065,24066],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[755,24068,24069,24070,24073],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[111,24071,24072],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[108,24075,24076],{},[2122,24077],{"alt":29,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[108,24080,24081],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[108,24083,24084],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[108,24086,24087],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[108,24089,24090],{},"获取奖励",[108,24092,24093],{},[2122,24094],{"alt":29,"src":24095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[108,24097,24098],{},"强化学习可以分成标准强化学习和深度强化学习",[108,24100,24101],{},[2122,24102],{"alt":29,"src":24103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[108,24105,24106],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[108,24108,24109],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24111,24113],{"id":24112},"_12强化学习应用场景","1.2.强化学习应用场景",[108,24115,24116],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[108,24118,24119],{},"具身智能中的应用",[108,24121,24122,24125],{},[111,24123,24124],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[108,24127,24128],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[108,24130,24131,24132,24135,24136,24139,24140,24143,24144],{},"机器人是",[111,24133,24134],{},"躯体","，深度学习是",[111,24137,24138],{},"神经元****网络","，VLA是",[111,24141,24142],{},"通用的行为逻辑","，而强化学习是",[111,24145,24146],{},"教练",[14,24148,24150],{"id":24149},"_13序列决策","1.3.序列决策",[19,24152,24154],{"id":24153},"_131智能体与环境","1.3.1.智能体与环境",[108,24156,24157],{},"强化学习研究的问题是智能体agent与环境交互的问题",[108,24159,24160],{},[2122,24161],{"alt":29,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[108,24164,24165],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[19,24167,24169],{"id":24168},"_132奖励","1.3.2.奖励",[108,24171,24172],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[108,24174,24175,24176,24185],{},"取某个策略的表现如何。强化学习的目的就是",[111,24177,24178,24179,24184],{},"最大化",[111,24180,24181],{},[111,24182,24183],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[108,24187,24188],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[19,24190,24192],{"id":24191},"_133序列决策","1.3.3.序列决策",[108,24194,24195],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[108,24197,24198],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[108,24200,24201],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[108,24203,24204,24208,24209,24211,24212,24214,24215,24217,24218,14448,24221,14448,24224],{},[24205,24206,24207],"em",{},"Ht"," = ",[24205,24210,1391],{},"1*, a",[24205,24213,1013],{},", r",[24205,24216,1013],{},", . . . ,* ",[24205,24219,24220],{},"ot",[24205,24222,24223],{},", at ,",[24205,24225,24226],{},"rt",[108,24228,24229],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[108,24231,24232,24208,24235,2312,24237,1224],{},[24205,24233,24234],{},"st",[24205,24236,851],{},[24205,24238,24207],{},[108,24240,24241,24242,24245,24246,24249],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[111,24243,24244],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[111,24247,24248],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[108,24251,24252,24253,24256,24257,24260,24261,24264],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[111,24254,24255],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[111,24258,24259],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24205,24262,24263],{},"S, A, T, R, Ω, O, γ",")。",[108,24266,24267,24268,24270,24271,24273,24274,801,24276,24279,24280,24282,24283,801,24286,24289,24290,24292,24293,24296],{},"其中 ",[24205,24269,1484],{}," 表示状态空间，为隐变量，",[24205,24272,1028],{}," 为动作空间，",[24205,24275,1509],{},[24205,24277,24278],{},"s ′ |s, a",") 为状态转移概率，",[24205,24281,1459],{}," 为奖励函数，",[24205,24284,24285],{},"Ω",[24205,24287,24288],{},"o|s, a",") 为观测概率，",[24205,24291,1385],{}," 为观测空间，",[24205,24294,24295],{},"γ"," 为折扣因子。",[14,24298,24300],{"id":24299},"_14动作空间","1.4.动作空间",[108,24302,24303,24304,24307],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[111,24305,24306],{},"动作空间"," ，动作空间分为:",[752,24309,24310,24313],{},[755,24311,24312],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[755,24314,24315],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24317,24319],{"id":24318},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[108,24321,24322],{},"由策略、价值函数、模型三部分组成",[108,24324,24325],{},"这三者组成马尔可夫决策过程",[108,24327,24328],{},[2122,24329],{"alt":29,"src":24330},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[19,24332,24334],{"id":24333},"_151策略","1.5.1.策略",[108,24336,24337],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[108,24339,24340],{},"策略可分为两种：",[108,24342,24343],{},[2122,24344],{"alt":29,"src":24345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[108,24347,24348],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[19,24350,24352],{"id":24351},"_152价值函数","1.5.2.价值函数",[108,24354,24355],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[108,24357,24358],{},"价值函数中有一个折扣因子，类似于存款利息",[108,24360,24361],{},[2122,24362],{"alt":29,"src":24363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[108,24365,24366],{},"进入某个状态采取的最优动作可以通过Q函数得到",[19,24368,24370],{"id":24369},"_153模型","1.5.3.模型",[108,24372,24373],{},[2122,24374],{"alt":29,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24377,24379],{"id":24378},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[934,24381,24382,24393],{},[937,24383,24384],{},[940,24385,24386,24390],{},[943,24387,24389],{"align":24388},"left","类型",[943,24391,24392],{"align":24388},"特点",[980,24394,24395,24405,24415,24425,24437],{},[940,24396,24397,24402],{},[985,24398,24399],{"align":24388},[111,24400,24401],{},"基于价值的智能体",[985,24403,24404],{"align":24388},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[940,24406,24407,24412],{},[985,24408,24409],{"align":24388},[111,24410,24411],{},"基于策略的智能体",[985,24413,24414],{"align":24388},"直接学习策略，没有学习价值函数",[940,24416,24417,24422],{},[985,24418,24419],{"align":24388},[111,24420,24421],{},"演员-评论员智能体",[985,24423,24424],{"align":24388},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[940,24426,24427,24432],{},[985,24428,24429],{"align":24388},[111,24430,24431],{},"有模型强化学习智能体",[985,24433,24434],{"align":24388},[2122,24435],{"alt":29,"src":24436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[940,24438,24439,24444],{},[985,24440,24441],{"align":24388},[111,24442,24443],{},"免模型强化学习智能体",[985,24445,24446],{"align":24388},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24448,24450],{"id":24449},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[108,24452,24453],{},"学习和规划是序列决策的两个基本问题",[108,24455,24456],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[108,24458,24459],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[108,24461,24462],{},"强化学习用到的库：Gym",[108,24464,24465],{},"Gym可以检验强化学习算法的优劣",[108,24467,24468,24471],{},[111,24469,24470],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[24,24473,24477],{"className":24474,"code":24475,"language":24476,"meta":29,"style":29},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[31,24478,24479],{"__ignoreMap":29},[34,24480,24481,24484,24487,24490],{"class":36,"line":37},[34,24482,24483],{"class":149},"pip",[34,24485,24486],{"class":156}," install",[34,24488,24489],{"class":156}," gym==",[34,24491,24492],{"class":63},"0.25.2\n",[108,24494,24495],{},"显示图形界面需要",[24,24497,24499],{"className":24474,"code":24498,"language":24476,"meta":29,"style":29},"pip install pygame\n",[31,24500,24501],{"__ignoreMap":29},[34,24502,24503,24505,24507],{"class":36,"line":37},[34,24504,24483],{"class":149},[34,24506,24486],{"class":156},[34,24508,24509],{"class":156}," pygame\n",[108,24511,24512,24513],{},"有关Gym库的相关文档介绍：",[520,24514,24518],{"href":24515,"rel":24516},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24517],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24520,24522],{"id":24521},"_18一些补充基础概念","1.8.一些补充基础概念",[108,24524,24525],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[108,24527,24528],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[108,24530,24531],{},[2122,24532],{"alt":29,"src":24533},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[108,24535,24536],{},"折扣率需要自己来设定",[108,24538,24539],{},[2122,24540],{"alt":29,"src":24541},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[752,24543,24544],{},[755,24545,24546],{},"状态转移函数：",[108,24548,24549],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[108,24551,24552],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[108,24554,24555],{},[2122,24556],{"alt":29,"src":24557},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[752,24559,24560],{"start":51},[755,24561,24562],{},"动作价值函数：",[108,24564,24565],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[108,24567,24568],{},[2122,24569],{"alt":29,"src":24570},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[752,24572,24573],{"start":60},[755,24574,24575],{},"最优动作价值函数：",[108,24577,24578],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[108,24580,24581],{},[2122,24582],{"alt":29,"src":24583},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[752,24585,24586],{"start":76},[755,24587,24588],{},"状态价值函数:",[108,24590,24591],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[108,24593,24594],{},"它衡量的是“一个具体动作”的长期价值",[108,24596,24597],{},[2122,24598],{"alt":29,"src":24599},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[108,24601,24602],{},"几个价值函数之间的比较：",[108,24604,24605],{},[2122,24606],{"alt":29,"src":24607},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[45,24609,24610],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":24612},[24613,24614,24615,24620,24621,24626,24627,24628],{"id":24045,"depth":51,"text":24046},{"id":24112,"depth":51,"text":24113},{"id":24149,"depth":51,"text":24150,"children":24616},[24617,24618,24619],{"id":24153,"depth":60,"text":24154},{"id":24168,"depth":60,"text":24169},{"id":24191,"depth":60,"text":24192},{"id":24299,"depth":51,"text":24300},{"id":24318,"depth":51,"text":24319,"children":24622},[24623,24624,24625],{"id":24333,"depth":60,"text":24334},{"id":24351,"depth":60,"text":24352},{"id":24369,"depth":60,"text":24370},{"id":24378,"depth":51,"text":24379},{"id":24449,"depth":51,"text":24450},{"id":24521,"depth":51,"text":24522},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24037,"description":29},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24635,"title":24636,"body":24637,"description":24644,"extension":724,"meta":24655,"navigation":726,"path":24656,"seo":24657,"stem":24658,"__hash__":24659},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24638,"toc":24653},[24639,24642,24645,24650],[10,24640,24636],{"id":24641},"_2马尔可夫决策过程",[108,24643,24644],{},"这是强化学习的基本框架",[108,24646,24647],{},[2122,24648],{"alt":29,"src":24649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[108,24651,24652],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":29,"searchDepth":51,"depth":51,"links":24654},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24636,"description":24644},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24661,"title":24662,"body":24663,"description":29,"extension":724,"meta":24779,"navigation":726,"path":24780,"seo":24781,"stem":24782,"__hash__":24783},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24664,"toc":24774},[24665,24668,24672,24675,24680,24685,24688,24693,24696,24701,24704,24708,24713,24716,24721,24726,24731,24734,24738,24743,24746,24751,24756,24761,24766,24769],[10,24666,24662],{"id":24667},"_3动作价值函数",[14,24669,24671],{"id":24670},"_31dqn","3.1.DQN",[108,24673,24674],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[108,24676,24677],{},[2122,24678],{"alt":29,"src":24679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[108,24681,24682],{},[2122,24683],{"alt":29,"src":24684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[108,24686,24687],{},"DQN算法的描述：",[108,24689,24690],{},[2122,24691],{"alt":29,"src":24692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[108,24694,24695],{},"这里的Dense指的是全连接层",[108,24697,24698],{},[2122,24699],{"alt":29,"src":24700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[108,24702,24703],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24705,24707],{"id":24706},"_32dqn的举例","3.2.DQN的举例",[108,24709,24710],{},[2122,24711],{"alt":29,"src":24712},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[108,24714,24715],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[108,24717,24718],{},[2122,24719],{"alt":29,"src":24720},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[108,24722,24723],{},[2122,24724],{"alt":29,"src":24725},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[108,24727,24728],{},[2122,24729],{"alt":29,"src":24730},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[108,24732,24733],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24735,24737],{"id":24736},"_33td算法","3.3.TD算法",[108,24739,24740],{},[2122,24741],{"alt":29,"src":24742},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[108,24744,24745],{},"强化学习TD算法公式的粗略解释：",[108,24747,24748],{},[2122,24749],{"alt":29,"src":24750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[108,24752,24753],{},[2122,24754],{"alt":29,"src":24755},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[108,24757,24758],{},[2122,24759],{"alt":29,"src":24760},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[108,24762,24763],{},[2122,24764],{"alt":29,"src":24765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[108,24767,24768],{},"TD算法总结：",[108,24770,24771],{},[2122,24772],{"alt":29,"src":24773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":29,"searchDepth":51,"depth":51,"links":24775},[24776,24777,24778],{"id":24670,"depth":51,"text":24671},{"id":24706,"depth":51,"text":24707},{"id":24736,"depth":51,"text":24737},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24662,"description":29},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24785,"title":24786,"body":24787,"description":29,"extension":724,"meta":25020,"navigation":726,"path":25021,"seo":25022,"stem":25023,"__hash__":25024},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24788,"toc":25016},[24789,24792,24796,24799,24802,24807,24812,24815,24820,24825,24828,24833,24836,24841,24844,24849,24852,24857,24860,24865,24870,24873,24878,24881,24884,24889,24892,24897,24902,24906,24909,24912,24917,24922,24925,24930,24935,24938,24943,24946,24949,24954,24957,24962,24965,24970,24975,24978,24983,24988,24991,24996,24999,25004,25007],[10,24790,24786],{"id":24791},"_4策略学习",[14,24793,24795],{"id":24794},"_41概念描述","4.1.概念描述",[108,24797,24798],{},"用神经网络（策略网络）近似策略函数",[108,24800,24801],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[108,24803,24804],{},[2122,24805],{"alt":29,"src":24806},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[108,24808,24809],{},[2122,24810],{"alt":29,"src":24811},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[108,24813,24814],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[108,24816,24817],{},[2122,24818],{"alt":29,"src":24819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[108,24821,24822],{},[2122,24823],{"alt":29,"src":24824},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[108,24826,24827],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[108,24829,24830],{},[2122,24831],{"alt":29,"src":24832},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[108,24834,24835],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[108,24837,24838],{},[2122,24839],{"alt":29,"src":24840},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[108,24842,24843],{},"改进theta要用到策略梯度算法",[108,24845,24846],{},[2122,24847],{"alt":29,"src":24848},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[108,24850,24851],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[108,24853,24854],{},[2122,24855],{"alt":29,"src":24856},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[108,24858,24859],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[108,24861,24862],{},[2122,24863],{"alt":29,"src":24864},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[108,24866,24867],{},[2122,24868],{"alt":29,"src":24869},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[108,24871,24872],{},"梯度公式总结：",[108,24874,24875],{},[2122,24876],{"alt":29,"src":24877},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[108,24879,24880],{},"两个公式的分别应用场景：",[108,24882,24883],{},"对于离散的动作：",[108,24885,24886],{},[2122,24887],{"alt":29,"src":24888},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[108,24890,24891],{},"对于连续的动作：",[108,24893,24894],{},[2122,24895],{"alt":29,"src":24896},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[108,24898,24899],{},[2122,24900],{"alt":29,"src":24901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24903,24905],{"id":24904},"_42概率梯度算法总结","4.2.概率梯度算法总结",[108,24907,24908],{},"使用蒙特卡洛来近似计算策略梯度",[108,24910,24911],{},"蒙特卡洛法的解释如下：",[108,24913,24914],{},[2122,24915],{"alt":29,"src":24916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[108,24918,24919],{},[2122,24920],{"alt":29,"src":24921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[108,24923,24924],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[752,24926,24927],{},[755,24928,24929],{},"方法一：reinforce算法",[108,24931,24932],{},[2122,24933],{"alt":29,"src":24934},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[108,24936,24937],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[752,24939,24940],{"start":51},[755,24941,24942],{},"方法二：actor-critic算法",[108,24944,24945],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[108,24947,24948],{},"两个网络的构建：",[108,24950,24951],{},[2122,24952],{"alt":29,"src":24953},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[108,24955,24956],{},"actor网路：",[108,24958,24959],{},[2122,24960],{"alt":29,"src":24961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[108,24963,24964],{},"critic网络",[108,24966,24967],{},[2122,24968],{"alt":29,"src":24969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[752,24971,24972],{"start":60},[755,24973,24974],{},"网络的训练",[108,24976,24977],{},"网络描述",[108,24979,24980],{},[2122,24981],{"alt":29,"src":24982},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[108,24984,24985],{},[2122,24986],{"alt":29,"src":24987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[108,24989,24990],{},"TD算法更新梯度：",[108,24992,24993],{},[2122,24994],{"alt":29,"src":24995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[108,24997,24998],{},"策略网络更新梯度：",[108,25000,25001],{},[2122,25002],{"alt":29,"src":25003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[108,25005,25006],{},"训练整个流程的具体描述：",[108,25008,25009,25012,25013],{},[2122,25010],{"alt":29,"src":25011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2122,25014],{"alt":29,"src":25015},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":29,"searchDepth":51,"depth":51,"links":25017},[25018,25019],{"id":24794,"depth":51,"text":24795},{"id":24904,"depth":51,"text":24905},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24786,"description":29},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25026,"title":25027,"body":25028,"description":25035,"extension":724,"meta":25085,"navigation":726,"path":25086,"seo":25087,"stem":25088,"__hash__":25089},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25029,"toc":25081},[25030,25033,25036,25040,25043,25048,25052,25055,25060,25063,25068,25073,25076],[10,25031,25027],{"id":25032},"_5alphago算法",[108,25034,25035],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25037,25039],{"id":25038},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[108,25041,25042],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[108,25044,25045],{},[2122,25046],{"alt":29,"src":25047},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25049,25051],{"id":25050},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[108,25053,25054],{},"采用强化学习的方式训练策略网络",[108,25056,25057],{},[2122,25058],{"alt":29,"src":25059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[108,25061,25062],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[108,25064,25065],{},[2122,25066],{"alt":29,"src":25067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[108,25069,25070],{},[2122,25071],{"alt":29,"src":25072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[108,25074,25075],{},"强化学习训练策略网络的总结：",[108,25077,25078],{},[2122,25079],{"alt":29,"src":25080},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":29,"searchDepth":51,"depth":51,"links":25082},[25083,25084],{"id":25038,"depth":51,"text":25039},{"id":25050,"depth":51,"text":25051},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25027,"description":25035},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25091,"title":25092,"body":25093,"description":25100,"extension":724,"meta":25103,"navigation":726,"path":25104,"seo":25105,"stem":25106,"__hash__":25107},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25094,"toc":25101},[25095,25098],[10,25096,25092],{"id":25097},"_6价值网络",[108,25099,25100],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":29,"searchDepth":51,"depth":51,"links":25102},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25092,"description":25100},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25109,"title":25110,"body":25111,"description":25115,"extension":724,"meta":25116,"navigation":726,"path":25117,"seo":25118,"stem":25119,"__hash__":25120},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25112,"toc":25113},[],{"title":29,"searchDepth":51,"depth":51,"links":25114},[],"记录自己的强化学习笔记。",{"category":24030},"\u002Fwiki\u002F2025-12-04",{"title":25110,"description":25115},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25122,"title":25123,"body":25124,"description":723,"extension":724,"meta":25163,"navigation":726,"path":25164,"seo":25165,"stem":25166,"__hash__":25167},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25125,"toc":25161},[25126,25129,25132,25138,25141,25147,25150,25155,25158],[10,25127,25123],{"id":25128},"_1-项目概览与官方资源",[108,25130,25131],{},"官方文档：",[108,25133,25134],{},[520,25135,25136],{"href":25136,"rel":25137},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24517],[108,25139,25140],{},"官方代码仓库：",[108,25142,25143],{},[520,25144,25145],{"href":25145,"rel":25146},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24517],[108,25148,25149],{},"复现大体流程：",[108,25151,25152],{},[2122,25153],{"alt":29,"src":25154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[108,25156,25157],{},"本教程的目标是打通这条链路：",[108,25159,25160],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":29,"searchDepth":51,"depth":51,"links":25162},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25123,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25169,"title":25170,"body":25171,"description":723,"extension":724,"meta":25287,"navigation":726,"path":25288,"seo":25289,"stem":25290,"__hash__":25291},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25172,"toc":25282},[25173,25176,25180,25183,25190,25194,25197,25206,25216,25220,25250,25253,25279],[10,25174,25170],{"id":25175},"_2-环境准备与设备连接",[14,25177,25179],{"id":25178},"_21-系统与环境","2.1 系统与环境",[108,25181,25182],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[108,25184,25185,25186,25189],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[31,25187,25188],{},"lerobot"," 依赖。",[14,25191,25193],{"id":25192},"_22-机械臂串口识别","2.2 机械臂串口识别",[108,25195,25196],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[24,25198,25200],{"className":24474,"code":25199,"language":24476,"meta":29,"style":29},"lerobot-find-out\n",[31,25201,25202],{"__ignoreMap":29},[34,25203,25204],{"class":36,"line":37},[34,25205,25199],{"class":149},[108,25207,25208,25209,1008,25212,25215],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[31,25210,25211],{},"\u002Fdev\u002FttyACM0",[31,25213,25214],{},"\u002Fdev\u002FttyACM1","）。",[14,25217,25219],{"id":25218},"_23-串口授权","2.3 串口授权",[24,25221,25223],{"className":24474,"code":25222,"language":24476,"meta":29,"style":29},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[31,25224,25225,25239],{"__ignoreMap":29},[34,25226,25227,25230,25233,25236],{"class":36,"line":37},[34,25228,25229],{"class":149},"sudo",[34,25231,25232],{"class":156}," chmod",[34,25234,25235],{"class":63}," 666",[34,25237,25238],{"class":156}," \u002Fdev\u002FttyACM0\n",[34,25240,25241,25243,25245,25247],{"class":36,"line":51},[34,25242,25229],{"class":149},[34,25244,25232],{"class":156},[34,25246,25235],{"class":63},[34,25248,25249],{"class":156}," \u002Fdev\u002FttyACM1\n",[108,25251,25252],{},"说明：",[1800,25254,25255,25260,25266,25276],{},[755,25256,25257,25259],{},[31,25258,25229],{},"：以 root 权限执行命令。",[755,25261,25262,25265],{},[31,25263,25264],{},"chmod","：修改设备节点权限。",[755,25267,25268,25271,25272,25275],{},[31,25269,25270],{},"666","：",[31,25273,25274],{},"rw-rw-rw-","，所有用户可读写。",[755,25277,25278],{},"串口号必须替换为你机器上的真实端口。",[45,25280,25281],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":29,"searchDepth":51,"depth":51,"links":25283},[25284,25285,25286],{"id":25178,"depth":51,"text":25179},{"id":25192,"depth":51,"text":25193},{"id":25218,"depth":51,"text":25219},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25170,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25293,"title":25294,"body":25295,"description":723,"extension":724,"meta":25456,"navigation":726,"path":25457,"seo":25458,"stem":25459,"__hash__":25460},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25296,"toc":25452},[25297,25301,25305,25311,25314,25371,25374,25378,25381,25449],[10,25298,25300],{"id":25299},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25302,25304],{"id":25303},"_31-配置电机-id","3.1 配置电机 ID",[108,25306,25307,25308,25310],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[31,25309,1013],{},"，需要改成机械臂链路里不冲突的编号。",[108,25312,25313],{},"方式一：用 LeRobot 命令逐步写入。",[24,25315,25317],{"className":24474,"code":25316,"language":24476,"meta":29,"style":29},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[31,25318,25319,25324,25332,25339,25344,25348,25353,25359,25366],{"__ignoreMap":29},[34,25320,25321],{"class":36,"line":37},[34,25322,25323],{"class":205},"# 主臂舵机配置 ID\n",[34,25325,25326,25329],{"class":36,"line":51},[34,25327,25328],{"class":149},"lerobot-setup-motors",[34,25330,25331],{"class":63}," \\\n",[34,25333,25334,25337],{"class":36,"line":60},[34,25335,25336],{"class":63},"  --teleop.type=so101_leader",[34,25338,25331],{"class":63},[34,25340,25341],{"class":36,"line":76},[34,25342,25343],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[34,25345,25346],{"class":36,"line":93},[34,25347,3053],{"emptyLinePlaceholder":726},[34,25349,25350],{"class":36,"line":99},[34,25351,25352],{"class":205},"# 从臂舵机配置 ID\n",[34,25354,25355,25357],{"class":36,"line":353},[34,25356,25328],{"class":149},[34,25358,25331],{"class":63},[34,25360,25361,25364],{"class":36,"line":359},[34,25362,25363],{"class":63},"  --robot.type=so101_follower",[34,25365,25331],{"class":63},[34,25367,25368],{"class":36,"line":579},[34,25369,25370],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1\n",[108,25372,25373],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25375,25377],{"id":25376},"_32-机械臂校准","3.2 机械臂校准",[108,25379,25380],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[24,25382,25384],{"className":24474,"code":25383,"language":24476,"meta":29,"style":29},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[31,25385,25386,25391,25398,25404,25411,25416,25420,25425,25431,25437,25444],{"__ignoreMap":29},[34,25387,25388],{"class":36,"line":37},[34,25389,25390],{"class":205},"# 主臂校准\n",[34,25392,25393,25396],{"class":36,"line":51},[34,25394,25395],{"class":149},"lerobot-calibrate",[34,25397,25331],{"class":63},[34,25399,25400,25402],{"class":36,"line":60},[34,25401,25336],{"class":63},[34,25403,25331],{"class":63},[34,25405,25406,25409],{"class":36,"line":76},[34,25407,25408],{"class":63},"  --teleop.port=\u002Fdev\u002FttyACM0",[34,25410,25331],{"class":63},[34,25412,25413],{"class":36,"line":93},[34,25414,25415],{"class":63},"  --teleop.id=my_awesome_leader_arm\n",[34,25417,25418],{"class":36,"line":99},[34,25419,3053],{"emptyLinePlaceholder":726},[34,25421,25422],{"class":36,"line":353},[34,25423,25424],{"class":205},"# 从臂校准\n",[34,25426,25427,25429],{"class":36,"line":359},[34,25428,25395],{"class":149},[34,25430,25331],{"class":63},[34,25432,25433,25435],{"class":36,"line":579},[34,25434,25363],{"class":63},[34,25436,25331],{"class":63},[34,25438,25439,25442],{"class":36,"line":589},[34,25440,25441],{"class":63},"  --robot.port=\u002Fdev\u002FttyACM1",[34,25443,25331],{"class":63},[34,25445,25446],{"class":36,"line":601},[34,25447,25448],{"class":63},"  --robot.id=my_awesome_follower_arm\n",[45,25450,25451],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":25453},[25454,25455],{"id":25303,"depth":51,"text":25304},{"id":25376,"depth":51,"text":25377},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25294,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25462,"title":25463,"body":25464,"description":723,"extension":724,"meta":25655,"navigation":726,"path":25656,"seo":25657,"stem":25658,"__hash__":25659},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25465,"toc":25651},[25466,25469,25473,25520,25524,25537,25600,25603,25648],[10,25467,25463],{"id":25468},"_4-遥操与相机接入",[14,25470,25472],{"id":25471},"_41-不带相机遥操","4.1 不带相机遥操",[24,25474,25476],{"className":24474,"code":25475,"language":24476,"meta":29,"style":29},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[31,25477,25478,25485,25491,25497,25504,25510,25516],{"__ignoreMap":29},[34,25479,25480,25483],{"class":36,"line":37},[34,25481,25482],{"class":149},"lerobot-teleoperate",[34,25484,25331],{"class":63},[34,25486,25487,25489],{"class":36,"line":51},[34,25488,25363],{"class":63},[34,25490,25331],{"class":63},[34,25492,25493,25495],{"class":36,"line":60},[34,25494,25441],{"class":63},[34,25496,25331],{"class":63},[34,25498,25499,25502],{"class":36,"line":76},[34,25500,25501],{"class":63},"  --robot.id=my_awesome_follower_arm",[34,25503,25331],{"class":63},[34,25505,25506,25508],{"class":36,"line":93},[34,25507,25336],{"class":63},[34,25509,25331],{"class":63},[34,25511,25512,25514],{"class":36,"line":99},[34,25513,25408],{"class":63},[34,25515,25331],{"class":63},[34,25517,25518],{"class":36,"line":353},[34,25519,25415],{"class":63},[14,25521,25523],{"id":25522},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[24,25525,25527],{"className":24474,"code":25526,"language":24476,"meta":29,"style":29},"lerobot-find-cameras opencv\n",[31,25528,25529],{"__ignoreMap":29},[34,25530,25531,25534],{"class":36,"line":37},[34,25532,25533],{"class":149},"lerobot-find-cameras",[34,25535,25536],{"class":156}," opencv\n",[24,25538,25540],{"className":24474,"code":25539,"language":24476,"meta":29,"style":29},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[31,25541,25542,25548,25554,25560,25566,25576,25582,25588,25595],{"__ignoreMap":29},[34,25543,25544,25546],{"class":36,"line":37},[34,25545,25482],{"class":149},[34,25547,25331],{"class":63},[34,25549,25550,25552],{"class":36,"line":51},[34,25551,25363],{"class":63},[34,25553,25331],{"class":63},[34,25555,25556,25558],{"class":36,"line":60},[34,25557,25441],{"class":63},[34,25559,25331],{"class":63},[34,25561,25562,25564],{"class":36,"line":76},[34,25563,25501],{"class":63},[34,25565,25331],{"class":63},[34,25567,25568,25571,25574],{"class":36,"line":93},[34,25569,25570],{"class":63},"  --robot.cameras=",[34,25572,25573],{"class":156},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[34,25575,25331],{"class":63},[34,25577,25578,25580],{"class":36,"line":99},[34,25579,25336],{"class":63},[34,25581,25331],{"class":63},[34,25583,25584,25586],{"class":36,"line":353},[34,25585,25408],{"class":63},[34,25587,25331],{"class":63},[34,25589,25590,25593],{"class":36,"line":359},[34,25591,25592],{"class":63},"  --teleop.id=my_awesome_leader_arm",[34,25594,25331],{"class":63},[34,25596,25597],{"class":36,"line":579},[34,25598,25599],{"class":63},"  --display_data=true\n",[108,25601,25602],{},"相机参数说明：",[1800,25604,25605,25611,25617,25626,25636,25642],{},[755,25606,25607,25610],{},[31,25608,25609],{},"front","：相机名称。",[755,25612,25613,25616],{},[31,25614,25615],{},"type: opencv","：相机驱动类型。",[755,25618,25619,25622,25623,25215],{},[31,25620,25621],{},"index_or_path","：设备编号或设备路径（如 ",[31,25624,25625],{},"\u002Fdev\u002Fvideo4",[755,25627,25628,25631,25632,25635],{},[31,25629,25630],{},"width"," \u002F ",[31,25633,25634],{},"height","：图像分辨率。",[755,25637,25638,25641],{},[31,25639,25640],{},"fps","：采样帧率。",[755,25643,25644,25647],{},[31,25645,25646],{},"--display_data=true","：启用实时可视化。",[45,25649,25650],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":25652},[25653,25654],{"id":25471,"depth":51,"text":25472},{"id":25522,"depth":51,"text":25523},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25463,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25661,"title":25662,"body":25663,"description":723,"extension":724,"meta":25835,"navigation":726,"path":25836,"seo":25837,"stem":25838,"__hash__":25839},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25664,"toc":25830},[25665,25669,25673,25678,25683,25686,25728,25734,25738,25787,25792,25796,25799,25807,25812,25817,25822,25827],[10,25666,25668],{"id":25667},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25670,25672],{"id":25671},"_51-生成访问令牌","5.1 生成访问令牌",[108,25674,25675],{},[2122,25676],{"alt":29,"src":25677},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[108,25679,25680],{},[2122,25681],{"alt":29,"src":25682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[108,25684,25685],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[24,25687,25689],{"className":24474,"code":25688,"language":24476,"meta":29,"style":29},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[31,25690,25691,25704],{"__ignoreMap":29},[34,25692,25693,25696,25699,25701],{"class":36,"line":37},[34,25694,25695],{"class":87},"export",[34,25697,25698],{"class":40}," HF_TOKEN",[34,25700,153],{"class":87},[34,25702,25703],{"class":156},"\"your_huggingface_token\"\n",[34,25705,25706,25709,25712,25715,25718,25720,25723,25725],{"class":36,"line":51},[34,25707,25708],{"class":149},"hf",[34,25710,25711],{"class":156}," auth",[34,25713,25714],{"class":156}," login",[34,25716,25717],{"class":63}," --token",[34,25719,10377],{"class":156},[34,25721,25722],{"class":40},"$HF_TOKEN",[34,25724,1046],{"class":156},[34,25726,25727],{"class":63}," --add-to-git-credential\n",[108,25729,25730,25733],{},[31,25731,25732],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25735,25737],{"id":25736},"_52-验证登录","5.2 验证登录",[24,25739,25741],{"className":24474,"code":25740,"language":24476,"meta":29,"style":29},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[31,25742,25743,25774],{"__ignoreMap":29},[34,25744,25745,25748,25750,25753,25755,25757,25760,25763,25766,25769,25772],{"class":36,"line":37},[34,25746,25747],{"class":40},"HF_USER",[34,25749,153],{"class":87},[34,25751,25752],{"class":40},"$(",[34,25754,25708],{"class":149},[34,25756,25711],{"class":156},[34,25758,25759],{"class":156}," whoami",[34,25761,25762],{"class":87}," |",[34,25764,25765],{"class":149}," head",[34,25767,25768],{"class":63}," -n",[34,25770,25771],{"class":63}," 1",[34,25773,807],{"class":40},[34,25775,25776,25779,25781,25784],{"class":36,"line":51},[34,25777,25778],{"class":63},"echo",[34,25780,10377],{"class":156},[34,25782,25783],{"class":40},"$HF_USER",[34,25785,25786],{"class":156},"\"\n",[108,25788,25789],{},[2122,25790],{"alt":29,"src":25791},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25793,25795],{"id":25794},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[108,25797,25798],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1800,25800,25801,25804],{},[755,25802,25803],{},"Dataset Repo（用于上传演示数据）",[755,25805,25806],{},"Model Repo（用于上传训练后的 ACT 权重）",[108,25808,25809],{},[2122,25810],{"alt":29,"src":25811},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[108,25813,25814],{},[2122,25815],{"alt":29,"src":25816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[108,25818,25819],{},[2122,25820],{"alt":29,"src":25821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[108,25823,25824],{},[2122,25825],{"alt":29,"src":25826},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[45,25828,25829],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":25831},[25832,25833,25834],{"id":25671,"depth":51,"text":25672},{"id":25736,"depth":51,"text":25737},{"id":25794,"depth":51,"text":25795},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25662,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25841,"title":25842,"body":25843,"description":723,"extension":724,"meta":26040,"navigation":726,"path":26041,"seo":26042,"stem":26043,"__hash__":26044},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25844,"toc":26035},[25845,25849,25853,25949,25957,25962,25966,25982,25985,25989,26032],[10,25846,25848],{"id":25847},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25850,25852],{"id":25851},"_61-录制示教数据","6.1 录制示教数据",[24,25854,25856],{"className":24474,"code":25855,"language":24476,"meta":29,"style":29},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.num_episodes=10 \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --resume=true\n",[31,25857,25858,25865,25871,25877,25883,25892,25898,25904,25910,25917,25927,25934,25944],{"__ignoreMap":29},[34,25859,25860,25863],{"class":36,"line":37},[34,25861,25862],{"class":149},"lerobot-record",[34,25864,25331],{"class":63},[34,25866,25867,25869],{"class":36,"line":51},[34,25868,25363],{"class":63},[34,25870,25331],{"class":63},[34,25872,25873,25875],{"class":36,"line":60},[34,25874,25441],{"class":63},[34,25876,25331],{"class":63},[34,25878,25879,25881],{"class":36,"line":76},[34,25880,25501],{"class":63},[34,25882,25331],{"class":63},[34,25884,25885,25887,25890],{"class":36,"line":93},[34,25886,25570],{"class":63},[34,25888,25889],{"class":156},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[34,25891,25331],{"class":63},[34,25893,25894,25896],{"class":36,"line":99},[34,25895,25336],{"class":63},[34,25897,25331],{"class":63},[34,25899,25900,25902],{"class":36,"line":353},[34,25901,25408],{"class":63},[34,25903,25331],{"class":63},[34,25905,25906,25908],{"class":36,"line":359},[34,25907,25592],{"class":63},[34,25909,25331],{"class":63},[34,25911,25912,25915],{"class":36,"line":579},[34,25913,25914],{"class":63},"  --display_data=true",[34,25916,25331],{"class":63},[34,25918,25919,25922,25925],{"class":36,"line":589},[34,25920,25921],{"class":63},"  --dataset.repo_id=",[34,25923,25924],{"class":156},"\"Embodied-AI-6\u002Fso101_test\"",[34,25926,25331],{"class":63},[34,25928,25929,25932],{"class":36,"line":601},[34,25930,25931],{"class":63},"  --dataset.num_episodes=10",[34,25933,25331],{"class":63},[34,25935,25936,25939,25942],{"class":36,"line":613},[34,25937,25938],{"class":63},"  --dataset.single_task=",[34,25940,25941],{"class":156},"\"Grab the green cube\"",[34,25943,25331],{"class":63},[34,25945,25946],{"class":36,"line":618},[34,25947,25948],{"class":63},"  --resume=true\n",[1800,25950,25951],{},[755,25952,25953,25956],{},[31,25954,25955],{},"--resume=true","：已有同一数据集时继续追加 episode。",[108,25958,25959],{},[2122,25960],{"alt":29,"src":25961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25963,25965],{"id":25964},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[24,25967,25969],{"className":24474,"code":25968,"language":24476,"meta":29,"style":29},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[31,25970,25971],{"__ignoreMap":29},[34,25972,25973,25976,25979],{"class":36,"line":37},[34,25974,25975],{"class":149},"rm",[34,25977,25978],{"class":63}," -rf",[34,25980,25981],{"class":156}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[108,25983,25984],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25986,25988],{"id":25987},"_63-回放指定-episode","6.3 回放指定 episode",[24,25990,25992],{"className":24474,"code":25991,"language":24476,"meta":29,"style":29},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[31,25993,25994,26001,26007,26013,26019,26027],{"__ignoreMap":29},[34,25995,25996,25999],{"class":36,"line":37},[34,25997,25998],{"class":149},"lerobot-replay",[34,26000,25331],{"class":63},[34,26002,26003,26005],{"class":36,"line":51},[34,26004,25363],{"class":63},[34,26006,25331],{"class":63},[34,26008,26009,26011],{"class":36,"line":60},[34,26010,25441],{"class":63},[34,26012,25331],{"class":63},[34,26014,26015,26017],{"class":36,"line":76},[34,26016,25501],{"class":63},[34,26018,25331],{"class":63},[34,26020,26021,26023,26025],{"class":36,"line":93},[34,26022,25921],{"class":63},[34,26024,25924],{"class":156},[34,26026,25331],{"class":63},[34,26028,26029],{"class":36,"line":99},[34,26030,26031],{"class":63},"  --dataset.episode=0\n",[45,26033,26034],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":26036},[26037,26038,26039],{"id":25851,"depth":51,"text":25852},{"id":25964,"depth":51,"text":25965},{"id":25987,"depth":51,"text":25988},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25842,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26046,"title":26047,"body":26048,"description":723,"extension":724,"meta":26176,"navigation":726,"path":26177,"seo":26178,"stem":26179,"__hash__":26180},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26049,"toc":26174},[26050,26054,26117,26120,26167,26172],[10,26051,26053],{"id":26052},"_7-act-模型训练","7. ACT 模型训练",[24,26055,26057],{"className":24474,"code":26056,"language":24476,"meta":29,"style":29},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[31,26058,26059,26066,26074,26081,26088,26095,26102,26109],{"__ignoreMap":29},[34,26060,26061,26064],{"class":36,"line":37},[34,26062,26063],{"class":149},"lerobot-train",[34,26065,25331],{"class":63},[34,26067,26068,26070,26072],{"class":36,"line":51},[34,26069,25921],{"class":63},[34,26071,25924],{"class":156},[34,26073,25331],{"class":63},[34,26075,26076,26079],{"class":36,"line":60},[34,26077,26078],{"class":63},"  --policy.type=act",[34,26080,25331],{"class":63},[34,26082,26083,26086],{"class":36,"line":76},[34,26084,26085],{"class":63},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[34,26087,25331],{"class":63},[34,26089,26090,26093],{"class":36,"line":93},[34,26091,26092],{"class":63},"  --job_name=act_so101_test",[34,26094,25331],{"class":63},[34,26096,26097,26100],{"class":36,"line":99},[34,26098,26099],{"class":63},"  --policy.device=cuda",[34,26101,25331],{"class":63},[34,26103,26104,26107],{"class":36,"line":353},[34,26105,26106],{"class":63},"  --wandb.enable=false",[34,26108,25331],{"class":63},[34,26110,26111,26114],{"class":36,"line":359},[34,26112,26113],{"class":63},"  --policy.repo_id=",[34,26115,26116],{"class":156},"\"Embodied-AI-6\u002Flerobot_new\"\n",[108,26118,26119],{},"参数说明：",[1800,26121,26122,26128,26134,26140,26146,26155,26161],{},[755,26123,26124,26127],{},[31,26125,26126],{},"--dataset.repo_id","：训练数据集仓库。",[755,26129,26130,26133],{},[31,26131,26132],{},"--policy.type=act","：策略模型类型为 ACT。",[755,26135,26136,26139],{},[31,26137,26138],{},"--output_dir","：本地训练输出目录。",[755,26141,26142,26145],{},[31,26143,26144],{},"--job_name","：训练任务名称。",[755,26147,26148,26151,26152,25215],{},[31,26149,26150],{},"--policy.device","：训练设备（如 ",[31,26153,26154],{},"cuda",[755,26156,26157,26160],{},[31,26158,26159],{},"--wandb.enable","：是否启用 WandB 可视化。",[755,26162,26163,26166],{},[31,26164,26165],{},"--policy.repo_id","：训练后模型推送目标仓库。",[108,26168,26169],{},[2122,26170],{"alt":29,"src":26171},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[45,26173,26034],{},{"title":29,"searchDepth":51,"depth":51,"links":26175},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26047,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26182,"title":26183,"body":26184,"description":723,"extension":724,"meta":26271,"navigation":726,"path":26272,"seo":26273,"stem":26274,"__hash__":26275},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26185,"toc":26269},[26186,26189,26192,26259,26267],[10,26187,26183],{"id":26188},"_8-策略部署与自动采集",[108,26190,26191],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[24,26193,26195],{"className":24474,"code":26194,"language":24476,"meta":29,"style":29},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[31,26196,26197,26203,26209,26215,26223,26229,26236,26244,26252],{"__ignoreMap":29},[34,26198,26199,26201],{"class":36,"line":37},[34,26200,25862],{"class":149},[34,26202,25331],{"class":63},[34,26204,26205,26207],{"class":36,"line":51},[34,26206,25363],{"class":63},[34,26208,25331],{"class":63},[34,26210,26211,26213],{"class":36,"line":60},[34,26212,25441],{"class":63},[34,26214,25331],{"class":63},[34,26216,26217,26219,26221],{"class":36,"line":76},[34,26218,25570],{"class":63},[34,26220,25889],{"class":156},[34,26222,25331],{"class":63},[34,26224,26225,26227],{"class":36,"line":93},[34,26226,25501],{"class":63},[34,26228,25331],{"class":63},[34,26230,26231,26234],{"class":36,"line":99},[34,26232,26233],{"class":63},"  --display_data=false",[34,26235,25331],{"class":63},[34,26237,26238,26240,26242],{"class":36,"line":353},[34,26239,25921],{"class":63},[34,26241,25924],{"class":156},[34,26243,25331],{"class":63},[34,26245,26246,26248,26250],{"class":36,"line":359},[34,26247,25938],{"class":63},[34,26249,25941],{"class":156},[34,26251,25331],{"class":63},[34,26253,26254,26257],{"class":36,"line":579},[34,26255,26256],{"class":63},"  --policy.path=",[34,26258,26116],{"class":156},[1800,26260,26261],{},[755,26262,26263,26266],{},[31,26264,26265],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[45,26268,26034],{},{"title":29,"searchDepth":51,"depth":51,"links":26270},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26183,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26277,"title":26278,"body":26279,"description":723,"extension":724,"meta":26308,"navigation":726,"path":26309,"seo":26310,"stem":26311,"__hash__":26312},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26280,"toc":26306},[26281,26285,26288,26294,26297,26303],[10,26282,26284],{"id":26283},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[108,26286,26287],{},"项目地址：",[108,26289,26290],{},[520,26291,26292],{"href":26292,"rel":26293},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24517],[108,26295,26296],{},"参考教程：",[108,26298,26299],{},[520,26300,26301],{"href":26301,"rel":26302},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24517],[108,26304,26305],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":29,"searchDepth":51,"depth":51,"links":26307},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26278,"description":723},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26314,"title":26315,"body":26316,"description":26320,"extension":724,"meta":26321,"navigation":726,"path":26322,"seo":26323,"stem":26324,"__hash__":26325},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26317,"toc":26318},[],{"title":29,"searchDepth":51,"depth":51,"links":26319},[],"act复现",{"category":24030},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26315,"description":26320},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26327,"title":26328,"body":26329,"description":29,"extension":724,"meta":26630,"navigation":726,"path":26631,"seo":26632,"stem":26633,"__hash__":26634},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26330,"toc":26622},[26331,26334,26338,26348,26355,26362,26365,26372,26375,26378,26382,26393,26397,26443,26446,26449,26452,26455,26458,26462,26500,26506,26510,26564,26569,26572,26575,26580,26583,26588,26591,26594,26598,26601,26604,26608],[10,26332,26328],{"id":26333},"_1简介",[19,26335,26337],{"id":26336},"_11什么是-docker","1.1什么是 Docker？",[108,26339,26340,26341,26344,26345],{},"Docker 是一个开源的 ",[111,26342,26343],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[111,26346,26347],{},"一次构建，到处运行。",[108,26349,26350,26351,26354],{},"“ ",[111,26352,26353],{},"一次构建，到处运行"," ”也就是说：",[752,26356,26357],{},[755,26358,26359],{},[111,26360,26361],{},"之前：",[108,26363,26364],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[752,26366,26367],{},[755,26368,26369],{},[111,26370,26371],{},"使用docker后：",[108,26373,26374],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[108,26376,26377],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[19,26379,26381],{"id":26380},"_12它是怎么工作的","1.2.它是怎么工作的？",[1800,26383,26384,26387],{},[755,26385,26386],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[755,26388,26389,26390,490],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[111,26391,26392],{},"无论在哪运行都一样稳定",[19,26394,26396],{"id":26395},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[934,26398,26399,26409],{},[937,26400,26401],{},[940,26402,26403,26406],{},[943,26404,26405],{"align":24388},"概念",[943,26407,26408],{"align":24388},"解释",[980,26410,26411,26419,26427,26435],{},[940,26412,26413,26416],{},[985,26414,26415],{"align":24388},"镜像",[985,26417,26418],{"align":24388},"Image，运行容器的模板，像是一个应用快照",[940,26420,26421,26424],{},[985,26422,26423],{"align":24388},"容器",[985,26425,26426],{"align":24388},"Container，运行中的镜像实例，有自己的文件系统、网络等",[940,26428,26429,26432],{},[985,26430,26431],{"align":24388},"Dockerfile",[985,26433,26434],{"align":24388},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[940,26436,26437,26440],{},[985,26438,26439],{"align":24388},"仓库",[985,26441,26442],{"align":24388},"Registry，存放镜像的地方，比如 Docker Hub",[108,26444,26445],{},"抽象化理解:",[108,26447,26448],{},"Docker镜像≈C++类",[108,26450,26451],{},"Docker容器≈C++类实例(即对象)",[108,26453,26454],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[108,26456,26457],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[19,26459,26461],{"id":26460},"_14类比理解","1.4.类比理解",[934,26463,26464,26474],{},[937,26465,26466],{},[940,26467,26468,26471],{},[943,26469,26470],{"align":24388},"传统部署",[943,26472,26473],{"align":24388},"Docker部署",[980,26475,26476,26484,26492],{},[940,26477,26478,26481],{},[985,26479,26480],{"align":24388},"手动安装依赖、调试版本不一致问题",[985,26482,26483],{"align":24388},"一次打包环境和代码",[940,26485,26486,26489],{},[985,26487,26488],{"align":24388},"程序“裸奔”跑在系统上",[985,26490,26491],{"align":24388},"程序“穿着容器”隔离运行",[940,26493,26494,26497],{},[985,26495,26496],{"align":24388},"容易“在我电脑上能跑”",[985,26498,26499],{"align":24388},"保证“无论在哪都能跑”",[108,26501,26502,26503],{},"就像快递包裹： ",[111,26504,26505],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[19,26507,26509],{"id":26508},"_15docker-的核心优势","1.5.Docker 的核心优势",[934,26511,26512,26522],{},[937,26513,26514],{},[940,26515,26516,26519],{},[943,26517,26518],{"align":24388},"优势",[943,26520,26521],{"align":24388},"说明",[980,26523,26524,26532,26540,26548,26556],{},[940,26525,26526,26529],{},[985,26527,26528],{"align":24388},"轻量级",[985,26530,26531],{"align":24388},"基于系统内核共享，启动速度快，占资源少",[940,26533,26534,26537],{},[985,26535,26536],{"align":24388},"跨平台",[985,26538,26539],{"align":24388},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[940,26541,26542,26545],{},[985,26543,26544],{"align":24388},"易于迁移部署",[985,26546,26547],{"align":24388},"应用和环境一起封装，不怕依赖不一致",[940,26549,26550,26553],{},[985,26551,26552],{"align":24388},"易于版本控制",[985,26554,26555],{"align":24388},"镜像版本可控，支持回滚",[940,26557,26558,26561],{},[985,26559,26560],{"align":24388},"生态丰富",[985,26562,26563],{"align":24388},"Docker Hub 上有成千上万的现成镜像可用",[752,26565,26566],{},[755,26567,26568],{},"在Linux上可以几乎实现无性能损失。",[108,26570,26571],{},"docker里的发行版和本机共用Linux内核。",[108,26573,26574],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[752,26576,26577],{},[755,26578,26579],{},"可以快速部署在绝大多数Linux发行版",[108,26581,26582],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[752,26584,26585],{},[755,26586,26587],{},"配置环境简单",[108,26589,26590],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[108,26592,26593],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[752,26595,26596],{},[755,26597,26560],{},[108,26599,26600],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[108,26602,26603],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[19,26605,26607],{"id":26606},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1800,26609,26610,26613,26616,26619],{},[755,26611,26612],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[755,26614,26615],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[755,26617,26618],{},"微服务架构：每个服务一个容器，灵活组合",[755,26620,26621],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":29,"searchDepth":51,"depth":51,"links":26623},[26624,26625,26626,26627,26628,26629],{"id":26336,"depth":60,"text":26337},{"id":26380,"depth":60,"text":26381},{"id":26395,"depth":60,"text":26396},{"id":26460,"depth":60,"text":26461},{"id":26508,"depth":60,"text":26509},{"id":26606,"depth":60,"text":26607},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26328,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26636,"title":26637,"body":26638,"description":29,"extension":724,"meta":27370,"navigation":726,"path":27371,"seo":27372,"stem":27373,"__hash__":27374},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26639,"toc":27365},[26640,26643,26647,26650,26653,26659,26665,26669,26678,26681,26738,26741,26792,26795,26878,26881,26918,26922,26933,26946,26953,26956,27036,27039,27089,27092,27115,27119,27125,27128,27144,27150,27153,27169,27175,27178,27194,27208,27214,27234,27240,27243,27255,27261,27264,27278,27284,27287,27307,27312,27315,27318,27322,27325,27328,27331,27338,27341,27344,27347,27352,27357,27362],[10,26641,26637],{"id":26642},"_2安装docker",[19,26644,26646],{"id":26645},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[108,26648,26649],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[108,26651,26652],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[108,26654,26655],{},[520,26656,26657],{"href":26657,"rel":26658},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24517],[108,26660,26661],{},[520,26662,26663],{"href":26663,"rel":26664},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24517],[22650,26666,26668],{"id":26667},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[108,26670,26671,26672,26677],{},"以下内容根据 ",[520,26673,26676],{"href":26674,"rel":26675},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24517],"官方文档"," 修改而来。",[108,26679,26680],{},"如果你过去安装过 docker，先删掉：",[24,26682,26684],{"className":24474,"code":26683,"language":24476,"meta":29,"style":29},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[31,26685,26686],{"__ignoreMap":29},[34,26687,26688,26690,26693,26696,26699,26702,26705,26708,26711,26714,26717,26720,26723,26726,26729,26732,26735],{"class":36,"line":37},[34,26689,3678],{"class":87},[34,26691,26692],{"class":40}," pkg ",[34,26694,26695],{"class":87},"in",[34,26697,26698],{"class":156}," docker.io",[34,26700,26701],{"class":156}," docker-doc",[34,26703,26704],{"class":156}," docker-compose",[34,26706,26707],{"class":156}," docker-compose-v2",[34,26709,26710],{"class":156}," podman-docker",[34,26712,26713],{"class":156}," containerd",[34,26715,26716],{"class":156}," runc",[34,26718,26719],{"class":40},"; ",[34,26721,26722],{"class":87},"do",[34,26724,26725],{"class":149}," sudo",[34,26727,26728],{"class":156}," apt-get",[34,26730,26731],{"class":156}," remove",[34,26733,26734],{"class":40}," $pkg; ",[34,26736,26737],{"class":87},"done\n",[108,26739,26740],{},"首先安装依赖和GPG：",[24,26742,26746],{"className":26743,"code":26744,"language":26745,"meta":29,"style":29},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[31,26747,26748,26753,26758,26763,26768,26773,26778,26782,26787],{"__ignoreMap":29},[34,26749,26750],{"class":36,"line":37},[34,26751,26752],{},"# Add Docker's official GPG key:\n",[34,26754,26755],{"class":36,"line":51},[34,26756,26757],{},"sudo apt-get update\n",[34,26759,26760],{"class":36,"line":60},[34,26761,26762],{},"sudo apt-get install ca-certificates curl\n",[34,26764,26765],{"class":36,"line":76},[34,26766,26767],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[34,26769,26770],{"class":36,"line":93},[34,26771,26772],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[34,26774,26775],{"class":36,"line":99},[34,26776,26777],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[34,26779,26780],{"class":36,"line":353},[34,26781,3053],{"emptyLinePlaceholder":726},[34,26783,26784],{"class":36,"line":359},[34,26785,26786],{},"# 如果上面这行报错就弄下面这行\n",[34,26788,26789],{"class":36,"line":579},[34,26790,26791],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[108,26793,26794],{},"信任 Docker 的 GPG 公钥并添加仓库：",[24,26796,26798],{"className":24474,"code":26797,"language":24476,"meta":29,"style":29},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[31,26799,26800,26805,26811,26828,26861],{"__ignoreMap":29},[34,26801,26802],{"class":36,"line":37},[34,26803,26804],{"class":205},"# Add the repository to Apt sources:\n",[34,26806,26807,26809],{"class":36,"line":51},[34,26808,25778],{"class":63},[34,26810,25331],{"class":63},[34,26812,26813,26816,26819,26822,26825],{"class":36,"line":60},[34,26814,26815],{"class":156},"  \"deb [arch=$(",[34,26817,26818],{"class":149},"dpkg",[34,26820,26821],{"class":63}," --print-architecture",[34,26823,26824],{"class":156},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[34,26826,26827],{"class":63},"\\\n",[34,26829,26830,26833,26835,26837,26840,26843,26845,26847,26850,26852,26854,26857,26859],{"class":36,"line":76},[34,26831,26832],{"class":156},"  \"",[34,26834,25752],{"class":40},[34,26836,1353],{"class":63},[34,26838,26839],{"class":156}," \u002Fetc\u002Fos-release",[34,26841,26842],{"class":40}," && ",[34,26844,25778],{"class":63},[34,26846,10377],{"class":156},[34,26848,26849],{"class":40},"$VERSION_CODENAME",[34,26851,1046],{"class":156},[34,26853,1224],{"class":40},[34,26855,26856],{"class":156},"\" stable\"",[34,26858,25762],{"class":87},[34,26860,25331],{"class":63},[34,26862,26863,26866,26869,26872,26875],{"class":36,"line":93},[34,26864,26865],{"class":149},"  sudo",[34,26867,26868],{"class":156}," tee",[34,26870,26871],{"class":156}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[34,26873,26874],{"class":87}," >",[34,26876,26877],{"class":156}," \u002Fdev\u002Fnull\n",[108,26879,26880],{},"最后安装",[24,26882,26884],{"className":24474,"code":26883,"language":24476,"meta":29,"style":29},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[31,26885,26886,26895],{"__ignoreMap":29},[34,26887,26888,26890,26892],{"class":36,"line":37},[34,26889,25229],{"class":149},[34,26891,26728],{"class":156},[34,26893,26894],{"class":156}," update\n",[34,26896,26897,26899,26901,26903,26906,26909,26912,26915],{"class":36,"line":51},[34,26898,25229],{"class":149},[34,26900,26728],{"class":156},[34,26902,24486],{"class":156},[34,26904,26905],{"class":156}," docker-ce",[34,26907,26908],{"class":156}," docker-ce-cli",[34,26910,26911],{"class":156}," containerd.io",[34,26913,26914],{"class":156}," docker-buildx-plugin",[34,26916,26917],{"class":156}," docker-compose-plugin\n",[22650,26919,26921],{"id":26920},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[108,26923,26924,26925,26928,26929,26932],{},"查看自己自己包管理工具版本（dnf是 ",[111,26926,26927],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[111,26930,26931],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[24,26934,26936],{"className":24474,"code":26935,"language":24476,"meta":29,"style":29},"dnf --version\n",[31,26937,26938],{"__ignoreMap":29},[34,26939,26940,26943],{"class":36,"line":37},[34,26941,26942],{"class":149},"dnf",[34,26944,26945],{"class":63}," --version\n",[108,26947,26671,26948,26952],{},[520,26949,26676],{"href":26950,"rel":26951},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24517]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[108,26954,26955],{},"如果你之前安装过 docker，请先删掉",[24,26957,26959],{"className":24474,"code":26958,"language":24476,"meta":29,"style":29},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[31,26960,26961,26975,26982,26989,26996,27003,27010,27017,27024,27031],{"__ignoreMap":29},[34,26962,26963,26965,26968,26970,26973],{"class":36,"line":37},[34,26964,25229],{"class":149},[34,26966,26967],{"class":156}," dnf",[34,26969,26731],{"class":156},[34,26971,26972],{"class":156}," docker",[34,26974,25331],{"class":63},[34,26976,26977,26980],{"class":36,"line":51},[34,26978,26979],{"class":156},"                  docker-client",[34,26981,25331],{"class":63},[34,26983,26984,26987],{"class":36,"line":60},[34,26985,26986],{"class":156},"                  docker-client-latest",[34,26988,25331],{"class":63},[34,26990,26991,26994],{"class":36,"line":76},[34,26992,26993],{"class":156},"                  docker-common",[34,26995,25331],{"class":63},[34,26997,26998,27001],{"class":36,"line":93},[34,26999,27000],{"class":156},"                  docker-latest",[34,27002,25331],{"class":63},[34,27004,27005,27008],{"class":36,"line":99},[34,27006,27007],{"class":156},"                  docker-latest-logrotate",[34,27009,25331],{"class":63},[34,27011,27012,27015],{"class":36,"line":353},[34,27013,27014],{"class":156},"                  docker-logrotate",[34,27016,25331],{"class":63},[34,27018,27019,27022],{"class":36,"line":359},[34,27020,27021],{"class":156},"                  docker-selinux",[34,27023,25331],{"class":63},[34,27025,27026,27029],{"class":36,"line":579},[34,27027,27028],{"class":156},"                  docker-engine-selinux",[34,27030,25331],{"class":63},[34,27032,27033],{"class":36,"line":589},[34,27034,27035],{"class":156},"                  docker-engine\n",[108,27037,27038],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[24,27040,27042],{"className":24474,"code":27041,"language":24476,"meta":29,"style":29},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[31,27043,27044,27058,27073],{"__ignoreMap":29},[34,27045,27046,27048,27050,27053,27055],{"class":36,"line":37},[34,27047,25229],{"class":149},[34,27049,26967],{"class":156},[34,27051,27052],{"class":63}," -y",[34,27054,24486],{"class":156},[34,27056,27057],{"class":156}," dnf-plugins-core\n",[34,27059,27060,27062,27064,27067,27070],{"class":36,"line":51},[34,27061,25229],{"class":149},[34,27063,26967],{"class":156},[34,27065,27066],{"class":156}," config-manager",[34,27068,27069],{"class":156}," addrepo",[34,27071,27072],{"class":63}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[34,27074,27075,27077,27080,27083,27086],{"class":36,"line":60},[34,27076,25229],{"class":149},[34,27078,27079],{"class":156}," sed",[34,27081,27082],{"class":63}," -i",[34,27084,27085],{"class":156}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[34,27087,27088],{"class":156}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[108,27090,27091],{},"最后安装：",[24,27093,27095],{"className":24474,"code":27094,"language":24476,"meta":29,"style":29},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[31,27096,27097],{"__ignoreMap":29},[34,27098,27099,27101,27103,27105,27107,27109,27111,27113],{"class":36,"line":37},[34,27100,25229],{"class":149},[34,27102,26967],{"class":156},[34,27104,24486],{"class":156},[34,27106,26905],{"class":156},[34,27108,26908],{"class":156},[34,27110,26911],{"class":156},[34,27112,26914],{"class":156},[34,27114,26917],{"class":156},[19,27116,27118],{"id":27117},"_22配置环境","2.2.配置环境",[22650,27120,27122,114],{"id":27121},"_221检查-docker-服务状态",[111,27123,27124],{},"2.2.1.检查 Docker 服务状态",[108,27126,27127],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[24,27129,27131],{"className":24474,"code":27130,"language":24476,"meta":29,"style":29},"systemctl status docker\n",[31,27132,27133],{"__ignoreMap":29},[34,27134,27135,27138,27141],{"class":36,"line":37},[34,27136,27137],{"class":149},"systemctl",[34,27139,27140],{"class":156}," status",[34,27142,27143],{"class":156}," docker\n",[22650,27145,27147,114],{"id":27146},"_222启动-docker-服务",[111,27148,27149],{},"2.2.2.启动 Docker 服务",[108,27151,27152],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[24,27154,27156],{"className":24474,"code":27155,"language":24476,"meta":29,"style":29},"sudo systemctl start docker\n",[31,27157,27158],{"__ignoreMap":29},[34,27159,27160,27162,27165,27167],{"class":36,"line":37},[34,27161,25229],{"class":149},[34,27163,27164],{"class":156}," systemctl",[34,27166,4837],{"class":156},[34,27168,27143],{"class":156},[22650,27170,27172,114],{"id":27171},"_223设置-docker-开机自启",[111,27173,27174],{},"2.2.3.设置 Docker 开机自启",[108,27176,27177],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[24,27179,27181],{"className":24474,"code":27180,"language":24476,"meta":29,"style":29},"sudo systemctl enable docker\n",[31,27182,27183],{"__ignoreMap":29},[34,27184,27185,27187,27189,27192],{"class":36,"line":37},[34,27186,25229],{"class":149},[34,27188,27164],{"class":156},[34,27190,27191],{"class":156}," enable",[34,27193,27143],{"class":156},[22650,27195,27197,14448,27200,14448,27205,114],{"id":27196},"_224将用户添加到-docker-组",[111,27198,27199],{},"2.2.4.将用户添加到",[111,27201,27202],{},[31,27203,27204],{},"docker",[111,27206,27207],{},"组",[108,27209,27210,27211,27213],{},"使用以下命令将当前用户添加到 ",[31,27212,27204],{}," 组：",[24,27215,27217],{"className":24474,"code":27216,"language":24476,"meta":29,"style":29},"sudo usermod -aG docker $USER\n",[31,27218,27219],{"__ignoreMap":29},[34,27220,27221,27223,27226,27229,27231],{"class":36,"line":37},[34,27222,25229],{"class":149},[34,27224,27225],{"class":156}," usermod",[34,27227,27228],{"class":63}," -aG",[34,27230,26972],{"class":156},[34,27232,27233],{"class":40}," $USER\n",[22650,27235,27237,114],{"id":27236},"_225退出并重新登录",[111,27238,27239],{},"2.2.5.退出并重新登录",[108,27241,27242],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[24,27244,27246],{"className":24474,"code":27245,"language":24476,"meta":29,"style":29},"newgrp docker\n",[31,27247,27248],{"__ignoreMap":29},[34,27249,27250,27253],{"class":36,"line":37},[34,27251,27252],{"class":149},"newgrp",[34,27254,27143],{"class":156},[22650,27256,27258,114],{"id":27257},"_226重新启动-docker-服务如果需要",[111,27259,27260],{},"2.2.6.重新启动 Docker 服务（如果需要）",[108,27262,27263],{},"确保 Docker 服务正在运行，可以使用以下命令：",[24,27265,27266],{"className":24474,"code":27155,"language":24476,"meta":29,"style":29},[31,27267,27268],{"__ignoreMap":29},[34,27269,27270,27272,27274,27276],{"class":36,"line":37},[34,27271,25229],{"class":149},[34,27273,27164],{"class":156},[34,27275,4837],{"class":156},[34,27277,27143],{"class":156},[22650,27279,27281,114],{"id":27280},"_227重启电脑后检查-docker-服务状态",[111,27282,27283],{},"2.2.7.重启电脑后检查 Docker 服务状态",[108,27285,27286],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[24,27288,27290],{"className":24474,"code":27289,"language":24476,"meta":29,"style":29},"sudo reboot\nsystemctl status docker\n",[31,27291,27292,27299],{"__ignoreMap":29},[34,27293,27294,27296],{"class":36,"line":37},[34,27295,25229],{"class":149},[34,27297,27298],{"class":156}," reboot\n",[34,27300,27301,27303,27305],{"class":36,"line":51},[34,27302,27137],{"class":149},[34,27304,27140],{"class":156},[34,27306,27143],{"class":156},[108,27308,27309],{},[2122,27310],{"alt":29,"src":27311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[108,27313,27314],{},"第三行显示enabled说明开机自启动成功",[108,27316,27317],{},"按q退出",[19,27319,27321],{"id":27320},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[108,27323,27324],{},"优先使用linux来使用docker是比较好的",[108,27326,27327],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[108,27329,27330],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[108,27332,27333,27334],{},"官方下载安装:",[520,27335,27336],{"href":27336,"rel":27337},"https:\u002F\u002Fwww.docker.com\u002F",[24517],[108,27339,27340],{},"Windows的Docker显卡直通与USB直通:",[108,27342,27343],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[108,27345,27346],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[108,27348,27349],{},[2122,27350],{"alt":29,"src":27351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[108,27353,27354],{},[2122,27355],{"alt":29,"src":27356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[108,27358,27359],{},[2122,27360],{"alt":29,"src":27361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[45,27363,27364],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":29,"searchDepth":51,"depth":51,"links":27366},[27367,27368,27369],{"id":26645,"depth":60,"text":26646},{"id":27117,"depth":60,"text":27118},{"id":27320,"depth":60,"text":27321},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26637,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27376,"title":27377,"body":27378,"description":27385,"extension":724,"meta":28078,"navigation":726,"path":28079,"seo":28080,"stem":28081,"__hash__":28082},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27379,"toc":28072},[27380,27383,27386,27390,27395,27400,27403,27431,27436,27445,27448,27453,27457,27464,27469,27475,27479,27482,27486,27491,27583,27588,27606,27611,27632,27637,27653,27657,27662,27691,27696,27742,27747,27791,27799,27816,27821,27837,27842,27856,27859,27862,27865,27868,27897,27900,27905,27909,27912,27915,27921,27924,27927,27930,27992,27999,28004,28007,28025,28029,28032,28049,28052,28055,28069],[10,27381,27377],{"id":27382},"_3docker直通",[108,27384,27385],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[19,27387,27389],{"id":27388},"_31usb直通","3.1.USB直通",[108,27391,27392],{},[2122,27393],{"alt":29,"src":27394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[752,27396,27397],{},[755,27398,27399],{},"方法一(不是很推荐新手)：",[108,27401,27402],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[24,27404,27406],{"className":24474,"code":27405,"language":24476,"meta":29,"style":29},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[31,27407,27408,27416,27421],{"__ignoreMap":29},[34,27409,27410,27413],{"class":36,"line":37},[34,27411,27412],{"class":149},"ls",[34,27414,27415],{"class":156}," \u002Fdev\n",[34,27417,27418],{"class":36,"line":51},[34,27419,27420],{"class":205},"#例如\n",[34,27422,27423,27426,27428],{"class":36,"line":60},[34,27424,27425],{"class":40},"--device",[34,27427,153],{"class":87},[34,27429,27430],{"class":156},"\u002Fdev\u002Ftty_USB0\n",[752,27432,27433],{"start":51},[755,27434,27435],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[24,27437,27439],{"className":24474,"code":27438,"language":24476,"meta":29,"style":29},"--privileged\n",[31,27440,27441],{"__ignoreMap":29},[34,27442,27443],{"class":36,"line":37},[34,27444,27438],{"class":149},[108,27446,27447],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[108,27449,27450],{},[2122,27451],{"alt":29,"src":27452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[19,27454,27456],{"id":27455},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[108,27458,27459,27460,27463],{},"NVIDIA Container Toolkit使用户 ",[111,27461,27462],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[108,27465,27466],{},[2122,27467],{"alt":29,"src":27468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[108,27470,27471],{},[520,27472,27473],{"href":27473,"rel":27474},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24517],[22650,27476,27478],{"id":27477},"_321安装","3.2.1.安装",[108,27480,27481],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23562,27483,27485],{"id":27484},"_3211ubuntu","3.2.1.1.Ubuntu",[752,27487,27488],{},[755,27489,27490],{},"配置存储库 并更新",[24,27492,27494],{"className":24474,"code":27493,"language":24476,"meta":29,"style":29},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[31,27495,27496,27525,27545,27557,27569,27575],{"__ignoreMap":29},[34,27497,27498,27501,27504,27507,27509,27511,27514,27517,27520,27523],{"class":36,"line":37},[34,27499,27500],{"class":149},"curl",[34,27502,27503],{"class":63}," -fsSL",[34,27505,27506],{"class":156}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[34,27508,25762],{"class":87},[34,27510,26725],{"class":149},[34,27512,27513],{"class":156}," gpg",[34,27515,27516],{"class":63}," --dearmor",[34,27518,27519],{"class":63}," -o",[34,27521,27522],{"class":156}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[34,27524,25331],{"class":63},[34,27526,27527,27530,27532,27535,27538,27541,27543],{"class":36,"line":51},[34,27528,27529],{"class":40},"  && ",[34,27531,27500],{"class":149},[34,27533,27534],{"class":63}," -s",[34,27536,27537],{"class":63}," -L",[34,27539,27540],{"class":156}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[34,27542,25762],{"class":87},[34,27544,25331],{"class":63},[34,27546,27547,27550,27553,27555],{"class":36,"line":60},[34,27548,27549],{"class":149},"    sed",[34,27551,27552],{"class":156}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[34,27554,25762],{"class":87},[34,27556,25331],{"class":63},[34,27558,27559,27562,27564,27567],{"class":36,"line":76},[34,27560,27561],{"class":149},"    sudo",[34,27563,26868],{"class":156},[34,27565,27566],{"class":156}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[34,27568,25331],{"class":63},[34,27570,27571,27573],{"class":36,"line":93},[34,27572,27529],{"class":40},[34,27574,26827],{"class":63},[34,27576,27577,27579,27581],{"class":36,"line":99},[34,27578,27561],{"class":149},[34,27580,26728],{"class":156},[34,27582,26894],{"class":156},[752,27584,27585],{"start":51},[755,27586,27587],{},"安装nvidia-docker2",[24,27589,27591],{"className":24474,"code":27590,"language":24476,"meta":29,"style":29},"sudo apt-get install -y nvidia-docker2\n",[31,27592,27593],{"__ignoreMap":29},[34,27594,27595,27597,27599,27601,27603],{"class":36,"line":37},[34,27596,25229],{"class":149},[34,27598,26728],{"class":156},[34,27600,24486],{"class":156},[34,27602,27052],{"class":63},[34,27604,27605],{"class":156}," nvidia-docker2\n",[752,27607,27608],{"start":60},[755,27609,27610],{},"使用nvidia-ctk命令配置container runtime",[24,27612,27614],{"className":24474,"code":27613,"language":24476,"meta":29,"style":29},"sudo nvidia-ctk runtime configure --runtime=docker\n",[31,27615,27616],{"__ignoreMap":29},[34,27617,27618,27620,27623,27626,27629],{"class":36,"line":37},[34,27619,25229],{"class":149},[34,27621,27622],{"class":156}," nvidia-ctk",[34,27624,27625],{"class":156}," runtime",[34,27627,27628],{"class":156}," configure",[34,27630,27631],{"class":63}," --runtime=docker\n",[752,27633,27634],{"start":76},[755,27635,27636],{},"重启docker服务:",[24,27638,27640],{"className":24474,"code":27639,"language":24476,"meta":29,"style":29},"sudo systemctl restart docker\n",[31,27641,27642],{"__ignoreMap":29},[34,27643,27644,27646,27648,27651],{"class":36,"line":37},[34,27645,25229],{"class":149},[34,27647,27164],{"class":156},[34,27649,27650],{"class":156}," restart",[34,27652,27143],{"class":156},[23562,27654,27656],{"id":27655},"_3212fedora","3.2.1.2.Fedora",[752,27658,27659],{},[755,27660,27661],{},"配置存储库",[24,27663,27665],{"className":24474,"code":27664,"language":24476,"meta":29,"style":29},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[31,27666,27667,27682],{"__ignoreMap":29},[34,27668,27669,27671,27673,27675,27678,27680],{"class":36,"line":37},[34,27670,27500],{"class":149},[34,27672,27534],{"class":63},[34,27674,27537],{"class":63},[34,27676,27677],{"class":156}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[34,27679,25762],{"class":87},[34,27681,25331],{"class":63},[34,27683,27684,27686,27688],{"class":36,"line":51},[34,27685,25229],{"class":149},[34,27687,26868],{"class":156},[34,27689,27690],{"class":156}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[752,27692,27693],{"start":51},[755,27694,27695],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[24,27697,27699],{"className":24474,"code":27698,"language":24476,"meta":29,"style":29},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[31,27700,27701,27706,27720,27724,27729],{"__ignoreMap":29},[34,27702,27703],{"class":36,"line":37},[34,27704,27705],{"class":205},"# 如果是RHEL或者Rocky（DNF4）\n",[34,27707,27708,27710,27712,27714,27717],{"class":36,"line":51},[34,27709,25229],{"class":149},[34,27711,26967],{"class":156},[34,27713,27066],{"class":156},[34,27715,27716],{"class":63}," --add-repo",[34,27718,27719],{"class":156}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[34,27721,27722],{"class":36,"line":60},[34,27723,3053],{"emptyLinePlaceholder":726},[34,27725,27726],{"class":36,"line":76},[34,27727,27728],{"class":205},"# 如果是Feodra41+（DNF5）\n",[34,27730,27731,27733,27735,27737,27739],{"class":36,"line":93},[34,27732,25229],{"class":149},[34,27734,26967],{"class":156},[34,27736,27066],{"class":156},[34,27738,27069],{"class":156},[34,27740,27741],{"class":63}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[752,27743,27744],{"start":60},[755,27745,27746],{},"安装NVIDIA Container Toolki包",[24,27748,27750],{"className":24474,"code":27749,"language":24476,"meta":29,"style":29},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[31,27751,27752,27757,27770,27774,27779],{"__ignoreMap":29},[34,27753,27754],{"class":36,"line":37},[34,27755,27756],{"class":205},"# 如果是RHEL或者Rocky\n",[34,27758,27759,27761,27763,27765,27767],{"class":36,"line":51},[34,27760,25229],{"class":149},[34,27762,26967],{"class":156},[34,27764,24486],{"class":156},[34,27766,27052],{"class":63},[34,27768,27769],{"class":156}," nvidia-container-toolkit\n",[34,27771,27772],{"class":36,"line":60},[34,27773,3053],{"emptyLinePlaceholder":726},[34,27775,27776],{"class":36,"line":76},[34,27777,27778],{"class":205},"# 如果是Fedora\n",[34,27780,27781,27783,27785,27787,27789],{"class":36,"line":93},[34,27782,25229],{"class":149},[34,27784,26967],{"class":156},[34,27786,24486],{"class":156},[34,27788,27052],{"class":63},[34,27790,27769],{"class":156},[752,27792,27793],{"start":76},[755,27794,27795,27796,27798],{},"安装nvidia-docker2 ： 在Fedora上使用",[31,27797,26942],{},"进行安装",[24,27800,27802],{"className":24474,"code":27801,"language":24476,"meta":29,"style":29},"sudo dnf install -y nvidia-docker2\n",[31,27803,27804],{"__ignoreMap":29},[34,27805,27806,27808,27810,27812,27814],{"class":36,"line":37},[34,27807,25229],{"class":149},[34,27809,26967],{"class":156},[34,27811,24486],{"class":156},[34,27813,27052],{"class":63},[34,27815,27605],{"class":156},[752,27817,27818],{"start":93},[755,27819,27820],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[24,27822,27823],{"className":24474,"code":27613,"language":24476,"meta":29,"style":29},[31,27824,27825],{"__ignoreMap":29},[34,27826,27827,27829,27831,27833,27835],{"class":36,"line":37},[34,27828,25229],{"class":149},[34,27830,27622],{"class":156},[34,27832,27625],{"class":156},[34,27834,27628],{"class":156},[34,27836,27631],{"class":63},[752,27838,27839],{"start":99},[755,27840,27841],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[24,27843,27844],{"className":24474,"code":27639,"language":24476,"meta":29,"style":29},[31,27845,27846],{"__ignoreMap":29},[34,27847,27848,27850,27852,27854],{"class":36,"line":37},[34,27849,25229],{"class":149},[34,27851,27164],{"class":156},[34,27853,27650],{"class":156},[34,27855,27143],{"class":156},[108,27857,27858],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[108,27860,27861],{},"方法：",[108,27863,27864],{},"1️⃣nvidia-smi",[108,27866,27867],{},"2️⃣运行nvidia cuda 容器进行测试",[24,27869,27871],{"className":24474,"code":27870,"language":24476,"meta":29,"style":29},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[31,27872,27873],{"__ignoreMap":29},[34,27874,27875,27877,27879,27882,27885,27888,27891,27894],{"class":36,"line":37},[34,27876,25229],{"class":149},[34,27878,26972],{"class":156},[34,27880,27881],{"class":156}," run",[34,27883,27884],{"class":63}," --rm",[34,27886,27887],{"class":63}," --gpus",[34,27889,27890],{"class":156}," all",[34,27892,27893],{"class":156}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[34,27895,27896],{"class":156}," nvidia-smi\n",[108,27898,27899],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[108,27901,27902],{},[2122,27903],{"alt":29,"src":27904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[19,27906,27908],{"id":27907},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[108,27910,27911],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[108,27913,27914],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[108,27916,27917],{},[520,27918,27919],{"href":27919,"rel":27920},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24517],[108,27922,27923],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[108,27925,27926],{},"我们只需要找到对应的Docker镜像当底包即可。",[108,27928,27929],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[934,27931,27932,27948],{},[937,27933,27934],{},[940,27935,27936,27939,27942,27945],{},[943,27937,27938],{"align":24388},"镜像类型",[943,27940,27941],{"align":24388},"适用场景",[943,27943,27944],{"align":24388},"示例标签",[943,27946,27947],{"align":24388},"大小",[980,27949,27950,27964,27978],{},[940,27951,27952,27955,27958,27961],{},[985,27953,27954],{"align":24388},"base",[985,27956,27957],{"align":24388},"仅需 CUDA 运行时库",[985,27959,27960],{"align":24388},"12.4.0-base-ubuntu22.04",[985,27962,27963],{"align":24388},"~240MB",[940,27965,27966,27969,27972,27975],{},[985,27967,27968],{"align":24388},"runtime",[985,27970,27971],{"align":24388},"部署编译后的应用（含数学库）",[985,27973,27974],{"align":24388},"12.4.0-runtime-ubuntu22.04",[985,27976,27977],{"align":24388},"~2GB",[940,27979,27980,27983,27986,27989],{},[985,27981,27982],{"align":24388},"devel",[985,27984,27985],{"align":24388},"开发环境（含编译工具）",[985,27987,27988],{"align":24388},"12.4.0-devel-ubuntu22.04",[985,27990,27991],{"align":24388},"~3GB",[108,27993,27994,27995,27998],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[31,27996,27997],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[108,28000,28001],{},[2122,28002],{"alt":29,"src":28003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[108,28005,28006],{},"在dockerfile里就可以开头这么写：",[24,28008,28010],{"className":24474,"code":28009,"language":24476,"meta":29,"style":29},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[31,28011,28012,28017],{"__ignoreMap":29},[34,28013,28014],{"class":36,"line":37},[34,28015,28016],{"class":205},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[34,28018,28019,28022],{"class":36,"line":51},[34,28020,28021],{"class":149},"FROM",[34,28023,28024],{"class":156}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[19,28026,28028],{"id":28027},"_34配置以太网","3.4.配置以太网",[108,28030,28031],{},"指定网络模式",[24,28033,28035],{"className":24474,"code":28034,"language":24476,"meta":29,"style":29},"--net=host \\\n",[31,28036,28037],{"__ignoreMap":29},[34,28038,28039,28042,28044,28047],{"class":36,"line":37},[34,28040,28041],{"class":40},"--net",[34,28043,153],{"class":87},[34,28045,28046],{"class":156},"host",[34,28048,25331],{"class":149},[108,28050,28051],{},"启动参数里加上这行即可。具体在下方",[108,28053,28054],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1800,28056,28057,28060,28063,28066],{},[755,28058,28059],{},"--net=bridge:默认选项，表示连接到默认的网桥",[755,28061,28062],{},"--net=host:容器使用宿主机的网络",[755,28064,28065],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[755,28067,28068],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[45,28070,28071],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":29,"searchDepth":51,"depth":51,"links":28073},[28074,28075,28076,28077],{"id":27388,"depth":60,"text":27389},{"id":27455,"depth":60,"text":27456},{"id":27907,"depth":60,"text":27908},{"id":28027,"depth":60,"text":28028},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27377,"description":27385},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28084,"title":28085,"body":28086,"description":28093,"extension":724,"meta":28099,"navigation":726,"path":28100,"seo":28101,"stem":28102,"__hash__":28103},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28087,"toc":28097},[28088,28091,28094],[10,28089,28085],{"id":28090},"_4dockerhub换源",[108,28092,28093],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[108,28095,28096],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":29,"searchDepth":51,"depth":51,"links":28098},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28085,"description":28093},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28105,"title":28106,"body":28107,"description":29,"extension":724,"meta":29119,"navigation":726,"path":29120,"seo":29121,"stem":29122,"__hash__":29123},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28108,"toc":29114},[28109,28112,28116,28122,28126,28129,28469,28472,28475,28478,28483,28488,28491,28494,28497,28500,28519,28522,28533,28539,28721,28731,28747,29010,29012,29037,29052,29061,29111],[10,28110,28106],{"id":28111},"_5docker命令学习",[19,28113,28115],{"id":28114},"_51参考文档","5.1.参考文档",[108,28117,28118],{},[520,28119,28120],{"href":28120,"rel":28121},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24517],[19,28123,28125],{"id":28124},"_52常用命令","5.2.常用命令",[108,28127,28128],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[934,28130,28131,28144],{},[937,28132,28133],{},[940,28134,28135,28138,28141],{},[943,28136,28137],{"align":24388},"命令",[943,28139,28140],{"align":24388},"描述",[943,28142,28143],{"align":24388},"示例",[980,28145,28146,28157,28168,28179,28190,28201,28212,28223,28233,28244,28255,28266,28276,28287,28298,28309,28319,28329,28339,28349,28360,28371,28382,28393,28404,28415,28425,28436,28447,28458],{},[940,28147,28148,28151,28154],{},[985,28149,28150],{"align":24388},"docker run",[985,28152,28153],{"align":24388},"创建并启动一个新的容器。",[985,28155,28156],{"align":24388},"docker run -it ubuntu bash",[940,28158,28159,28162,28165],{},[985,28160,28161],{"align":24388},"docker build",[985,28163,28164],{"align":24388},"通过指定的 Dockerfile 创建一个新的镜像。",[985,28166,28167],{"align":24388},"docker build -t myimage .",[940,28169,28170,28173,28176],{},[985,28171,28172],{"align":24388},"docker pull",[985,28174,28175],{"align":24388},"从 Docker 仓库拉取镜像。",[985,28177,28178],{"align":24388},"docker pull ubuntu",[940,28180,28181,28184,28187],{},[985,28182,28183],{"align":24388},"docker push",[985,28185,28186],{"align":24388},"将本地镜像推送到 Docker 仓库。",[985,28188,28189],{"align":24388},"docker push myimage",[940,28191,28192,28195,28198],{},[985,28193,28194],{"align":24388},"docker stop",[985,28196,28197],{"align":24388},"停止一个正在运行的容器。",[985,28199,28200],{"align":24388},"docker stop container_id",[940,28202,28203,28206,28209],{},[985,28204,28205],{"align":24388},"docker start",[985,28207,28208],{"align":24388},"启动一个已经存在的容器。",[985,28210,28211],{"align":24388},"docker start container_id",[940,28213,28214,28217,28220],{},[985,28215,28216],{"align":24388},"docker restart",[985,28218,28219],{"align":24388},"重新启动容器。",[985,28221,28222],{"align":24388},"docker restart container_id",[940,28224,28225,28228,28231],{},[985,28226,28227],{"align":24388},"docker ps",[985,28229,28230],{"align":24388},"列出当前正在运行的容器。",[985,28232,28227],{"align":24388},[940,28234,28235,28238,28241],{},[985,28236,28237],{"align":24388},"docker rm",[985,28239,28240],{"align":24388},"删除一个或多个停止的容器。",[985,28242,28243],{"align":24388},"docker rm container_id",[940,28245,28246,28249,28252],{},[985,28247,28248],{"align":24388},"docker exec",[985,28250,28251],{"align":24388},"在一个正在运行的容器中执行命令。",[985,28253,28254],{"align":24388},"docker exec -it container_id bash",[940,28256,28257,28260,28263],{},[985,28258,28259],{"align":24388},"docker logs",[985,28261,28262],{"align":24388},"查看容器的日志输出。",[985,28264,28265],{"align":24388},"docker logs container_id",[940,28267,28268,28271,28274],{},[985,28269,28270],{"align":24388},"docker images",[985,28272,28273],{"align":24388},"列出本地所有镜像。",[985,28275,28270],{"align":24388},[940,28277,28278,28281,28284],{},[985,28279,28280],{"align":24388},"docker rmi",[985,28282,28283],{"align":24388},"删除一个或多个镜像。",[985,28285,28286],{"align":24388},"docker rmi myimage",[940,28288,28289,28292,28295],{},[985,28290,28291],{"align":24388},"docker network",[985,28293,28294],{"align":24388},"管理 Docker 网络。",[985,28296,28297],{"align":24388},"docker network ls",[940,28299,28300,28303,28306],{},[985,28301,28302],{"align":24388},"docker volume",[985,28304,28305],{"align":24388},"管理 Docker 数据卷。",[985,28307,28308],{"align":24388},"docker volume ls",[940,28310,28311,28314,28317],{},[985,28312,28313],{"align":24388},"docker-compose up",[985,28315,28316],{"align":24388},"启动 docker-compose.yml 中定义的所有服务。",[985,28318,28313],{"align":24388},[940,28320,28321,28324,28327],{},[985,28322,28323],{"align":24388},"docker-compose down",[985,28325,28326],{"align":24388},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[985,28328,28323],{"align":24388},[940,28330,28331,28334,28337],{},[985,28332,28333],{"align":24388},"docker info",[985,28335,28336],{"align":24388},"显示 Docker 系统的详细信息。",[985,28338,28333],{"align":24388},[940,28340,28341,28344,28347],{},[985,28342,28343],{"align":24388},"docker stats",[985,28345,28346],{"align":24388},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[985,28348,28343],{"align":24388},[940,28350,28351,28354,28357],{},[985,28352,28353],{"align":24388},"docker inspect",[985,28355,28356],{"align":24388},"查看容器或镜像的详细信息（JSON 格式）。",[985,28358,28359],{"align":24388},"docker inspect container_id",[940,28361,28362,28365,28368],{},[985,28363,28364],{"align":24388},"docker save",[985,28366,28367],{"align":24388},"将一个镜像保存为 tar 文件。",[985,28369,28370],{"align":24388},"docker save -o myimage.tar myimage",[940,28372,28373,28376,28379],{},[985,28374,28375],{"align":24388},"docker load",[985,28377,28378],{"align":24388},"从 tar 文件中加载镜像。",[985,28380,28381],{"align":24388},"docker load -i myimage.tar",[940,28383,28384,28387,28390],{},[985,28385,28386],{"align":24388},"docker tag",[985,28388,28389],{"align":24388},"为镜像添加标签（tag）。",[985,28391,28392],{"align":24388},"docker tag myimage myimage:v1",[940,28394,28395,28398,28401],{},[985,28396,28397],{"align":24388},"docker buildx build",[985,28399,28400],{"align":24388},"使用 Buildx 构建多架构镜像。",[985,28402,28403],{"align":24388},"docker buildx build -t myimage .",[940,28405,28406,28409,28412],{},[985,28407,28408],{"align":24388},"docker buildx create",[985,28410,28411],{"align":24388},"创建一个新的 Buildx 构建实例。",[985,28413,28414],{"align":24388},"docker buildx create –use",[940,28416,28417,28420,28423],{},[985,28418,28419],{"align":24388},"docker buildx ls",[985,28421,28422],{"align":24388},"列出所有可用的 Buildx 构建实例。",[985,28424,28419],{"align":24388},[940,28426,28427,28430,28433],{},[985,28428,28429],{"align":24388},"docker buildx use",[985,28431,28432],{"align":24388},"设置当前的 Buildx 构建实例。",[985,28434,28435],{"align":24388},"docker buildx use mybuilder",[940,28437,28438,28441,28444],{},[985,28439,28440],{"align":24388},"docker buildx bake",[985,28442,28443],{"align":24388},"使用 Bake 文件批量构建镜像。",[985,28445,28446],{"align":24388},"docker buildx bake -f bake.hcl",[940,28448,28449,28452,28455],{},[985,28450,28451],{"align":24388},"docker buildx build –push",[985,28453,28454],{"align":24388},"构建镜像并推送到镜像仓库。",[985,28456,28457],{"align":24388},"docker buildx build –push -t myimage .",[940,28459,28460,28463,28466],{},[985,28461,28462],{"align":24388},"docker buildx build –platform",[985,28464,28465],{"align":24388},"构建镜像并为多个平台生成支持。",[985,28467,28468],{"align":24388},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[108,28470,28471],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[108,28473,28474],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[108,28476,28477],{},"docker images 可以查看已经下载的镜像",[108,28479,28480],{},[2122,28481],{"alt":29,"src":28482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[108,28484,28485],{},[111,28486,28487],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[108,28489,28490],{},"docker rmi $(docker images -q) 删除所有的镜像",[108,28492,28493],{},"docker container logs 查看容器日志",[108,28495,28496],{},"docker top 查看容器里的进程",[108,28498,28499],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[24,28501,28503],{"className":24474,"code":28502,"language":24476,"meta":29,"style":29},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[31,28504,28505],{"__ignoreMap":29},[34,28506,28507,28510,28513,28516],{"class":36,"line":37},[34,28508,28509],{"class":149},"如：docker",[34,28511,28512],{"class":156}," cp",[34,28514,28515],{"class":156}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[34,28517,28518],{"class":156}," \u002Fmydata\u002Fnginx\n",[108,28520,28521],{},"docker run时在启动容器的时候会有几个常用的选项：",[1800,28523,28524,28527,28530],{},[755,28525,28526],{},"-d选项：表示后台运行",[755,28528,28529],{},"-P选项：随机端口映射",[755,28531,28532],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[19,28534,28536],{"id":28535},"_53run命令的参数非常重要",[111,28537,28538],{},"5.3.run命令的参数（非常重要）",[934,28540,28541,28554],{},[937,28542,28543],{},[940,28544,28545,28548,28551],{},[943,28546,28547],{"align":24388},"参数\u002F配置",[943,28549,28550],{"align":24388},"功能说明",[943,28552,28553],{"align":24388},"重要性与参考依据",[980,28555,28556,28567,28578,28589,28600,28611,28622,28633,28644,28655,28666,28677,28688,28699,28710],{},[940,28557,28558,28561,28564],{},[985,28559,28560],{"align":24388},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[985,28562,28563],{"align":24388},"指定容器名称，便于后续管理",[985,28565,28566],{"align":24388},"替代随机生成的容器名。",[940,28568,28569,28572,28575],{},[985,28570,28571],{"align":24388},"–gpus all",[985,28573,28574],{"align":24388},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[985,28576,28577],{"align":24388},"用于CUDA加速等GPU依赖任务。",[940,28579,28580,28583,28586],{},[985,28581,28582],{"align":24388},"-e NVIDIA_DRIVER_CAPABILITIES=all",[985,28584,28585],{"align":24388},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[985,28587,28588],{"align":24388},"确保容器内GPU功能完整67。",[940,28590,28591,28594,28597],{},[985,28592,28593],{"align":24388},"-dit",[985,28595,28596],{"align":24388},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[985,28598,28599],{"align":24388},"允许容器在后台运行并支持交互操作。",[940,28601,28602,28605,28608],{},[985,28603,28604],{"align":24388},"–privileged",[985,28606,28607],{"align":24388},"赋予容器完全主机权限（可访问设备、内核模块等）",[985,28609,28610],{"align":24388},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[940,28612,28613,28616,28619],{},[985,28614,28615],{"align":24388},"–net=host",[985,28617,28618],{"align":24388},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[985,28620,28621],{"align":24388},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[940,28623,28624,28627,28630],{},[985,28625,28626],{"align":24388},"–group-add audio–group-add video–group-add dialout",[985,28628,28629],{"align":24388},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[985,28631,28632],{"align":24388},"避免权限问题（如避免无法调用摄像头、麦克风）。",[940,28634,28635,28638,28641],{},[985,28636,28637],{"align":24388},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[985,28639,28640],{"align":24388},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[985,28642,28643],{"align":24388},"支持容器内运行图形界面应用（如OpenCV可视化）。",[940,28645,28646,28649,28652],{},[985,28647,28648],{"align":24388},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[985,28650,28651],{"align":24388},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[985,28653,28654],{"align":24388},"实现容器内图形显示。",[940,28656,28657,28660,28663],{},[985,28658,28659],{"align":24388},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[985,28661,28662],{"align":24388},"挂载X11认证文件（只读）",[985,28664,28665],{"align":24388},"确保容器有权连接宿主机显示服务。",[940,28667,28668,28671,28674],{},[985,28669,28670],{"align":24388},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[985,28672,28673],{"align":24388},"挂载Wayland显示协议相关目录",[985,28675,28676],{"align":24388},"支持Wayland协议的图形显示。",[940,28678,28679,28682,28685],{},[985,28680,28681],{"align":24388},"–ulimit nofile=1024:524288",[985,28683,28684],{"align":24388},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[985,28686,28687],{"align":24388},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[940,28689,28690,28693,28696],{},[985,28691,28692],{"align":24388},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[985,28694,28695],{"align":24388},"挂载宿主机用户目录到容器内同名路径",[985,28697,28698],{"align":24388},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[940,28700,28701,28704,28707],{},[985,28702,28703],{"align":24388},"-w \u002Fhome\u002Ftungchiahui",[985,28705,28706],{"align":24388},"设置容器启动后的默认工作目录",[985,28708,28709],{"align":24388},"直接进入项目路径，方便执行命令2324。",[940,28711,28712,28715,28718],{},[985,28713,28714],{"align":24388},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[985,28716,28717],{"align":24388},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[985,28719,28720],{"align":24388},"提供预配置的深度学习与机器人开发环境。",[108,28722,28723,28724,28726,28727,28730],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[31,28725,25229],{},"加不加",[31,28728,28729],{},"sudo -E","都无所谓。",[108,28732,28733,28734,28736,28737,28739,28740,28743,28744,28746],{},"用户已经被加到docker组了，不用",[31,28735,25229],{},"也行跑，其次，",[31,28738,25229],{},"运行的话，你的",[31,28741,28742],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[31,28745,28742],{},"更不可能变了。",[24,28748,28750],{"className":24474,"code":28749,"language":24476,"meta":29,"style":29},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[31,28751,28752,28765,28775,28785,28797,28804,28811,28818,28828,28837,28846,28860,28872,28884,28893,28903,28912,28927,28960,28987,28998,29005],{"__ignoreMap":29},[34,28753,28754,28756,28758,28760,28763],{"class":36,"line":37},[34,28755,25229],{"class":149},[34,28757,26972],{"class":156},[34,28759,27881],{"class":156},[34,28761,28762],{"class":63}," --name=ros_opencv_cuda",[34,28764,25331],{"class":63},[34,28766,28767,28770,28773],{"class":36,"line":51},[34,28768,28769],{"class":40},"--gpus ",[34,28771,28772],{"class":156},"all",[34,28774,25331],{"class":63},[34,28776,28777,28780,28783],{"class":36,"line":60},[34,28778,28779],{"class":40},"-e ",[34,28781,28782],{"class":156},"NVIDIA_DRIVER_CAPABILITIES=all",[34,28784,25331],{"class":63},[34,28786,28787,28789,28792,28795],{"class":36,"line":76},[34,28788,28779],{"class":40},[34,28790,28791],{"class":156},"DISPLAY=",[34,28793,28794],{"class":40},"$DISPLAY ",[34,28796,26827],{"class":63},[34,28798,28799,28802],{"class":36,"line":93},[34,28800,28801],{"class":40},"-dit ",[34,28803,26827],{"class":63},[34,28805,28806,28809],{"class":36,"line":99},[34,28807,28808],{"class":40},"--privileged ",[34,28810,26827],{"class":63},[34,28812,28813,28816],{"class":36,"line":353},[34,28814,28815],{"class":40},"--net=host ",[34,28817,26827],{"class":63},[34,28819,28820,28823,28826],{"class":36,"line":359},[34,28821,28822],{"class":40},"--group-add ",[34,28824,28825],{"class":156},"audio",[34,28827,25331],{"class":63},[34,28829,28830,28832,28835],{"class":36,"line":579},[34,28831,28822],{"class":40},[34,28833,28834],{"class":156},"video",[34,28836,25331],{"class":63},[34,28838,28839,28841,28844],{"class":36,"line":589},[34,28840,28822],{"class":40},[34,28842,28843],{"class":156},"dialout",[34,28845,25331],{"class":63},[34,28847,28848,28850,28853,28855,28858],{"class":36,"line":601},[34,28849,28779],{"class":40},[34,28851,28852],{"class":156},"XAUTHORITY=",[34,28854,28742],{"class":40},[34,28856,28857],{"class":156},"\u002F.Xauthority",[34,28859,25331],{"class":63},[34,28861,28862,28864,28867,28870],{"class":36,"line":613},[34,28863,28779],{"class":40},[34,28865,28866],{"class":156},"WAYLAND_DISPLAY=",[34,28868,28869],{"class":40},"$WAYLAND_DISPLAY ",[34,28871,26827],{"class":63},[34,28873,28874,28876,28879,28882],{"class":36,"line":618},[34,28875,28779],{"class":40},[34,28877,28878],{"class":156},"XDG_RUNTIME_DIR=",[34,28880,28881],{"class":40},"$XDG_RUNTIME_DIR ",[34,28883,26827],{"class":63},[34,28885,28886,28888,28891],{"class":36,"line":628},[34,28887,28779],{"class":40},[34,28889,28890],{"class":156},"QT_QPA_PLATFORM=xcb",[34,28892,25331],{"class":63},[34,28894,28895,28898,28901],{"class":36,"line":640},[34,28896,28897],{"class":40},"-v ",[34,28899,28900],{"class":156},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[34,28902,25331],{"class":63},[34,28904,28905,28907,28910],{"class":36,"line":2301},[34,28906,28897],{"class":40},[34,28908,28909],{"class":156},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[34,28911,25331],{"class":63},[34,28913,28914,28917,28920,28922,28925],{"class":36,"line":2307},[34,28915,28916],{"class":40},"-v $HOME",[34,28918,28919],{"class":156},"\u002F.Xauthority:",[34,28921,28742],{"class":40},[34,28923,28924],{"class":156},"\u002F.Xauthority:ro",[34,28926,25331],{"class":63},[34,28928,28929,28931,28934,28936,28939,28942,28944,28947,28949,28951,28953,28955,28958],{"class":36,"line":2328},[34,28930,28897],{"class":40},[34,28932,28933],{"class":156},"\u002Frun\u002Fuser\u002F",[34,28935,25752],{"class":40},[34,28937,28938],{"class":149},"id",[34,28940,28941],{"class":63}," -u",[34,28943,1224],{"class":40},[34,28945,28946],{"class":156},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[34,28948,25752],{"class":40},[34,28950,28938],{"class":149},[34,28952,28941],{"class":63},[34,28954,1224],{"class":40},[34,28956,28957],{"class":156},"\u002Fwayland-0",[34,28959,25331],{"class":63},[34,28961,28962,28964,28966,28968,28970,28972,28974,28977,28979,28981,28983,28985],{"class":36,"line":2333},[34,28963,28897],{"class":40},[34,28965,28933],{"class":156},[34,28967,25752],{"class":40},[34,28969,28938],{"class":149},[34,28971,28941],{"class":63},[34,28973,1224],{"class":40},[34,28975,28976],{"class":156},":\u002Frun\u002Fuser\u002F",[34,28978,25752],{"class":40},[34,28980,28938],{"class":149},[34,28982,28941],{"class":63},[34,28984,14367],{"class":40},[34,28986,26827],{"class":63},[34,28988,28989,28991,28993,28996],{"class":36,"line":2347},[34,28990,28916],{"class":40},[34,28992,1653],{"class":156},[34,28994,28995],{"class":40},"$HOME ",[34,28997,26827],{"class":63},[34,28999,29000,29003],{"class":36,"line":2352},[34,29001,29002],{"class":40},"-w $HOME ",[34,29004,26827],{"class":63},[34,29006,29007],{"class":36,"line":2381},[34,29008,29009],{"class":40},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[108,29011,9678],{},[752,29013,29014,29022,29025,29028],{},[755,29015,29016,14448,29018,29021],{},[31,29017,28782],{},[31,29019,29020],{},"--gpus all","没有英伟达显卡请注释。",[755,29023,29024],{},"--name后面请自己为容器起名。",[755,29026,29027],{},"最后一行仓库名称请你自己找对应的镜像填上。",[755,29029,29030,29031,29036],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24205,29032,29033],{},[111,29034,29035],{},"请不要加","。",[24,29038,29040],{"className":24474,"code":29039,"language":24476,"meta":29,"style":29},"--ulimit nofile=1024:524288 \\\n",[31,29041,29042],{"__ignoreMap":29},[34,29043,29044,29047,29050],{"class":36,"line":37},[34,29045,29046],{"class":149},"--ulimit",[34,29048,29049],{"class":156}," nofile=1024:524288",[34,29051,25331],{"class":63},[108,29053,29054,29055,29060],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24205,29056,29057],{},[111,29058,29059],{},"不建议","**.**",[24,29062,29064],{"className":24474,"code":29063,"language":24476,"meta":29,"style":29},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[31,29065,29066,29093,29102],{"__ignoreMap":29},[34,29067,29068,29071,29074,29076,29078,29080,29082,29084,29086,29089,29091],{"class":36,"line":37},[34,29069,29070],{"class":149},"--user",[34,29072,29073],{"class":40}," $(",[34,29075,28938],{"class":149},[34,29077,28941],{"class":63},[34,29079,1224],{"class":40},[34,29081,1653],{"class":156},[34,29083,25752],{"class":40},[34,29085,28938],{"class":149},[34,29087,29088],{"class":63}," -g",[34,29090,14367],{"class":40},[34,29092,26827],{"class":63},[34,29094,29095,29097,29100],{"class":36,"line":51},[34,29096,28897],{"class":40},[34,29098,29099],{"class":156},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[34,29101,25331],{"class":63},[34,29103,29104,29106,29109],{"class":36,"line":60},[34,29105,28897],{"class":40},[34,29107,29108],{"class":156},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[34,29110,25331],{"class":63},[45,29112,29113],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":29,"searchDepth":51,"depth":51,"links":29115},[29116,29117,29118],{"id":28114,"depth":60,"text":28115},{"id":28124,"depth":60,"text":28125},{"id":28535,"depth":60,"text":28538},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28106,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29125,"title":29126,"body":29127,"description":29,"extension":724,"meta":30750,"navigation":726,"path":30751,"seo":30752,"stem":30753,"__hash__":30754},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29128,"toc":30745},[29129,29132,29136,29139,29361,29365,29369,29372,29478,29483,29486,29491,29494,29499,29502,29507,29510,29522,29525,29530,29537,29565,29572,29648,29653,29656,29679,29681,29756,29761,29764,29768,29776,29781,29786,29790,29801,29807,29810,29813,29837,29840,29843,29871,29874,29877,30342,30345,30350,30355,30359,30382,30387,30391,30395,30398,30401,30404,30431,30434,30437,30455,30458,30461,30483,30491,30496,30501,30505,30508,30511,30514,30517,30562,30565,30583,30586,30591,30594,30615,30618,30674,30677,30682,30686,30689,30696,30699,30702,30707,30710,30726,30729,30742],[10,29130,29126],{"id":29131},"_6手动创建docker镜像",[19,29133,29135],{"id":29134},"_61dockerfile","6.1.DockerFile",[108,29137,29138],{},"常用命令：",[934,29140,29141,29152],{},[937,29142,29143],{},[940,29144,29145,29148,29150],{},[943,29146,29147],{"align":24388},"指令",[943,29149,26521],{"align":24388},[943,29151,28143],{"align":24388},[980,29153,29154,29164,29180,29191,29202,29213,29224,29235,29246,29260,29274,29285,29299,29310,29321,29335,29350],{},[940,29155,29156,29158,29161],{},[985,29157,28021],{"align":24388},[985,29159,29160],{"align":24388},"指定基础镜像，是 Dockerfile 的起点",[985,29162,29163],{"align":24388},"FROM ubuntu:22.04",[940,29165,29166,29169,29172],{},[985,29167,29168],{"align":24388},"LABEL",[985,29170,29171],{"align":24388},"添加元数据（如作者、版本等）",[985,29173,29174,29175,29179],{"align":24388},"LABEL maintainer=”",[520,29176,29178],{"href":29177},"mailto:you@example.com","you@example.com","”",[940,29181,29182,29185,29188],{},[985,29183,29184],{"align":24388},"ENV",[985,29186,29187],{"align":24388},"设置环境变量",[985,29189,29190],{"align":24388},"ENV PORT=8080",[940,29192,29193,29196,29199],{},[985,29194,29195],{"align":24388},"ARG",[985,29197,29198],{"align":24388},"构建参数，只在构建期间可用",[985,29200,29201],{"align":24388},"ARG VERSION=1.0",[940,29203,29204,29207,29210],{},[985,29205,29206],{"align":24388},"RUN",[985,29208,29209],{"align":24388},"构建镜像时运行命令",[985,29211,29212],{"align":24388},"RUN apt-get update && apt-get install -y curl",[940,29214,29215,29218,29221],{},[985,29216,29217],{"align":24388},"COPY",[985,29219,29220],{"align":24388},"复制文件到镜像中",[985,29222,29223],{"align":24388},"COPY . \u002Fapp",[940,29225,29226,29229,29232],{},[985,29227,29228],{"align":24388},"ADD",[985,29230,29231],{"align":24388},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[985,29233,29234],{"align":24388},"ADD archive.tar.gz \u002Fdata\u002F",[940,29236,29237,29240,29243],{},[985,29238,29239],{"align":24388},"WORKDIR",[985,29241,29242],{"align":24388},"设置工作目录",[985,29244,29245],{"align":24388},"WORKDIR \u002Fopt",[940,29247,29248,29251,29254],{},[985,29249,29250],{"align":24388},"CMD",[985,29252,29253],{"align":24388},"设置容器启动时默认命令（可被 docker run 覆盖）",[985,29255,29256,29257],{"align":24388},"CMD ",[34,29258,29259],{},"“node”, “index.js”",[940,29261,29262,29265,29268],{},[985,29263,29264],{"align":24388},"ENTRYPOINT",[985,29266,29267],{"align":24388},"设置容器启动时固定命令（通常用于 CLI 工具等）",[985,29269,29270,29271],{"align":24388},"ENTRYPOINT ",[34,29272,29273],{},"“python3”",[940,29275,29276,29279,29282],{},[985,29277,29278],{"align":24388},"EXPOSE",[985,29280,29281],{"align":24388},"声明镜像内服务监听的端口（不会自动映射）",[985,29283,29284],{"align":24388},"EXPOSE 80",[940,29286,29287,29290,29293],{},[985,29288,29289],{"align":24388},"VOLUME",[985,29291,29292],{"align":24388},"声明数据卷挂载点",[985,29294,29295,29296],{"align":24388},"VOLUME ",[34,29297,29298],{},"“\u002Fdata”",[940,29300,29301,29304,29307],{},[985,29302,29303],{"align":24388},"USER",[985,29305,29306],{"align":24388},"设置后续命令执行的用户",[985,29308,29309],{"align":24388},"USER appuser",[940,29311,29312,29315,29318],{},[985,29313,29314],{"align":24388},"ONBUILD",[985,29316,29317],{"align":24388},"当镜像作为其他镜像基础镜像时触发的构建指令",[985,29319,29320],{"align":24388},"ONBUILD COPY . \u002Fsrc",[940,29322,29323,29326,29329],{},[985,29324,29325],{"align":24388},"SHELL",[985,29327,29328],{"align":24388},"更改默认 shell，比如将 sh -c 改为 bash -c",[985,29330,29331,29332],{"align":24388},"SHELL ",[34,29333,29334],{},"“\u002Fbin\u002Fbash”, “-c”",[940,29336,29337,29340,29343],{},[985,29338,29339],{"align":24388},"HEALTHCHECK",[985,29341,29342],{"align":24388},"定义容器运行时的健康检查命令",[985,29344,29345,29346],{"align":24388},"`HEALTHCHECK CMD curl –fail ",[520,29347,29348],{"href":29348,"rel":29349},"http:\u002F\u002Flocalhost:8080",[24517],[940,29351,29352,29355,29358],{},[985,29353,29354],{"align":24388},"STOPSIGNAL",[985,29356,29357],{"align":24388},"容器停止时发送的信号",[985,29359,29360],{"align":24388},"STOPSIGNAL SIGKILL",[19,29362,29364],{"id":29363},"_62自己创建容器","6.2.自己创建容器",[22650,29366,29368],{"id":29367},"_621手动创建","6.2.1.手动创建",[108,29370,29371],{},"在x86电脑上编译x86的：",[24,29373,29375],{"className":24474,"code":29374,"language":24476,"meta":29,"style":29},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[31,29376,29377,29393,29397,29410,29414,29427,29431,29444,29448,29461,29465],{"__ignoreMap":29},[34,29378,29379,29381,29384,29387,29390],{"class":36,"line":37},[34,29380,27204],{"class":149},[34,29382,29383],{"class":156}," build",[34,29385,29386],{"class":63}," -t",[34,29388,29389],{"class":156}," ros-melodic-cuda118-cudnn8-bionic:latest",[34,29391,29392],{"class":156}," .\n",[34,29394,29395],{"class":36,"line":51},[34,29396,3053],{"emptyLinePlaceholder":726},[34,29398,29399,29401,29403,29405,29408],{"class":36,"line":60},[34,29400,27204],{"class":149},[34,29402,29383],{"class":156},[34,29404,29386],{"class":63},[34,29406,29407],{"class":156}," ros-noetic-focal:latest",[34,29409,29392],{"class":156},[34,29411,29412],{"class":36,"line":76},[34,29413,3053],{"emptyLinePlaceholder":726},[34,29415,29416,29418,29420,29422,29425],{"class":36,"line":93},[34,29417,27204],{"class":149},[34,29419,29383],{"class":156},[34,29421,29386],{"class":63},[34,29423,29424],{"class":156}," ros-humble-jammy:latest",[34,29426,29392],{"class":156},[34,29428,29429],{"class":36,"line":99},[34,29430,3053],{"emptyLinePlaceholder":726},[34,29432,29433,29435,29437,29439,29442],{"class":36,"line":353},[34,29434,27204],{"class":149},[34,29436,29383],{"class":156},[34,29438,29386],{"class":63},[34,29440,29441],{"class":156}," ros-jazzy-noble:latest",[34,29443,29392],{"class":156},[34,29445,29446],{"class":36,"line":359},[34,29447,3053],{"emptyLinePlaceholder":726},[34,29449,29450,29452,29454,29456,29459],{"class":36,"line":579},[34,29451,27204],{"class":149},[34,29453,29383],{"class":156},[34,29455,29386],{"class":63},[34,29457,29458],{"class":156}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[34,29460,29392],{"class":156},[34,29462,29463],{"class":36,"line":589},[34,29464,3053],{"emptyLinePlaceholder":726},[34,29466,29467,29469,29471,29473,29476],{"class":36,"line":601},[34,29468,27204],{"class":149},[34,29470,29383],{"class":156},[34,29472,29386],{"class":63},[34,29474,29475],{"class":156}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[34,29477,29392],{"class":156},[108,29479,29480],{},[2122,29481],{"alt":29,"src":29482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[108,29484,29485],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[108,29487,29488],{},[2122,29489],{"alt":29,"src":29490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[108,29492,29493],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[752,29495,29496],{},[755,29497,29498],{},"创建 Docker Hub 账户",[108,29500,29501],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[752,29503,29504],{"start":51},[755,29505,29506],{},"登录 Docker Hub",[108,29508,29509],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[24,29511,29513],{"className":24474,"code":29512,"language":24476,"meta":29,"style":29},"docker login\n",[31,29514,29515],{"__ignoreMap":29},[34,29516,29517,29519],{"class":36,"line":37},[34,29518,27204],{"class":149},[34,29520,29521],{"class":156}," login\n",[108,29523,29524],{},"输入你的 Docker Hub 用户名和密码进行验证。",[752,29526,29527],{},[755,29528,29529],{},"为你的镜像打标签",[108,29531,29532,29533,29536],{},"Docker Hub 使用 ",[31,29534,29535],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[24,29538,29540],{"className":24474,"code":29539,"language":24476,"meta":29,"style":29},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[31,29541,29542],{"__ignoreMap":29},[34,29543,29544,29546,29549,29551,29554,29557,29560,29562],{"class":36,"line":37},[34,29545,27204],{"class":149},[34,29547,29548],{"class":156}," tag",[34,29550,29441],{"class":156},[34,29552,29553],{"class":87}," \u003C",[34,29555,29556],{"class":156},"你的用户",[34,29558,29559],{"class":40},"名",[34,29561,1753],{"class":87},[34,29563,29564],{"class":156},"\u002Fros-jazzy-noble:latest\n",[108,29566,29567,29568,29571],{},"例如，如果你的 Docker Hub 用户名是 ",[31,29569,29570],{},"tungchiahui","，你应该执行：",[24,29573,29575],{"className":24474,"code":29574,"language":24476,"meta":29,"style":29},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[31,29576,29577,29588,29592,29603,29607,29618,29622,29633,29637],{"__ignoreMap":29},[34,29578,29579,29581,29583,29585],{"class":36,"line":37},[34,29580,27204],{"class":149},[34,29582,29548],{"class":156},[34,29584,29407],{"class":156},[34,29586,29587],{"class":156}," tungchiahui\u002Fros-noetic-focal:latest\n",[34,29589,29590],{"class":36,"line":51},[34,29591,3053],{"emptyLinePlaceholder":726},[34,29593,29594,29596,29598,29600],{"class":36,"line":60},[34,29595,27204],{"class":149},[34,29597,29548],{"class":156},[34,29599,29424],{"class":156},[34,29601,29602],{"class":156}," tungchiahui\u002Fros-humble-jammy:latest\n",[34,29604,29605],{"class":36,"line":76},[34,29606,3053],{"emptyLinePlaceholder":726},[34,29608,29609,29611,29613,29615],{"class":36,"line":93},[34,29610,27204],{"class":149},[34,29612,29548],{"class":156},[34,29614,29441],{"class":156},[34,29616,29617],{"class":156}," tungchiahui\u002Fros-jazzy-noble:latest\n",[34,29619,29620],{"class":36,"line":99},[34,29621,3053],{"emptyLinePlaceholder":726},[34,29623,29624,29626,29628,29630],{"class":36,"line":353},[34,29625,27204],{"class":149},[34,29627,29548],{"class":156},[34,29629,29458],{"class":156},[34,29631,29632],{"class":156}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[34,29634,29635],{"class":36,"line":359},[34,29636,3053],{"emptyLinePlaceholder":726},[34,29638,29639,29641,29643,29645],{"class":36,"line":579},[34,29640,27204],{"class":149},[34,29642,29548],{"class":156},[34,29644,29475],{"class":156},[34,29646,29647],{"class":156}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[752,29649,29650],{"start":51},[755,29651,29652],{},"推送镜像到 Docker Hub",[108,29654,29655],{},"使用以下命令将镜像推送到 Docker Hub：",[24,29657,29659],{"className":24474,"code":29658,"language":24476,"meta":29,"style":29},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[31,29660,29661],{"__ignoreMap":29},[34,29662,29663,29665,29668,29670,29672,29674,29676],{"class":36,"line":37},[34,29664,27204],{"class":149},[34,29666,29667],{"class":156}," push",[34,29669,29553],{"class":87},[34,29671,29556],{"class":156},[34,29673,29559],{"class":40},[34,29675,1753],{"class":87},[34,29677,29678],{"class":156},"\u002Fros-noetic-jazzy-noble:latest\n",[108,29680,15286],{},[24,29682,29684],{"className":24474,"code":29683,"language":24476,"meta":29,"style":29},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[31,29685,29686,29694,29698,29706,29710,29718,29722,29731,29735,29743,29747],{"__ignoreMap":29},[34,29687,29688,29690,29692],{"class":36,"line":37},[34,29689,27204],{"class":149},[34,29691,29667],{"class":156},[34,29693,29587],{"class":156},[34,29695,29696],{"class":36,"line":51},[34,29697,3053],{"emptyLinePlaceholder":726},[34,29699,29700,29702,29704],{"class":36,"line":60},[34,29701,27204],{"class":149},[34,29703,29667],{"class":156},[34,29705,29602],{"class":156},[34,29707,29708],{"class":36,"line":76},[34,29709,3053],{"emptyLinePlaceholder":726},[34,29711,29712,29714,29716],{"class":36,"line":93},[34,29713,27204],{"class":149},[34,29715,29667],{"class":156},[34,29717,29617],{"class":156},[34,29719,29720],{"class":36,"line":99},[34,29721,3053],{"emptyLinePlaceholder":726},[34,29723,29724,29726,29728],{"class":36,"line":353},[34,29725,27204],{"class":149},[34,29727,29667],{"class":156},[34,29729,29730],{"class":156}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[34,29732,29733],{"class":36,"line":359},[34,29734,3053],{"emptyLinePlaceholder":726},[34,29736,29737,29739,29741],{"class":36,"line":579},[34,29738,27204],{"class":149},[34,29740,29667],{"class":156},[34,29742,29647],{"class":156},[34,29744,29745],{"class":36,"line":589},[34,29746,3053],{"emptyLinePlaceholder":726},[34,29748,29749,29751,29753],{"class":36,"line":601},[34,29750,27204],{"class":149},[34,29752,29667],{"class":156},[34,29754,29755],{"class":156}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[752,29757,29758],{"start":60},[755,29759,29760],{},"验证推送成功",[108,29762,29763],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[108,29765,29766],{},[111,29767,4437],{},[1800,29769,29770,29773],{},[755,29771,29772],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[755,29774,29775],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[108,29777,29778],{},[2122,29779],{"alt":29,"src":29780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[108,29782,29783],{},[2122,29784],{"alt":29,"src":29785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22650,29787,29789],{"id":29788},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[108,29791,29792,29793,29796,29797,29800],{},"如果您想在 ",[111,29794,29795],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[111,29798,29799],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[108,29802,29803,29804],{},"1. ",[111,29805,29806],{},"启用 Docker 跨平台构建",[108,29808,29809],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[108,29811,29812],{},"第一步：启用 buildx（只需执行一次）",[24,29814,29816],{"className":24474,"code":29815,"language":24476,"meta":29,"style":29},"docker buildx create --name multiarch_builder --use\n",[31,29817,29818],{"__ignoreMap":29},[34,29819,29820,29822,29825,29828,29831,29834],{"class":36,"line":37},[34,29821,27204],{"class":149},[34,29823,29824],{"class":156}," buildx",[34,29826,29827],{"class":156}," create",[34,29829,29830],{"class":63}," --name",[34,29832,29833],{"class":156}," multiarch_builder",[34,29835,29836],{"class":63}," --use\n",[108,29838,29839],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[108,29841,29842],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[24,29844,29846],{"className":24474,"code":29845,"language":24476,"meta":29,"style":29},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[31,29847,29848],{"__ignoreMap":29},[34,29849,29850,29852,29854,29856,29859,29862,29865,29868],{"class":36,"line":37},[34,29851,27204],{"class":149},[34,29853,27881],{"class":156},[34,29855,27884],{"class":63},[34,29857,29858],{"class":63}," --privileged",[34,29860,29861],{"class":156}," multiarch\u002Fqemu-user-static",[34,29863,29864],{"class":63}," --reset",[34,29866,29867],{"class":63}," -p",[34,29869,29870],{"class":156}," yes\n",[108,29872,29873],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[108,29875,29876],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[24,29878,29880],{"className":24474,"code":29879,"language":24476,"meta":29,"style":29},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[31,29881,29882,29924,29928,29933,29943,29953,29962,29968,29972,29976,29986,29994,30003,30009,30013,30017,30027,30035,30044,30050,30054,30058,30068,30076,30085,30091,30095,30099,30109,30117,30126,30132,30136,30140,30150,30158,30167,30173,30177,30181,30191,30199,30208,30214,30218,30222,30232,30240,30249,30255,30259,30263,30273,30281,30290,30296,30300,30304,30315,30323,30332,30338],{"__ignoreMap":29},[34,29883,29884,29886,29888,29890,29893,29896,29898,29900,29903,29905,29907,29909,29911,29914,29917,29919,29922],{"class":36,"line":37},[34,29885,27204],{"class":149},[34,29887,29824],{"class":156},[34,29889,29383],{"class":156},[34,29891,29892],{"class":63}," --platform",[34,29894,29895],{"class":156}," linux\u002Famd64,linux\u002Farm64",[34,29897,29386],{"class":63},[34,29899,29553],{"class":87},[34,29901,29902],{"class":156},"你的镜像",[34,29904,29559],{"class":40},[34,29906,1753],{"class":87},[34,29908,1653],{"class":156},[34,29910,41],{"class":87},[34,29912,29913],{"class":156},"标",[34,29915,29916],{"class":40},"签",[34,29918,1753],{"class":87},[34,29920,29921],{"class":63}," --push",[34,29923,29392],{"class":156},[34,29925,29926],{"class":36,"line":51},[34,29927,3053],{"emptyLinePlaceholder":726},[34,29929,29930],{"class":36,"line":60},[34,29931,29932],{"class":205},"# 例子：\n",[34,29934,29935,29937,29939,29941],{"class":36,"line":76},[34,29936,27204],{"class":149},[34,29938,29824],{"class":156},[34,29940,29383],{"class":156},[34,29942,25331],{"class":63},[34,29944,29945,29948,29951],{"class":36,"line":93},[34,29946,29947],{"class":40},"--platform ",[34,29949,29950],{"class":156},"linux\u002Famd64,linux\u002Farm64",[34,29952,25331],{"class":63},[34,29954,29955,29957,29960],{"class":36,"line":99},[34,29956,29386],{"class":63},[34,29958,29959],{"class":156}," tungchiahui\u002Fros:noetic-focal",[34,29961,25331],{"class":63},[34,29963,29964,29966],{"class":36,"line":353},[34,29965,29921],{"class":63},[34,29967,25331],{"class":63},[34,29969,29970],{"class":36,"line":359},[34,29971,29392],{"class":156},[34,29973,29974],{"class":36,"line":579},[34,29975,3053],{"emptyLinePlaceholder":726},[34,29977,29978,29980,29982,29984],{"class":36,"line":589},[34,29979,27204],{"class":149},[34,29981,29824],{"class":156},[34,29983,29383],{"class":156},[34,29985,25331],{"class":63},[34,29987,29988,29990,29992],{"class":36,"line":601},[34,29989,29947],{"class":40},[34,29991,29950],{"class":156},[34,29993,25331],{"class":63},[34,29995,29996,29998,30001],{"class":36,"line":613},[34,29997,29386],{"class":63},[34,29999,30000],{"class":156}," tungchiahui\u002Fros:humble-jammy",[34,30002,25331],{"class":63},[34,30004,30005,30007],{"class":36,"line":618},[34,30006,29921],{"class":63},[34,30008,25331],{"class":63},[34,30010,30011],{"class":36,"line":628},[34,30012,29392],{"class":156},[34,30014,30015],{"class":36,"line":640},[34,30016,3053],{"emptyLinePlaceholder":726},[34,30018,30019,30021,30023,30025],{"class":36,"line":2301},[34,30020,27204],{"class":149},[34,30022,29824],{"class":156},[34,30024,29383],{"class":156},[34,30026,25331],{"class":63},[34,30028,30029,30031,30033],{"class":36,"line":2307},[34,30030,29947],{"class":40},[34,30032,29950],{"class":156},[34,30034,25331],{"class":63},[34,30036,30037,30039,30042],{"class":36,"line":2328},[34,30038,29386],{"class":63},[34,30040,30041],{"class":156}," tungchiahui\u002Fros:jazzy-noble",[34,30043,25331],{"class":63},[34,30045,30046,30048],{"class":36,"line":2333},[34,30047,29921],{"class":63},[34,30049,25331],{"class":63},[34,30051,30052],{"class":36,"line":2347},[34,30053,29392],{"class":156},[34,30055,30056],{"class":36,"line":2352},[34,30057,3053],{"emptyLinePlaceholder":726},[34,30059,30060,30062,30064,30066],{"class":36,"line":2381},[34,30061,26972],{"class":149},[34,30063,29824],{"class":156},[34,30065,29383],{"class":156},[34,30067,25331],{"class":63},[34,30069,30070,30072,30074],{"class":36,"line":2386},[34,30071,29947],{"class":40},[34,30073,29950],{"class":156},[34,30075,25331],{"class":63},[34,30077,30078,30080,30083],{"class":36,"line":2403},[34,30079,29386],{"class":63},[34,30081,30082],{"class":156}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[34,30084,25331],{"class":63},[34,30086,30087,30089],{"class":36,"line":2408},[34,30088,29921],{"class":63},[34,30090,25331],{"class":63},[34,30092,30093],{"class":36,"line":2413},[34,30094,29392],{"class":156},[34,30096,30097],{"class":36,"line":2418},[34,30098,3053],{"emptyLinePlaceholder":726},[34,30100,30101,30103,30105,30107],{"class":36,"line":2432},[34,30102,27204],{"class":149},[34,30104,29824],{"class":156},[34,30106,29383],{"class":156},[34,30108,25331],{"class":63},[34,30110,30111,30113,30115],{"class":36,"line":2437},[34,30112,29947],{"class":40},[34,30114,29950],{"class":156},[34,30116,25331],{"class":63},[34,30118,30119,30121,30124],{"class":36,"line":3230},[34,30120,29386],{"class":63},[34,30122,30123],{"class":156}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[34,30125,25331],{"class":63},[34,30127,30128,30130],{"class":36,"line":3244},[34,30129,29921],{"class":63},[34,30131,25331],{"class":63},[34,30133,30134],{"class":36,"line":3252},[34,30135,29392],{"class":156},[34,30137,30138],{"class":36,"line":3257},[34,30139,3053],{"emptyLinePlaceholder":726},[34,30141,30142,30144,30146,30148],{"class":36,"line":3263},[34,30143,26972],{"class":149},[34,30145,29824],{"class":156},[34,30147,29383],{"class":156},[34,30149,25331],{"class":63},[34,30151,30152,30154,30156],{"class":36,"line":3269},[34,30153,29947],{"class":40},[34,30155,29950],{"class":156},[34,30157,25331],{"class":63},[34,30159,30160,30162,30165],{"class":36,"line":3274},[34,30161,29386],{"class":63},[34,30163,30164],{"class":156}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[34,30166,25331],{"class":63},[34,30168,30169,30171],{"class":36,"line":8601},[34,30170,29921],{"class":63},[34,30172,25331],{"class":63},[34,30174,30175],{"class":36,"line":8625},[34,30176,29392],{"class":156},[34,30178,30179],{"class":36,"line":8630},[34,30180,3053],{"emptyLinePlaceholder":726},[34,30182,30183,30185,30187,30189],{"class":36,"line":8636},[34,30184,27204],{"class":149},[34,30186,29824],{"class":156},[34,30188,29383],{"class":156},[34,30190,25331],{"class":63},[34,30192,30193,30195,30197],{"class":36,"line":8663},[34,30194,29947],{"class":40},[34,30196,29950],{"class":156},[34,30198,25331],{"class":63},[34,30200,30201,30203,30206],{"class":36,"line":8668},[34,30202,29386],{"class":63},[34,30204,30205],{"class":156}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[34,30207,25331],{"class":63},[34,30209,30210,30212],{"class":36,"line":8674},[34,30211,29921],{"class":63},[34,30213,25331],{"class":63},[34,30215,30216],{"class":36,"line":8686},[34,30217,29392],{"class":156},[34,30219,30220],{"class":36,"line":8698},[34,30221,3053],{"emptyLinePlaceholder":726},[34,30223,30224,30226,30228,30230],{"class":36,"line":8710},[34,30225,27204],{"class":149},[34,30227,29824],{"class":156},[34,30229,29383],{"class":156},[34,30231,25331],{"class":63},[34,30233,30234,30236,30238],{"class":36,"line":10369},[34,30235,29947],{"class":40},[34,30237,29950],{"class":156},[34,30239,25331],{"class":63},[34,30241,30242,30244,30247],{"class":36,"line":10394},[34,30243,29386],{"class":63},[34,30245,30246],{"class":156}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[34,30248,25331],{"class":63},[34,30250,30251,30253],{"class":36,"line":10417},[34,30252,29921],{"class":63},[34,30254,25331],{"class":63},[34,30256,30257],{"class":36,"line":10441},[34,30258,29392],{"class":156},[34,30260,30261],{"class":36,"line":10446},[34,30262,3053],{"emptyLinePlaceholder":726},[34,30264,30265,30267,30269,30271],{"class":36,"line":10451},[34,30266,26972],{"class":149},[34,30268,29824],{"class":156},[34,30270,29383],{"class":156},[34,30272,25331],{"class":63},[34,30274,30275,30277,30279],{"class":36,"line":10456},[34,30276,29947],{"class":40},[34,30278,29950],{"class":156},[34,30280,25331],{"class":63},[34,30282,30283,30285,30288],{"class":36,"line":10465},[34,30284,29386],{"class":63},[34,30286,30287],{"class":156}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[34,30289,25331],{"class":63},[34,30291,30292,30294],{"class":36,"line":10470},[34,30293,29921],{"class":63},[34,30295,25331],{"class":63},[34,30297,30298],{"class":36,"line":10476},[34,30299,29392],{"class":156},[34,30301,30302],{"class":36,"line":10497},[34,30303,3053],{"emptyLinePlaceholder":726},[34,30305,30306,30309,30311,30313],{"class":36,"line":10503},[34,30307,30308],{"class":149},"  docker",[34,30310,29824],{"class":156},[34,30312,29383],{"class":156},[34,30314,25331],{"class":63},[34,30316,30317,30319,30321],{"class":36,"line":10517},[34,30318,29947],{"class":40},[34,30320,29950],{"class":156},[34,30322,25331],{"class":63},[34,30324,30325,30327,30330],{"class":36,"line":10523},[34,30326,29386],{"class":63},[34,30328,30329],{"class":156}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[34,30331,25331],{"class":63},[34,30333,30334,30336],{"class":36,"line":10550},[34,30335,29921],{"class":63},[34,30337,25331],{"class":63},[34,30339,30340],{"class":36,"line":10559},[34,30341,29392],{"class":156},[108,30343,30344],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[108,30346,30347],{},[2122,30348],{"alt":29,"src":30349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[108,30351,30352],{},[2122,30353],{"alt":29,"src":30354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22650,30356,30358],{"id":30357},"_623清除构建缓存","6.2.3.清除构建缓存",[24,30360,30362],{"className":24474,"code":30361,"language":24476,"meta":29,"style":29},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[31,30363,30364,30369],{"__ignoreMap":29},[34,30365,30366],{"class":36,"line":37},[34,30367,30368],{"class":205},"# 清理BuildKit构建缓存\n",[34,30370,30371,30373,30376,30379],{"class":36,"line":51},[34,30372,27204],{"class":149},[34,30374,30375],{"class":156}," builder",[34,30377,30378],{"class":156}," prune",[34,30380,30381],{"class":63}," -f\n",[108,30383,30384],{},[2122,30385],{"alt":29,"src":30386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[19,30388,30390],{"id":30389},"_63补充","6.3.补充",[22650,30392,30394],{"id":30393},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[108,30396,30397],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[108,30399,30400],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[108,30402,30403],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[24,30405,30407],{"className":24474,"code":30406,"language":24476,"meta":29,"style":29},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[31,30408,30409,30416],{"__ignoreMap":29},[34,30410,30411,30413],{"class":36,"line":37},[34,30412,28021],{"class":149},[34,30414,30415],{"class":156}," nginx\n",[34,30417,30418,30420,30423,30426,30428],{"class":36,"line":51},[34,30419,29206],{"class":149},[34,30421,30422],{"class":156}," echo",[34,30424,30425],{"class":156}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[34,30427,26874],{"class":87},[34,30429,30430],{"class":156}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[108,30432,30433],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[108,30435,30436],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[24,30438,30440],{"className":24474,"code":30439,"language":24476,"meta":29,"style":29},"docker build -t nginx:tuling .\n",[31,30441,30442],{"__ignoreMap":29},[34,30443,30444,30446,30448,30450,30453],{"class":36,"line":37},[34,30445,27204],{"class":149},[34,30447,29383],{"class":156},[34,30449,29386],{"class":63},[34,30451,30452],{"class":156}," nginx:tuling",[34,30454,29392],{"class":156},[108,30456,30457],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[108,30459,30460],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[24,30462,30464],{"className":24474,"code":30463,"language":24476,"meta":29,"style":29},"docker run -d -p 92:80 nginx:tuling\n",[31,30465,30466],{"__ignoreMap":29},[34,30467,30468,30470,30472,30475,30477,30480],{"class":36,"line":37},[34,30469,27204],{"class":149},[34,30471,27881],{"class":156},[34,30473,30474],{"class":63}," -d",[34,30476,29867],{"class":63},[34,30478,30479],{"class":156}," 92:80",[34,30481,30482],{"class":156}," nginx:tuling\n",[108,30484,30485,30486],{},"4、访问 ",[520,30487,30490],{"href":30488,"rel":30489},"http:\u002F\u002FDocker%E5%AE%BF%E4%B8%BB%E6%9C%BAIP:92\u002F%EF%BC%8C%E5%8F%AF%E7%9C%8B%E5%88%B0%E4%B8%8B%E5%9B%BE%E6%89%80%E7%A4%BA%E7%95%8C%E9%9D%A2",[24517],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[108,30492,30493],{},[2122,30494],{"alt":29,"src":30495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[108,30497,30498],{},[2122,30499],{"alt":29,"src":30500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22650,30502,30504],{"id":30503},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[108,30506,30507],{},"只需要知道大体流程即可",[108,30509,30510],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[108,30512,30513],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[108,30515,30516],{},"2、在Dockerfile中添加以下内容",[24,30518,30520],{"className":26743,"code":30519,"language":26745,"meta":29,"style":29},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[31,30521,30522,30527,30532,30537,30542,30547,30552,30557],{"__ignoreMap":29},[34,30523,30524],{"class":36,"line":37},[34,30525,30526],{},"# 基于哪个镜像\n",[34,30528,30529],{"class":36,"line":51},[34,30530,30531],{},"From java:8\n",[34,30533,30534],{"class":36,"line":60},[34,30535,30536],{},"# 复制文件到容器\n",[34,30538,30539],{"class":36,"line":76},[34,30540,30541],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[34,30543,30544],{"class":36,"line":93},[34,30545,30546],{},"# 声明需要暴露的端口\n",[34,30548,30549],{"class":36,"line":99},[34,30550,30551],{},"EXPOSE 8877\n",[34,30553,30554],{"class":36,"line":353},[34,30555,30556],{},"# 配置容器启动后执行的命令\n",[34,30558,30559],{"class":36,"line":359},[34,30560,30561],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[108,30563,30564],{},"3、使用docker build命令构建镜像",[24,30566,30568],{"className":24474,"code":30567,"language":24476,"meta":29,"style":29},"docker build -t tulingmall-member:0.0.5 .\n",[31,30569,30570],{"__ignoreMap":29},[34,30571,30572,30574,30576,30578,30581],{"class":36,"line":37},[34,30573,27204],{"class":149},[34,30575,29383],{"class":156},[34,30577,29386],{"class":63},[34,30579,30580],{"class":156}," tulingmall-member:0.0.5",[34,30582,29392],{"class":156},[108,30584,30585],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[108,30587,30588],{},[2122,30589],{"alt":29,"src":30590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[108,30592,30593],{},"4、启动镜像，加-d可在后台启动",[24,30595,30597],{"className":24474,"code":30596,"language":24476,"meta":29,"style":29},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[31,30598,30599],{"__ignoreMap":29},[34,30600,30601,30603,30605,30607,30609,30612],{"class":36,"line":37},[34,30602,27204],{"class":149},[34,30604,27881],{"class":156},[34,30606,30474],{"class":63},[34,30608,29867],{"class":63},[34,30610,30611],{"class":156}," 8877:8877",[34,30613,30614],{"class":156}," tulingmall-member:0.0.5\n",[108,30616,30617],{},"加上JVM参数：",[24,30619,30621],{"className":24474,"code":30620,"language":24476,"meta":29,"style":29},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[31,30622,30623,30628,30643,30653,30662,30669],{"__ignoreMap":29},[34,30624,30625],{"class":36,"line":37},[34,30626,30627],{"class":205},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[34,30629,30630,30632,30634,30637,30639,30641],{"class":36,"line":51},[34,30631,27204],{"class":149},[34,30633,27881],{"class":156},[34,30635,30636],{"class":63},"  -d",[34,30638,29867],{"class":63},[34,30640,30611],{"class":156},[34,30642,25331],{"class":63},[34,30644,30645,30647,30650],{"class":36,"line":60},[34,30646,28779],{"class":40},[34,30648,30649],{"class":156},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[34,30651,30652],{"class":63},"  \\\n",[34,30654,30655,30657,30660],{"class":36,"line":76},[34,30656,28779],{"class":40},[34,30658,30659],{"class":156},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[34,30661,30652],{"class":63},[34,30663,30664,30667],{"class":36,"line":93},[34,30665,30666],{"class":40},"--cap-add=SYS_PTRACE  ",[34,30668,26827],{"class":63},[34,30670,30671],{"class":36,"line":99},[34,30672,30673],{"class":40},"tulingmall-member:0.0.5\n",[108,30675,30676],{},"5、访问会员服务接口",[108,30678,30679],{},[2122,30680],{"alt":29,"src":30681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22650,30683,30685],{"id":30684},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[108,30687,30688],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[108,30690,30691,30692],{},"阿里云docker镜像仓库：",[520,30693,30694],{"href":30694,"rel":30695},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24517],[108,30697,30698],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[108,30700,30701],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[108,30703,30704],{},[2122,30705],{"alt":29,"src":30706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[108,30708,30709],{},"要把镜像推送到镜像仓库",[24,30711,30713],{"className":24474,"code":30712,"language":24476,"meta":29,"style":29},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[31,30714,30715],{"__ignoreMap":29},[34,30716,30717,30719,30721,30723],{"class":36,"line":37},[34,30718,27204],{"class":149},[34,30720,29548],{"class":156},[34,30722,30580],{"class":156},[34,30724,30725],{"class":156}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[108,30727,30728],{},"最后将镜像推送到远程仓库",[24,30730,30732],{"className":24474,"code":30731,"language":24476,"meta":29,"style":29},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[31,30733,30734],{"__ignoreMap":29},[34,30735,30736,30738,30740],{"class":36,"line":37},[34,30737,27204],{"class":149},[34,30739,29667],{"class":156},[34,30741,30725],{"class":156},[45,30743,30744],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":30746},[30747,30748,30749],{"id":29134,"depth":60,"text":29135},{"id":29363,"depth":60,"text":29364},{"id":30389,"depth":60,"text":30390},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29126,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30756,"title":30757,"body":30758,"description":29,"extension":724,"meta":30901,"navigation":726,"path":30902,"seo":30903,"stem":30904,"__hash__":30905},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30759,"toc":30899},[30760,30763,30768,30773,30776,30781,30786,30789,30794,30799,30802,30807,30810,30813,30816,30819,30822,30825,30845,30867,30870,30873,30893,30896],[10,30761,30757],{"id":30762},"_7vscode远程开发",[752,30764,30765],{},[755,30766,30767],{},"插件1：微软Docker工具",[108,30769,30770],{},[2122,30771],{"alt":29,"src":30772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[108,30774,30775],{},"docker扩展插件已经进化为container tools了，请安装container tools",[108,30777,30778],{},[2122,30779],{"alt":29,"src":30780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[752,30782,30783],{"start":51},[755,30784,30785],{},"插件2：微软Docker远程开发工具",[108,30787,30788],{},"下面这是远程开发的插件。",[108,30790,30791],{},[2122,30792],{"alt":29,"src":30793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[108,30795,30796],{},[2122,30797],{"alt":29,"src":30798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[108,30800,30801],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[108,30803,30804],{},[2122,30805],{"alt":29,"src":30806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[108,30808,30809],{},"安装完拓展之后，vscode进行链接：",[108,30811,30812],{},"1.按ctrl+shift+p",[108,30814,30815],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[108,30817,30818],{},"3.选择目前运行的容器",[108,30820,30821],{},"4.VS Code 会在新窗口中打开并连接到容器",[108,30823,30824],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[24,30826,30828],{"className":24474,"code":30827,"language":24476,"meta":29,"style":29},"docker run -v 主机目录:容器目录 image-name\n",[31,30829,30830],{"__ignoreMap":29},[34,30831,30832,30834,30836,30839,30842],{"class":36,"line":37},[34,30833,27204],{"class":149},[34,30835,27881],{"class":156},[34,30837,30838],{"class":63}," -v",[34,30840,30841],{"class":156}," 主机目录:容器目录",[34,30843,30844],{"class":156}," image-name\n",[24,30846,30848],{"className":24474,"code":30847,"language":24476,"meta":29,"style":29},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[31,30849,30850],{"__ignoreMap":29},[34,30851,30852,30854,30856,30859,30861,30864],{"class":36,"line":37},[34,30853,27204],{"class":149},[34,30855,27881],{"class":156},[34,30857,30858],{"class":63}," -it",[34,30860,30838],{"class":63},[34,30862,30863],{"class":156}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[34,30865,30866],{"class":156}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[108,30868,30869],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[108,30871,30872],{},"查看挂载情况：",[24,30874,30876],{"className":24474,"code":30875,"language":24476,"meta":29,"style":29},"mount | grep -i project\n",[31,30877,30878],{"__ignoreMap":29},[34,30879,30880,30883,30885,30888,30890],{"class":36,"line":37},[34,30881,30882],{"class":149},"mount",[34,30884,25762],{"class":87},[34,30886,30887],{"class":149}," grep",[34,30889,27082],{"class":63},[34,30891,30892],{"class":156}," project\n",[108,30894,30895],{},"也可以通过ls来进行查看",[45,30897,30898],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":30900},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30757,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30907,"title":30908,"body":30909,"description":723,"extension":724,"meta":30913,"navigation":726,"path":30915,"seo":30916,"stem":30917,"__hash__":30918},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30910,"toc":30911},[],{"title":29,"searchDepth":51,"depth":51,"links":30912},[],{"category":30914},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30908,"description":723},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30920,"title":30921,"body":30922,"description":723,"extension":724,"meta":30926,"navigation":726,"path":30927,"seo":30928,"stem":30929,"__hash__":30930},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30923,"toc":30924},[],{"title":29,"searchDepth":51,"depth":51,"links":30925},[],{"category":30914},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30921,"description":723},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30932,"title":30933,"body":30934,"description":723,"extension":724,"meta":31227,"navigation":726,"path":31228,"seo":31229,"stem":31230,"__hash__":31231},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30935,"toc":31225},[30936,30939,30947,30962,30967,31018,31021,31027,31214,31219,31222],[10,30937,30933],{"id":30938},"_1验证深度学习环境",[108,30940,30941,30942],{},"关于环境的安装，看",[520,30943,30946],{"href":30944,"rel":30945},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24517],"Pytorch-->深度学习",[108,30948,30949,30950,30953,30954,30957,30958,30961],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[31,30951,30952],{},"pytorch-cuda=12.4"," 是一个“ ",[111,30955,30956],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[111,30959,30960],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[108,30963,30964],{},[2122,30965],{"alt":29,"src":30966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[24,30968,30970],{"className":24474,"code":30969,"language":24476,"meta":29,"style":29},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[31,30971,30972,30977],{"__ignoreMap":29},[34,30973,30974],{"class":36,"line":37},[34,30975,30976],{"class":205},"# CUDA 12.4\n",[34,30978,30979,30982,30984,30987,30990,30993,30996,30999,31001,31004,31007,31010,31013,31015],{"class":36,"line":51},[34,30980,30981],{"class":149},"conda",[34,30983,24486],{"class":156},[34,30985,30986],{"class":156}," pytorch==",[34,30988,30989],{"class":63},"2.5.1",[34,30991,30992],{"class":156}," torchvision==",[34,30994,30995],{"class":63},"0.20.1",[34,30997,30998],{"class":156}," torchaudio==",[34,31000,30989],{"class":63},[34,31002,31003],{"class":156}," pytorch-cuda=",[34,31005,31006],{"class":63},"12.4",[34,31008,31009],{"class":63}," -c",[34,31011,31012],{"class":156}," pytorch",[34,31014,31009],{"class":63},[34,31016,31017],{"class":156}," nvidia\n",[108,31019,31020],{},"）：",[108,31022,31023],{},[520,31024,31025],{"href":31025,"rel":31026},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24517],[24,31028,31032],{"className":31029,"code":31030,"language":31031,"meta":29,"style":29},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[31,31033,31034,31039,31047,31052,31062,31078,31083,31093,31130,31137,31149,31165,31170,31180,31192,31202],{"__ignoreMap":29},[34,31035,31036],{"class":36,"line":37},[34,31037,31038],{"class":205},"# 对深度学习环境进行测试\n",[34,31040,31041,31044],{"class":36,"line":51},[34,31042,31043],{"class":87},"import",[34,31045,31046],{"class":40}," torch\n",[34,31048,31049],{"class":36,"line":60},[34,31050,31051],{"class":205},"# 查看cuda是否被激活\n",[34,31053,31054,31057,31059],{"class":36,"line":76},[34,31055,31056],{"class":40},"flag",[34,31058,153],{"class":87},[34,31060,31061],{"class":40},"torch.cuda.is_available()\n",[34,31063,31064,31067,31069,31072,31075],{"class":36,"line":93},[34,31065,31066],{"class":63},"print",[34,31068,801],{"class":40},[34,31070,31071],{"class":156},"\"cuda:\"",[34,31073,31074],{"class":40},", flag)   ",[34,31076,31077],{"class":205},"#返回true的话说明被激活\n",[34,31079,31080],{"class":36,"line":99},[34,31081,31082],{"class":205},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[34,31084,31085,31088,31090],{"class":36,"line":353},[34,31086,31087],{"class":40},"ngpu",[34,31089,153],{"class":87},[34,31091,31092],{"class":63},"1\n",[34,31094,31095,31098,31100,31103,31106,31108,31111,31114,31117,31119,31121,31123,31125,31128],{"class":36,"line":359},[34,31096,31097],{"class":40},"device",[34,31099,153],{"class":87},[34,31101,31102],{"class":40},"torch.device(",[34,31104,31105],{"class":156},"\"cuda:0\"",[34,31107,2358],{"class":87},[34,31109,31110],{"class":40},"(torch.cuda.is_available() ",[34,31112,31113],{"class":87},"and",[34,31115,31116],{"class":40}," ngpu",[34,31118,1753],{"class":87},[34,31120,987],{"class":63},[34,31122,14367],{"class":40},[34,31124,2355],{"class":87},[34,31126,31127],{"class":156}," \"cpu\"",[34,31129,807],{"class":40},[34,31131,31132,31134],{"class":36,"line":579},[34,31133,31066],{"class":63},[34,31135,31136],{"class":40},"(device)\n",[34,31138,31139,31141,31144,31146],{"class":36,"line":589},[34,31140,31066],{"class":63},[34,31142,31143],{"class":40},"(torch.cuda.get_device_name(",[34,31145,987],{"class":63},[34,31147,31148],{"class":40},"))\n",[34,31150,31151,31153,31156,31158,31160,31162],{"class":36,"line":601},[34,31152,31066],{"class":63},[34,31154,31155],{"class":40},"(torch.rand(",[34,31157,869],{"class":63},[34,31159,1173],{"class":40},[34,31161,869],{"class":63},[34,31163,31164],{"class":40},").cuda())\n",[34,31166,31167],{"class":36,"line":613},[34,31168,31169],{"class":205},"# 查看cuda和cudnn的版本\n",[34,31171,31172,31175,31177],{"class":36,"line":618},[34,31173,31174],{"class":40},"cuda_version",[34,31176,153],{"class":87},[34,31178,31179],{"class":40},"torch.version.cuda\n",[34,31181,31182,31184,31186,31189],{"class":36,"line":628},[34,31183,31066],{"class":63},[34,31185,801],{"class":40},[34,31187,31188],{"class":156},"\"cuda version\"",[34,31190,31191],{"class":40},",cuda_version)\n",[34,31193,31194,31197,31199],{"class":36,"line":640},[34,31195,31196],{"class":40},"cudnn_version",[34,31198,153],{"class":87},[34,31200,31201],{"class":40},"torch.backends.cudnn.version()\n",[34,31203,31204,31206,31208,31211],{"class":36,"line":2301},[34,31205,31066],{"class":63},[34,31207,801],{"class":40},[34,31209,31210],{"class":156},"\"cudnn version\"",[34,31212,31213],{"class":40},",cudnn_version)\n",[108,31215,31216],{},[2122,31217],{"alt":29,"src":31218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[108,31220,31221],{},"cuda:0 指的是一块显卡",[45,31223,31224],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":29,"searchDepth":51,"depth":51,"links":31226},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30933,"description":723},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31233,"title":31234,"body":31235,"description":723,"extension":724,"meta":51039,"navigation":726,"path":51040,"seo":51041,"stem":51042,"__hash__":51043},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31236,"toc":51033},[31237,31240,31244,31248,31251,31256,31261,31264,31269,31274,31279,31282,31286,31291,31295,31300,31303,31308,31311,31314,31317,31320,31325,31328,31333,31338,31343,31348,31351,31355,31358,31363,31967,31972,31975,31980,31983,31986,32450,32453,32456,32459,32462,34513,34516,34521,34526,35321,35324,35329,36107,36111,37770,37774,38488,38492,38496,38501,38506,38511,38514,38519,38524,38529,38534,38539,38543,38548,39830,39835,39838,39841,39844,39999,40002,40005,41221,41226,41921,41925,41929,41934,41939,41942,41947,41952,41957,41962,41967,41972,41977,41982,41987,41992,41997,42002,42007,42012,42017,42022,42027,42032,42037,42042,42047,42052,42057,42062,42067,42072,42077,42082,42087,42092,42096,42100,42103,43581,43585,45232,45236,45930,45934,45937,45940,46484,46487,46491,46494,47891,47895,47898,48476,50263,50267,50270,51030],[10,31238,31234],{"id":31239},"_2经典神经网络",[19,31241,31243],{"id":31242},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22650,31245,31247],{"id":31246},"_211原理介绍","2.1.1.原理介绍",[108,31249,31250],{},"LeNet-5",[752,31252,31253],{},[755,31254,31255],{},"原理",[108,31257,31258],{},[2122,31259],{"alt":29,"src":31260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[108,31262,31263],{},"B是batch批次；C是channel通道",[752,31265,31266],{"start":51},[755,31267,31268],{},"网络参数详细",[108,31270,31271],{},[2122,31272],{"alt":29,"src":31273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[108,31275,31276],{},[2122,31277],{"alt":29,"src":31278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[108,31280,31281],{},"AlexNet",[752,31283,31284],{},[755,31285,31255],{},[108,31287,31288],{},[2122,31289],{"alt":29,"src":31290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[752,31292,31293],{"start":51},[755,31294,31268],{},[108,31296,31297],{},[2122,31298],{"alt":29,"src":31299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[108,31301,31302],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[108,31304,31305],{},[2122,31306],{"alt":29,"src":31307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[108,31309,31310],{},"数据处理中的图像增强操作:",[108,31312,31313],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[108,31315,31316],{},"①增加数据量，保证训练数据充足；②防止过拟合",[108,31318,31319],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[108,31321,31322],{},[2122,31323],{"alt":29,"src":31324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[108,31326,31327],{},"提升网络精确度的方法：LRN正则化",[108,31329,31330],{},[2122,31331],{"alt":29,"src":31332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[108,31334,31335],{},[2122,31336],{"alt":29,"src":31337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[752,31339,31340],{"start":60},[755,31341,31342],{},"AlexNet的总结",[108,31344,31345],{},[2122,31346],{"alt":29,"src":31347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[108,31349,31350],{},"比LeNet模型要深一丢丢",[22650,31352,31354],{"id":31353},"_212代码实现","2.1.2.代码实现",[108,31356,31357],{},"（1）LeNet",[752,31359,31360],{},[755,31361,31362],{},"模型搭建",[24,31364,31366],{"className":31029,"code":31365,"language":31031,"meta":29,"style":29},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[31,31367,31368,31373,31379,31384,31397,31402,31414,31418,31438,31443,31448,31459,31464,31483,31487,31492,31541,31553,31558,31587,31622,31649,31654,31666,31671,31691,31710,31729,31733,31738,31748,31765,31776,31791,31802,31813,31828,31843,31854,31861,31865,31879,31884,31907,31912,31917,31922,31926,31931,31936,31946],{"__ignoreMap":29},[34,31369,31370],{"class":36,"line":37},[34,31371,31372],{"class":205},"# 导入库\n",[34,31374,31375,31377],{"class":36,"line":51},[34,31376,31043],{"class":87},[34,31378,31046],{"class":40},[34,31380,31381],{"class":36,"line":60},[34,31382,31383],{"class":205},"# 导入神经网络层\n",[34,31385,31386,31389,31392,31394],{"class":36,"line":76},[34,31387,31388],{"class":87},"from",[34,31390,31391],{"class":40}," torch ",[34,31393,31043],{"class":87},[34,31395,31396],{"class":40}," nn\n",[34,31398,31399],{"class":36,"line":93},[34,31400,31401],{"class":205},"# 导入展示神经网络参数的包\n",[34,31403,31404,31406,31409,31411],{"class":36,"line":99},[34,31405,31388],{"class":87},[34,31407,31408],{"class":40}," torchsummary ",[34,31410,31043],{"class":87},[34,31412,31413],{"class":40}," summary\n",[34,31415,31416],{"class":36,"line":353},[34,31417,3053],{"emptyLinePlaceholder":726},[34,31419,31420,31422,31425,31427,31430,31432,31435],{"class":36,"line":359},[34,31421,15347],{"class":87},[34,31423,31424],{"class":149}," LeNet",[34,31426,801],{"class":40},[34,31428,31429],{"class":149},"nn",[34,31431,1353],{"class":40},[34,31433,31434],{"class":149},"Module",[34,31436,31437],{"class":40},"):\n",[34,31439,31440],{"class":36,"line":579},[34,31441,31442],{"class":205},"    # 模型初始化:\n",[34,31444,31445],{"class":36,"line":589},[34,31446,31447],{"class":205},"    # 定义一些网络层和激活函数\n",[34,31449,31450,31453,31456],{"class":36,"line":601},[34,31451,31452],{"class":87},"    def",[34,31454,31455],{"class":63}," __init__",[34,31457,31458],{"class":40},"(self):\n",[34,31460,31461],{"class":36,"line":613},[34,31462,31463],{"class":205},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[34,31465,31466,31469,31472,31475,31478,31481],{"class":36,"line":618},[34,31467,31468],{"class":63},"        super",[34,31470,31471],{"class":40},"(LeNet,",[34,31473,31474],{"class":63},"self",[34,31476,31477],{"class":40},").",[34,31479,31480],{"class":63},"__init__",[34,31482,2629],{"class":40},[34,31484,31485],{"class":36,"line":628},[34,31486,3053],{"emptyLinePlaceholder":726},[34,31488,31489],{"class":36,"line":640},[34,31490,31491],{"class":205},"        # 定义网络层\n",[34,31493,31494,31497,31500,31502,31505,31508,31510,31512,31514,31517,31519,31521,31523,31526,31528,31530,31532,31535,31537,31539],{"class":36,"line":2301},[34,31495,31496],{"class":63},"        self",[34,31498,31499],{"class":40},".c1",[34,31501,153],{"class":87},[34,31503,31504],{"class":40},"nn.Conv2d(",[34,31506,31507],{"class":5869},"in_channels",[34,31509,153],{"class":87},[34,31511,1013],{"class":63},[34,31513,1173],{"class":40},[34,31515,31516],{"class":5869},"out_channels",[34,31518,153],{"class":87},[34,31520,1139],{"class":63},[34,31522,1173],{"class":40},[34,31524,31525],{"class":5869},"kernel_size",[34,31527,153],{"class":87},[34,31529,1114],{"class":63},[34,31531,1173],{"class":40},[34,31533,31534],{"class":5869},"padding",[34,31536,153],{"class":87},[34,31538,875],{"class":63},[34,31540,807],{"class":40},[34,31542,31543,31545,31548,31550],{"class":36,"line":2307},[34,31544,31496],{"class":63},[34,31546,31547],{"class":40},".sig",[34,31549,153],{"class":87},[34,31551,31552],{"class":40},"nn.Sigmoid()\n",[34,31554,31555],{"class":36,"line":2328},[34,31556,31557],{"class":205},"        # 定义池化\n",[34,31559,31560,31562,31565,31567,31570,31572,31574,31576,31578,31581,31583,31585],{"class":36,"line":2333},[34,31561,31496],{"class":63},[34,31563,31564],{"class":40},".s2",[34,31566,153],{"class":87},[34,31568,31569],{"class":40},"nn.AvgPool2d(",[34,31571,31525],{"class":5869},[34,31573,153],{"class":87},[34,31575,875],{"class":63},[34,31577,1173],{"class":40},[34,31579,31580],{"class":5869},"stride",[34,31582,153],{"class":87},[34,31584,875],{"class":63},[34,31586,807],{"class":40},[34,31588,31589,31591,31594,31596,31598,31600,31602,31604,31606,31608,31610,31612,31614,31616,31618,31620],{"class":36,"line":2347},[34,31590,31496],{"class":63},[34,31592,31593],{"class":40},".c3",[34,31595,153],{"class":87},[34,31597,31504],{"class":40},[34,31599,31507],{"class":5869},[34,31601,153],{"class":87},[34,31603,1139],{"class":63},[34,31605,1173],{"class":40},[34,31607,31516],{"class":5869},[34,31609,153],{"class":87},[34,31611,1396],{"class":63},[34,31613,1173],{"class":40},[34,31615,31525],{"class":5869},[34,31617,153],{"class":87},[34,31619,1114],{"class":63},[34,31621,807],{"class":40},[34,31623,31624,31626,31629,31631,31633,31635,31637,31639,31641,31643,31645,31647],{"class":36,"line":2352},[34,31625,31496],{"class":63},[34,31627,31628],{"class":40},".s4",[34,31630,153],{"class":87},[34,31632,31569],{"class":40},[34,31634,31525],{"class":5869},[34,31636,153],{"class":87},[34,31638,875],{"class":63},[34,31640,1173],{"class":40},[34,31642,31580],{"class":5869},[34,31644,153],{"class":87},[34,31646,875],{"class":63},[34,31648,807],{"class":40},[34,31650,31651],{"class":36,"line":2381},[34,31652,31653],{"class":205},"        # 定义平展层\n",[34,31655,31656,31658,31661,31663],{"class":36,"line":2386},[34,31657,31496],{"class":63},[34,31659,31660],{"class":40},".flatten",[34,31662,153],{"class":87},[34,31664,31665],{"class":40},"nn.Flatten()\n",[34,31667,31668],{"class":36,"line":2403},[34,31669,31670],{"class":205},"        # 定义全连接层\n",[34,31672,31673,31675,31678,31680,31683,31685,31687,31689],{"class":36,"line":2408},[34,31674,31496],{"class":63},[34,31676,31677],{"class":40},".f5",[34,31679,153],{"class":87},[34,31681,31682],{"class":40},"nn.Linear(",[34,31684,4640],{"class":63},[34,31686,1173],{"class":40},[34,31688,1611],{"class":63},[34,31690,807],{"class":40},[34,31692,31693,31695,31698,31700,31702,31704,31706,31708],{"class":36,"line":2413},[34,31694,31496],{"class":63},[34,31696,31697],{"class":40},".f6",[34,31699,153],{"class":87},[34,31701,31682],{"class":40},[34,31703,1611],{"class":63},[34,31705,1173],{"class":40},[34,31707,1506],{"class":63},[34,31709,807],{"class":40},[34,31711,31712,31714,31717,31719,31721,31723,31725,31727],{"class":36,"line":2418},[34,31713,31496],{"class":63},[34,31715,31716],{"class":40},".f7",[34,31718,153],{"class":87},[34,31720,31682],{"class":40},[34,31722,1506],{"class":63},[34,31724,1173],{"class":40},[34,31726,1241],{"class":63},[34,31728,807],{"class":40},[34,31730,31731],{"class":36,"line":2432},[34,31732,3053],{"emptyLinePlaceholder":726},[34,31734,31735],{"class":36,"line":2437},[34,31736,31737],{"class":205},"    # 写工具->写前向传播\n",[34,31739,31740,31742,31745],{"class":36,"line":3230},[34,31741,31452],{"class":87},[34,31743,31744],{"class":149}," forward",[34,31746,31747],{"class":40},"(self,x):\n",[34,31749,31750,31753,31755,31757,31760,31762],{"class":36,"line":3244},[34,31751,31752],{"class":40},"        x",[34,31754,153],{"class":87},[34,31756,31474],{"class":63},[34,31758,31759],{"class":40},".sig(",[34,31761,31474],{"class":63},[34,31763,31764],{"class":40},".c1(x))\n",[34,31766,31767,31769,31771,31773],{"class":36,"line":3252},[34,31768,31752],{"class":40},[34,31770,153],{"class":87},[34,31772,31474],{"class":63},[34,31774,31775],{"class":40},".s2(x)\n",[34,31777,31778,31780,31782,31784,31786,31788],{"class":36,"line":3257},[34,31779,31752],{"class":40},[34,31781,153],{"class":87},[34,31783,31474],{"class":63},[34,31785,31759],{"class":40},[34,31787,31474],{"class":63},[34,31789,31790],{"class":40},".c3(x))\n",[34,31792,31793,31795,31797,31799],{"class":36,"line":3263},[34,31794,31752],{"class":40},[34,31796,153],{"class":87},[34,31798,31474],{"class":63},[34,31800,31801],{"class":40},".s4(x)\n",[34,31803,31804,31806,31808,31810],{"class":36,"line":3269},[34,31805,31752],{"class":40},[34,31807,153],{"class":87},[34,31809,31474],{"class":63},[34,31811,31812],{"class":40},".flatten(x)\n",[34,31814,31815,31817,31819,31821,31823,31825],{"class":36,"line":3274},[34,31816,31752],{"class":40},[34,31818,153],{"class":87},[34,31820,31474],{"class":63},[34,31822,31759],{"class":40},[34,31824,31474],{"class":63},[34,31826,31827],{"class":40},".f5(x))\n",[34,31829,31830,31832,31834,31836,31838,31840],{"class":36,"line":8601},[34,31831,31752],{"class":40},[34,31833,153],{"class":87},[34,31835,31474],{"class":63},[34,31837,31759],{"class":40},[34,31839,31474],{"class":63},[34,31841,31842],{"class":40},".f6(x))\n",[34,31844,31845,31847,31849,31851],{"class":36,"line":8625},[34,31846,31752],{"class":40},[34,31848,153],{"class":87},[34,31850,31474],{"class":63},[34,31852,31853],{"class":40},".f7(x)\n",[34,31855,31856,31858],{"class":36,"line":8630},[34,31857,15405],{"class":87},[34,31859,31860],{"class":40}," x\n",[34,31862,31863],{"class":36,"line":8636},[34,31864,3053],{"emptyLinePlaceholder":726},[34,31866,31867,31869,31872,31874,31877],{"class":36,"line":8663},[34,31868,2191],{"class":87},[34,31870,31871],{"class":63}," __name__",[34,31873,3602],{"class":87},[34,31875,31876],{"class":156},"\"__main__\"",[34,31878,4392],{"class":40},[34,31880,31881],{"class":36,"line":8668},[34,31882,31883],{"class":205},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[34,31885,31886,31889,31891,31893,31896,31898,31901,31903,31905],{"class":36,"line":8674},[34,31887,31888],{"class":40},"    device",[34,31890,153],{"class":87},[34,31892,31102],{"class":40},[34,31894,31895],{"class":156},"\"cuda\"",[34,31897,2358],{"class":87},[34,31899,31900],{"class":40}," torch.cuda.is_available() ",[34,31902,2355],{"class":87},[34,31904,31127],{"class":156},[34,31906,807],{"class":40},[34,31908,31909],{"class":36,"line":8686},[34,31910,31911],{"class":205},"    # 如果就是想指定用cpu用下方代码:\n",[34,31913,31914],{"class":36,"line":8698},[34,31915,31916],{"class":205},"    # device=\"cpu\"\n",[34,31918,31919],{"class":36,"line":8710},[34,31920,31921],{"class":205},"    # print(device)\n",[34,31923,31924],{"class":36,"line":10369},[34,31925,3053],{"emptyLinePlaceholder":726},[34,31927,31928],{"class":36,"line":10394},[34,31929,31930],{"class":205},"    # 实例化模型\n",[34,31932,31933],{"class":36,"line":10417},[34,31934,31935],{"class":205},"    # 将模型放到设备中去运行\n",[34,31937,31938,31941,31943],{"class":36,"line":10441},[34,31939,31940],{"class":40},"    model",[34,31942,153],{"class":87},[34,31944,31945],{"class":40},"LeNet().to(device)\n",[34,31947,31948,31951,31954,31956,31958,31960,31962,31964],{"class":36,"line":10446},[34,31949,31950],{"class":63},"    print",[34,31952,31953],{"class":40},"(summary(model,(",[34,31955,1013],{"class":63},[34,31957,1173],{"class":40},[34,31959,1695],{"class":63},[34,31961,1173],{"class":40},[34,31963,1695],{"class":63},[34,31965,31966],{"class":40},")))\n",[108,31968,31969],{},[2122,31970],{"alt":29,"src":31971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[108,31973,31974],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[752,31976,31977],{"start":51},[755,31978,31979],{},"训练",[108,31981,31982],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[108,31984,31985],{},"在训练之前可以将数据展示看一下",[24,31987,31989],{"className":31029,"code":31988,"language":31031,"meta":29,"style":29},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[31,31990,31991,31996,32001,32013,32025,32038,32043,32055,32060,32072,32077,32089,32093,32097,32118,32130,32135,32156,32167,32171,32176,32194,32205,32210,32221,32226,32237,32241,32246,32261,32274,32279,32284,32297,32310,32323,32328,32332,32337,32357,32374,32394,32407,32420,32430,32445],{"__ignoreMap":29},[34,31992,31993],{"class":36,"line":37},[34,31994,31995],{"class":205},"# 建立画图的函数，用于展示数据\n",[34,31997,31998],{"class":36,"line":51},[34,31999,32000],{"class":205},"# torchvision中包含很多内置的数据集\n",[34,32002,32003,32005,32008,32010],{"class":36,"line":60},[34,32004,31388],{"class":87},[34,32006,32007],{"class":40}," sklearn.externals.array_api_compat.torch ",[34,32009,31043],{"class":87},[34,32011,32012],{"class":40}," squeeze\n",[34,32014,32015,32017,32020,32022],{"class":36,"line":76},[34,32016,31388],{"class":87},[34,32018,32019],{"class":40}," torchvision.datasets ",[34,32021,31043],{"class":87},[34,32023,32024],{"class":40}," FashionMNIST\n",[34,32026,32027,32029,32032,32035],{"class":36,"line":93},[34,32028,31043],{"class":87},[34,32030,32031],{"class":40}," numpy ",[34,32033,32034],{"class":87},"as",[34,32036,32037],{"class":40}," np\n",[34,32039,32040],{"class":36,"line":99},[34,32041,32042],{"class":205},"# 引入处理数据集的包\n",[34,32044,32045,32047,32050,32052],{"class":36,"line":353},[34,32046,31388],{"class":87},[34,32048,32049],{"class":40}," torchvision ",[34,32051,31043],{"class":87},[34,32053,32054],{"class":40}," transforms\n",[34,32056,32057],{"class":36,"line":359},[34,32058,32059],{"class":205},"# 从torch库中引入数据处理的包\n",[34,32061,32062,32064,32067,32069],{"class":36,"line":579},[34,32063,31043],{"class":87},[34,32065,32066],{"class":40}," torch.utils.data ",[34,32068,32034],{"class":87},[34,32070,32071],{"class":40}," Data\n",[34,32073,32074],{"class":36,"line":589},[34,32075,32076],{"class":205},"# 导入画图的库\n",[34,32078,32079,32081,32084,32086],{"class":36,"line":601},[34,32080,31043],{"class":87},[34,32082,32083],{"class":40}," matplotlib.pyplot ",[34,32085,32034],{"class":87},[34,32087,32088],{"class":40}," plt\n",[34,32090,32091],{"class":36,"line":613},[34,32092,3053],{"emptyLinePlaceholder":726},[34,32094,32095],{"class":36,"line":618},[34,32096,3053],{"emptyLinePlaceholder":726},[34,32098,32099,32102,32104,32107,32110,32112,32115],{"class":36,"line":628},[34,32100,32101],{"class":40},"train_data",[34,32103,153],{"class":87},[34,32105,32106],{"class":40},"FashionMNIST(",[34,32108,32109],{"class":5869},"root",[34,32111,153],{"class":87},[34,32113,32114],{"class":156},"'.\u002Fdata'",[34,32116,32117],{"class":40},",\n",[34,32119,32120,32123,32125,32128],{"class":36,"line":640},[34,32121,32122],{"class":5869},"                        train",[34,32124,153],{"class":87},[34,32126,32127],{"class":63},"True",[34,32129,32117],{"class":40},[34,32131,32132],{"class":36,"line":2301},[34,32133,32134],{"class":205},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[34,32136,32137,32140,32142,32145,32148,32150,32153],{"class":36,"line":2307},[34,32138,32139],{"class":5869},"                        transform",[34,32141,153],{"class":87},[34,32143,32144],{"class":40},"transforms.Compose([transforms.Resize(",[34,32146,32147],{"class":5869},"size",[34,32149,153],{"class":87},[34,32151,32152],{"class":63},"224",[34,32154,32155],{"class":40},"),transforms.ToTensor()]),\n",[34,32157,32158,32161,32163,32165],{"class":36,"line":2328},[34,32159,32160],{"class":5869},"                        download",[34,32162,153],{"class":87},[34,32164,32127],{"class":63},[34,32166,807],{"class":40},[34,32168,32169],{"class":36,"line":2333},[34,32170,3053],{"emptyLinePlaceholder":726},[34,32172,32173],{"class":36,"line":2347},[34,32174,32175],{"class":205},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[34,32177,32178,32181,32183,32186,32189,32191],{"class":36,"line":2352},[34,32179,32180],{"class":40},"train_loader",[34,32182,153],{"class":87},[34,32184,32185],{"class":40},"Data.DataLoader(",[34,32187,32188],{"class":5869},"dataset",[34,32190,153],{"class":87},[34,32192,32193],{"class":40},"train_data,\n",[34,32195,32196,32199,32201,32203],{"class":36,"line":2381},[34,32197,32198],{"class":5869},"                             batch_size",[34,32200,153],{"class":87},[34,32202,999],{"class":63},[34,32204,32117],{"class":40},[34,32206,32207],{"class":36,"line":2386},[34,32208,32209],{"class":205},"                             # 数据是否打乱\n",[34,32211,32212,32215,32217,32219],{"class":36,"line":2403},[34,32213,32214],{"class":5869},"                             shuffle",[34,32216,153],{"class":87},[34,32218,32127],{"class":63},[34,32220,32117],{"class":40},[34,32222,32223],{"class":36,"line":2408},[34,32224,32225],{"class":205},"                             # 规定加载数据的进程\n",[34,32227,32228,32231,32233,32235],{"class":36,"line":2413},[34,32229,32230],{"class":5869},"                             num_workers",[34,32232,153],{"class":87},[34,32234,987],{"class":63},[34,32236,807],{"class":40},[34,32238,32239],{"class":36,"line":2418},[34,32240,3053],{"emptyLinePlaceholder":726},[34,32242,32243],{"class":36,"line":2432},[34,32244,32245],{"class":205},"# 获得一个batch的数据\n",[34,32247,32248,32250,32253,32255,32258],{"class":36,"line":2437},[34,32249,3678],{"class":87},[34,32251,32252],{"class":40}," step,(b_x,b_y) ",[34,32254,26695],{"class":87},[34,32256,32257],{"class":63}," enumerate",[34,32259,32260],{"class":40},"(train_loader):\n",[34,32262,32263,32265,32268,32270,32272],{"class":36,"line":3230},[34,32264,3754],{"class":87},[34,32266,32267],{"class":40}," step ",[34,32269,1753],{"class":87},[34,32271,4746],{"class":63},[34,32273,4392],{"class":40},[34,32275,32276],{"class":36,"line":3244},[34,32277,32278],{"class":87},"        break\n",[34,32280,32281],{"class":36,"line":3252},[34,32282,32283],{"class":205},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[34,32285,32286,32289,32291,32294],{"class":36,"line":3257},[34,32287,32288],{"class":40},"batch_x",[34,32290,153],{"class":87},[34,32292,32293],{"class":40},"b_x.squeeze().numpy()  ",[34,32295,32296],{"class":205},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[34,32298,32299,32302,32304,32307],{"class":36,"line":3263},[34,32300,32301],{"class":40},"batch_y",[34,32303,153],{"class":87},[34,32305,32306],{"class":40},"b_y.numpy()   ",[34,32308,32309],{"class":205},"#将张量转换成功numpy数组\n",[34,32311,32312,32315,32317,32320],{"class":36,"line":3269},[34,32313,32314],{"class":40},"class_label",[34,32316,153],{"class":87},[34,32318,32319],{"class":40},"train_data.classes  ",[34,32321,32322],{"class":205},"#训练集标签\n",[34,32324,32325],{"class":36,"line":3274},[34,32326,32327],{"class":205},"# print(class_label)\n",[34,32329,32330],{"class":36,"line":8601},[34,32331,3053],{"emptyLinePlaceholder":726},[34,32333,32334],{"class":36,"line":8625},[34,32335,32336],{"class":205},"# 可视化一个batch的图像\n",[34,32338,32339,32342,32345,32347,32349,32351,32353,32355],{"class":36,"line":8630},[34,32340,32341],{"class":40},"plt.figure(",[34,32343,32344],{"class":5869},"figsize",[34,32346,153],{"class":87},[34,32348,801],{"class":40},[34,32350,1293],{"class":63},[34,32352,1173],{"class":40},[34,32354,1114],{"class":63},[34,32356,31148],{"class":40},[34,32358,32359,32361,32364,32366,32369,32371],{"class":36,"line":8636},[34,32360,3678],{"class":87},[34,32362,32363],{"class":40}," ii ",[34,32365,26695],{"class":87},[34,32367,32368],{"class":40}," np.arange(",[34,32370,8011],{"class":63},[34,32372,32373],{"class":40},"(batch_y)):\n",[34,32375,32376,32379,32381,32383,32385,32388,32390,32392],{"class":36,"line":8663},[34,32377,32378],{"class":40},"    plt.subplot(",[34,32380,1088],{"class":63},[34,32382,1173],{"class":40},[34,32384,1396],{"class":63},[34,32386,32387],{"class":40},",ii ",[34,32389,1276],{"class":87},[34,32391,25771],{"class":63},[34,32393,807],{"class":40},[34,32395,32396,32399,32402,32404],{"class":36,"line":8668},[34,32397,32398],{"class":40},"    plt.imshow(batch_x[ii,:,:],",[34,32400,32401],{"class":5869},"cmap",[34,32403,153],{"class":87},[34,32405,32406],{"class":40},"plt.cm.gray)\n",[34,32408,32409,32412,32414,32416,32418],{"class":36,"line":8674},[34,32410,32411],{"class":40},"    plt.title(class_label[batch_y[ii]],",[34,32413,32147],{"class":5869},[34,32415,153],{"class":87},[34,32417,1241],{"class":63},[34,32419,807],{"class":40},[34,32421,32422,32425,32428],{"class":36,"line":8686},[34,32423,32424],{"class":40},"    plt.axis(",[34,32426,32427],{"class":156},"\"off\"",[34,32429,807],{"class":40},[34,32431,32432,32435,32438,32440,32443],{"class":36,"line":8698},[34,32433,32434],{"class":40},"    plt.subplots_adjust(",[34,32436,32437],{"class":5869},"wspace",[34,32439,153],{"class":87},[34,32441,32442],{"class":63},"0.05",[34,32444,807],{"class":40},[34,32446,32447],{"class":36,"line":8710},[34,32448,32449],{"class":40},"plt.show()\n",[108,32451,32452],{},"用matplotlib进行展示的过程可以后续再补",[108,32454,32455],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[108,32457,32458],{},"训练次数就是按照批次过整个训练集数据的次数",[108,32460,32461],{},"模型训练：",[24,32463,32465],{"className":31029,"code":32464,"language":31031,"meta":29,"style":29},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[31,32466,32467,32474,32481,32485,32497,32503,32514,32524,32534,32544,32554,32559,32571,32581,32585,32589,32594,32605,32618,32629,32646,32657,32696,32712,32724,32735,32740,32751,32767,32778,32789,32800,32807,32811,32816,32821,32825,32830,32840,32861,32865,32869,32874,32879,32884,32904,32908,32913,32923,32927,32932,32941,32946,32951,32956,32966,32970,32974,32979,32984,32994,32999,33009,33014,33023,33028,33037,33042,33051,33055,33060,33070,33074,33078,33083,33098,33126,33141,33145,33150,33155,33164,33169,33178,33183,33192,33197,33206,33211,33220,33225,33234,33239,33252,33257,33267,33272,33282,33288,33294,33300,33306,33317,33323,33343,33349,33360,33366,33372,33378,33384,33390,33396,33402,33422,33428,33444,33450,33464,33470,33485,33491,33500,33506,33515,33521,33527,33536,33542,33553,33559,33578,33584,33595,33601,33621,33637,33643,33657,33663,33669,33680,33686,33692,33702,33708,33719,33725,33735,33740,33746,33795,33842,33847,33853,33872,33878,33898,33904,33910,33920,33925,33931,33947,33992,33998,34004,34010,34021,34027,34033,34039,34057,34071,34080,34089,34098,34107,34113,34119,34127,34132,34138,34149,34155,34175,34181,34187,34193,34210,34216,34222,34228,34234,34240,34267,34291,34297,34303,34309,34320,34331,34337,34354,34377,34400,34406,34411,34420,34430,34436,34441,34447,34460,34466,34477,34488,34507],{"__ignoreMap":29},[34,32468,32469,32471],{"class":36,"line":37},[34,32470,31043],{"class":87},[34,32472,32473],{"class":40}," copy\n",[34,32475,32476,32478],{"class":36,"line":51},[34,32477,31043],{"class":87},[34,32479,32480],{"class":40}," time\n",[34,32482,32483],{"class":36,"line":60},[34,32484,3053],{"emptyLinePlaceholder":726},[34,32486,32487,32489,32492,32494],{"class":36,"line":76},[34,32488,31043],{"class":87},[34,32490,32491],{"class":40}," pandas ",[34,32493,32034],{"class":87},[34,32495,32496],{"class":40}," pd\n",[34,32498,32499,32501],{"class":36,"line":93},[34,32500,31043],{"class":87},[34,32502,31046],{"class":40},[34,32504,32505,32507,32509,32511],{"class":36,"line":99},[34,32506,31388],{"class":87},[34,32508,32066],{"class":40},[34,32510,31043],{"class":87},[34,32512,32513],{"class":40}," Dataset\n",[34,32515,32516,32518,32520,32522],{"class":36,"line":353},[34,32517,31388],{"class":87},[34,32519,32019],{"class":40},[34,32521,31043],{"class":87},[34,32523,32024],{"class":40},[34,32525,32526,32528,32530,32532],{"class":36,"line":359},[34,32527,31388],{"class":87},[34,32529,32049],{"class":40},[34,32531,31043],{"class":87},[34,32533,32054],{"class":40},[34,32535,32536,32538,32540,32542],{"class":36,"line":579},[34,32537,31043],{"class":87},[34,32539,32066],{"class":40},[34,32541,32034],{"class":87},[34,32543,32071],{"class":40},[34,32545,32546,32548,32550,32552],{"class":36,"line":589},[34,32547,31043],{"class":87},[34,32549,32083],{"class":40},[34,32551,32034],{"class":87},[34,32553,32088],{"class":40},[34,32555,32556],{"class":36,"line":601},[34,32557,32558],{"class":205},"# 导入模型\n",[34,32560,32561,32563,32566,32568],{"class":36,"line":613},[34,32562,31388],{"class":87},[34,32564,32565],{"class":40}," model ",[34,32567,31043],{"class":87},[34,32569,32570],{"class":40}," LeNet\n",[34,32572,32573,32575,32577,32579],{"class":36,"line":618},[34,32574,31388],{"class":87},[34,32576,31391],{"class":40},[34,32578,31043],{"class":87},[34,32580,31396],{"class":40},[34,32582,32583],{"class":36,"line":628},[34,32584,3053],{"emptyLinePlaceholder":726},[34,32586,32587],{"class":36,"line":640},[34,32588,3053],{"emptyLinePlaceholder":726},[34,32590,32591],{"class":36,"line":2301},[34,32592,32593],{"class":205},"# 处理训练集与验证集函数--->划分数据集\n",[34,32595,32596,32599,32602],{"class":36,"line":2307},[34,32597,32598],{"class":87},"def",[34,32600,32601],{"class":149}," train_val_data_process",[34,32603,32604],{"class":40},"():\n",[34,32606,32607,32610,32612,32614,32616],{"class":36,"line":2328},[34,32608,32609],{"class":40},"    train_data",[34,32611,153],{"class":87},[34,32613,32106],{"class":40},[34,32615,32114],{"class":156},[34,32617,32117],{"class":40},[34,32619,32620,32623,32625,32627],{"class":36,"line":2333},[34,32621,32622],{"class":5869},"                            train",[34,32624,153],{"class":87},[34,32626,32127],{"class":63},[34,32628,32117],{"class":40},[34,32630,32631,32634,32636,32638,32640,32642,32644],{"class":36,"line":2347},[34,32632,32633],{"class":5869},"                            transform",[34,32635,153],{"class":87},[34,32637,32144],{"class":40},[34,32639,32147],{"class":5869},[34,32641,153],{"class":87},[34,32643,1695],{"class":63},[34,32645,32155],{"class":40},[34,32647,32648,32651,32653,32655],{"class":36,"line":2352},[34,32649,32650],{"class":5869},"                            download",[34,32652,153],{"class":87},[34,32654,32127],{"class":63},[34,32656,807],{"class":40},[34,32658,32659,32662,32664,32667,32670,32672,32675,32677,32679,32682,32684,32686,32689,32691,32693],{"class":36,"line":2381},[34,32660,32661],{"class":40},"    train_data,val_data",[34,32663,153],{"class":87},[34,32665,32666],{"class":40},"Data.random_split(train_data,[",[34,32668,32669],{"class":63},"round",[34,32671,801],{"class":40},[34,32673,32674],{"class":63},"0.8",[34,32676,1250],{"class":87},[34,32678,8011],{"class":63},[34,32680,32681],{"class":40},"(train_data)),",[34,32683,32669],{"class":63},[34,32685,801],{"class":40},[34,32687,32688],{"class":63},"0.2",[34,32690,1250],{"class":87},[34,32692,8011],{"class":63},[34,32694,32695],{"class":40},"(train_data))])\n",[34,32697,32698,32701,32703,32706,32708,32710],{"class":36,"line":2386},[34,32699,32700],{"class":40},"    train_dataloader ",[34,32702,153],{"class":87},[34,32704,32705],{"class":40}," Data.DataLoader(",[34,32707,32188],{"class":5869},[34,32709,153],{"class":87},[34,32711,32193],{"class":40},[34,32713,32714,32717,32719,32722],{"class":36,"line":2403},[34,32715,32716],{"class":5869},"                                       batch_size",[34,32718,153],{"class":87},[34,32720,32721],{"class":63},"128",[34,32723,32117],{"class":40},[34,32725,32726,32729,32731,32733],{"class":36,"line":2408},[34,32727,32728],{"class":5869},"                                       shuffle",[34,32730,153],{"class":87},[34,32732,32127],{"class":63},[34,32734,32117],{"class":40},[34,32736,32737],{"class":36,"line":2413},[34,32738,32739],{"class":205},"                                       # 规定8个进程\n",[34,32741,32742,32745,32747,32749],{"class":36,"line":2418},[34,32743,32744],{"class":5869},"                                       num_workers",[34,32746,153],{"class":87},[34,32748,1190],{"class":63},[34,32750,807],{"class":40},[34,32752,32753,32756,32758,32760,32762,32764],{"class":36,"line":2432},[34,32754,32755],{"class":40},"    val_dataloader",[34,32757,153],{"class":87},[34,32759,32185],{"class":40},[34,32761,32188],{"class":5869},[34,32763,153],{"class":87},[34,32765,32766],{"class":40},"val_data,\n",[34,32768,32769,32772,32774,32776],{"class":36,"line":2437},[34,32770,32771],{"class":5869},"                                   batch_size",[34,32773,153],{"class":87},[34,32775,32721],{"class":63},[34,32777,32117],{"class":40},[34,32779,32780,32783,32785,32787],{"class":36,"line":3230},[34,32781,32782],{"class":5869},"                                   shuffle",[34,32784,153],{"class":87},[34,32786,32127],{"class":63},[34,32788,32117],{"class":40},[34,32790,32791,32794,32796,32798],{"class":36,"line":3244},[34,32792,32793],{"class":5869},"                                   num_workers",[34,32795,153],{"class":87},[34,32797,1190],{"class":63},[34,32799,807],{"class":40},[34,32801,32802,32804],{"class":36,"line":3252},[34,32803,4743],{"class":87},[34,32805,32806],{"class":40}," train_dataloader,val_dataloader\n",[34,32808,32809],{"class":36,"line":3257},[34,32810,3053],{"emptyLinePlaceholder":726},[34,32812,32813],{"class":36,"line":3263},[34,32814,32815],{"class":205},"# 验证是否出错\n",[34,32817,32818],{"class":36,"line":3269},[34,32819,32820],{"class":205},"# train_val_data_process()\n",[34,32822,32823],{"class":36,"line":3274},[34,32824,3053],{"emptyLinePlaceholder":726},[34,32826,32827],{"class":36,"line":8601},[34,32828,32829],{"class":205},"# 定义模型训练函数\n",[34,32831,32832,32834,32837],{"class":36,"line":8625},[34,32833,32598],{"class":87},[34,32835,32836],{"class":149}," train_model_process",[34,32838,32839],{"class":40},"(model,train_dataloader,val_dataloader,num_epochs):\n",[34,32841,32842,32844,32846,32848,32850,32852,32854,32856,32859],{"class":36,"line":8630},[34,32843,31888],{"class":40},[34,32845,153],{"class":87},[34,32847,31102],{"class":40},[34,32849,31895],{"class":156},[34,32851,2358],{"class":87},[34,32853,31900],{"class":40},[34,32855,2355],{"class":87},[34,32857,32858],{"class":156}," 'cpu'",[34,32860,807],{"class":40},[34,32862,32863],{"class":36,"line":8636},[34,32864,3053],{"emptyLinePlaceholder":726},[34,32866,32867],{"class":36,"line":8663},[34,32868,3053],{"emptyLinePlaceholder":726},[34,32870,32871],{"class":36,"line":8668},[34,32872,32873],{"class":205},"    # 定义优化器\n",[34,32875,32876],{"class":36,"line":8674},[34,32877,32878],{"class":205},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[34,32880,32881],{"class":36,"line":8686},[34,32882,32883],{"class":205},"    # lr为学习率\n",[34,32885,32886,32889,32891,32894,32897,32899,32902],{"class":36,"line":8698},[34,32887,32888],{"class":40},"    optimizer",[34,32890,153],{"class":87},[34,32892,32893],{"class":40},"torch.optim.Adam(model.parameters(),",[34,32895,32896],{"class":5869},"lr",[34,32898,153],{"class":87},[34,32900,32901],{"class":63},"0.001",[34,32903,807],{"class":40},[34,32905,32906],{"class":36,"line":8710},[34,32907,3053],{"emptyLinePlaceholder":726},[34,32909,32910],{"class":36,"line":10369},[34,32911,32912],{"class":205},"    # 定义损失函数使用交叉熵损失函数\n",[34,32914,32915,32918,32920],{"class":36,"line":10394},[34,32916,32917],{"class":40},"    criterion",[34,32919,153],{"class":87},[34,32921,32922],{"class":40},"nn.CrossEntropyLoss()\n",[34,32924,32925],{"class":36,"line":10417},[34,32926,3053],{"emptyLinePlaceholder":726},[34,32928,32929],{"class":36,"line":10441},[34,32930,32931],{"class":205},"    # 将模型放到GPU中进行训练\n",[34,32933,32934,32936,32938],{"class":36,"line":10446},[34,32935,31940],{"class":40},[34,32937,153],{"class":87},[34,32939,32940],{"class":40},"model.to(device)\n",[34,32942,32943],{"class":36,"line":10451},[34,32944,32945],{"class":205},"    # 复制当前模型的参数\n",[34,32947,32948],{"class":36,"line":10456},[34,32949,32950],{"class":205},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[34,32952,32953],{"class":36,"line":10465},[34,32954,32955],{"class":205},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[34,32957,32958,32961,32963],{"class":36,"line":10470},[34,32959,32960],{"class":40},"    best_model_wts",[34,32962,153],{"class":87},[34,32964,32965],{"class":40},"copy.deepcopy(model.state_dict())\n",[34,32967,32968],{"class":36,"line":10476},[34,32969,3053],{"emptyLinePlaceholder":726},[34,32971,32972],{"class":36,"line":10497},[34,32973,3053],{"emptyLinePlaceholder":726},[34,32975,32976],{"class":36,"line":10503},[34,32977,32978],{"class":205},"    # 初始化参数\n",[34,32980,32981],{"class":36,"line":10517},[34,32982,32983],{"class":205},"    # 最高准确度\n",[34,32985,32986,32989,32991],{"class":36,"line":10523},[34,32987,32988],{"class":40},"    best_acc",[34,32990,153],{"class":87},[34,32992,32993],{"class":63},"0.0\n",[34,32995,32996],{"class":36,"line":10550},[34,32997,32998],{"class":205},"    # 训练集损失列表\n",[34,33000,33001,33004,33006],{"class":36,"line":10559},[34,33002,33003],{"class":40},"    train_loss_all",[34,33005,153],{"class":87},[34,33007,33008],{"class":40},"[]\n",[34,33010,33011],{"class":36,"line":10565},[34,33012,33013],{"class":205},"    # 验证集函数列表\n",[34,33015,33016,33019,33021],{"class":36,"line":10573},[34,33017,33018],{"class":40},"    val_loss_all",[34,33020,153],{"class":87},[34,33022,33008],{"class":40},[34,33024,33025],{"class":36,"line":10578},[34,33026,33027],{"class":205},"    # 训练集准确度列表\n",[34,33029,33030,33033,33035],{"class":36,"line":17256},[34,33031,33032],{"class":40},"    train_acc_all",[34,33034,153],{"class":87},[34,33036,33008],{"class":40},[34,33038,33039],{"class":36,"line":17262},[34,33040,33041],{"class":205},"    # 验证集准确度列表\n",[34,33043,33044,33047,33049],{"class":36,"line":17285},[34,33045,33046],{"class":40},"    val_acc_all",[34,33048,153],{"class":87},[34,33050,33008],{"class":40},[34,33052,33053],{"class":36,"line":17291},[34,33054,3053],{"emptyLinePlaceholder":726},[34,33056,33057],{"class":36,"line":17314},[34,33058,33059],{"class":205},"    # 保存当前时间--->方便看每轮训练的时间\n",[34,33061,33062,33065,33067],{"class":36,"line":17328},[34,33063,33064],{"class":40},"    since",[34,33066,153],{"class":87},[34,33068,33069],{"class":40},"time.time()\n",[34,33071,33072],{"class":36,"line":17348},[34,33073,3053],{"emptyLinePlaceholder":726},[34,33075,33076],{"class":36,"line":17354},[34,33077,3053],{"emptyLinePlaceholder":726},[34,33079,33080],{"class":36,"line":17365},[34,33081,33082],{"class":205},"    # 准备工作完成--->开始训练模型\n",[34,33084,33085,33087,33090,33092,33095],{"class":36,"line":17388},[34,33086,3854],{"class":87},[34,33088,33089],{"class":40}," epoch ",[34,33091,26695],{"class":87},[34,33093,33094],{"class":63}," range",[34,33096,33097],{"class":40},"(num_epochs):\n",[34,33099,33100,33103,33105,33108,33111,33113,33115,33117,33120,33122,33124],{"class":36,"line":17410},[34,33101,33102],{"class":63},"        print",[34,33104,801],{"class":40},[34,33106,33107],{"class":156},"\"Epoch ",[34,33109,33110],{"class":63},"{}",[34,33112,1379],{"class":156},[34,33114,33110],{"class":63},[34,33116,1046],{"class":156},[34,33118,33119],{"class":40},".format(epoch,num_epochs",[34,33121,1327],{"class":87},[34,33123,1013],{"class":63},[34,33125,31148],{"class":40},[34,33127,33128,33130,33132,33135,33137,33139],{"class":36,"line":17415},[34,33129,33102],{"class":63},[34,33131,801],{"class":40},[34,33133,33134],{"class":156},"\"-\"",[34,33136,1250],{"class":87},[34,33138,1241],{"class":63},[34,33140,807],{"class":40},[34,33142,33143],{"class":36,"line":17421},[34,33144,3053],{"emptyLinePlaceholder":726},[34,33146,33147],{"class":36,"line":17435},[34,33148,33149],{"class":205},"        # 初始化参数\n",[34,33151,33152],{"class":36,"line":17448},[34,33153,33154],{"class":205},"        # 训练集损失函数\n",[34,33156,33157,33160,33162],{"class":36,"line":17453},[34,33158,33159],{"class":40},"        train_loss",[34,33161,153],{"class":87},[34,33163,32993],{"class":63},[34,33165,33166],{"class":36,"line":17467},[34,33167,33168],{"class":205},"        # 训练集准确度\n",[34,33170,33171,33174,33176],{"class":36,"line":17472},[34,33172,33173],{"class":40},"        train_corrects",[34,33175,153],{"class":87},[34,33177,3738],{"class":63},[34,33179,33180],{"class":36,"line":17478},[34,33181,33182],{"class":205},"        # 验证集损失函数\n",[34,33184,33185,33188,33190],{"class":36,"line":17483},[34,33186,33187],{"class":40},"        val_loss",[34,33189,153],{"class":87},[34,33191,32993],{"class":63},[34,33193,33194],{"class":36,"line":17497},[34,33195,33196],{"class":205},"        # 验证集准确度\n",[34,33198,33199,33202,33204],{"class":36,"line":17502},[34,33200,33201],{"class":40},"        val_corrects",[34,33203,153],{"class":87},[34,33205,3738],{"class":63},[34,33207,33208],{"class":36,"line":17507},[34,33209,33210],{"class":205},"        # 训练集样本数量\n",[34,33212,33213,33216,33218],{"class":36,"line":17521},[34,33214,33215],{"class":40},"        train_num",[34,33217,153],{"class":87},[34,33219,3738],{"class":63},[34,33221,33222],{"class":36,"line":17533},[34,33223,33224],{"class":205},"        # 验证集样本数量\n",[34,33226,33227,33230,33232],{"class":36,"line":17538},[34,33228,33229],{"class":40},"        val_num",[34,33231,153],{"class":87},[34,33233,3738],{"class":63},[34,33235,33236],{"class":36,"line":17551},[34,33237,33238],{"class":205},"        # 将数据放到设备,并开始训练\n",[34,33240,33241,33243,33245,33247,33249],{"class":36,"line":17556},[34,33242,4056],{"class":87},[34,33244,32252],{"class":40},[34,33246,26695],{"class":87},[34,33248,32257],{"class":63},[34,33250,33251],{"class":40},"(train_dataloader):\n",[34,33253,33254],{"class":36,"line":17561},[34,33255,33256],{"class":205},"            # 将特征放入到训练设备\n",[34,33258,33259,33262,33264],{"class":36,"line":17566},[34,33260,33261],{"class":40},"            b_x",[34,33263,153],{"class":87},[34,33265,33266],{"class":40},"b_x.to(device)\n",[34,33268,33269],{"class":36,"line":17579},[34,33270,33271],{"class":205},"            # 将标签放入到训练设备当中\n",[34,33273,33274,33277,33279],{"class":36,"line":17584},[34,33275,33276],{"class":40},"            b_y",[34,33278,153],{"class":87},[34,33280,33281],{"class":40},"b_y.to(device)\n",[34,33283,33285],{"class":36,"line":33284},98,[34,33286,33287],{"class":205},"            # 设置模型为训练模式\n",[34,33289,33291],{"class":36,"line":33290},99,[34,33292,33293],{"class":40},"            model.train()\n",[34,33295,33297],{"class":36,"line":33296},100,[34,33298,33299],{"class":205},"            # 将数据放到模型当中,开始前向传播\n",[34,33301,33303],{"class":36,"line":33302},101,[34,33304,33305],{"class":205},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[34,33307,33309,33312,33314],{"class":36,"line":33308},102,[34,33310,33311],{"class":40},"            output",[34,33313,153],{"class":87},[34,33315,33316],{"class":40},"model(b_x)\n",[34,33318,33320],{"class":36,"line":33319},103,[34,33321,33322],{"class":205},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[34,33324,33326,33329,33331,33334,33337,33339,33341],{"class":36,"line":33325},104,[34,33327,33328],{"class":40},"            pre_lab",[34,33330,153],{"class":87},[34,33332,33333],{"class":40},"torch.argmax(output,",[34,33335,33336],{"class":5869},"dim",[34,33338,153],{"class":87},[34,33340,1013],{"class":63},[34,33342,807],{"class":40},[34,33344,33346],{"class":36,"line":33345},105,[34,33347,33348],{"class":205},"            # 计算每一个batch的损失函数\n",[34,33350,33352,33355,33357],{"class":36,"line":33351},106,[34,33353,33354],{"class":40},"            loss",[34,33356,153],{"class":87},[34,33358,33359],{"class":40},"criterion(output,b_y)\n",[34,33361,33363],{"class":36,"line":33362},107,[34,33364,33365],{"class":205},"            # 将梯度初始化为0\n",[34,33367,33369],{"class":36,"line":33368},108,[34,33370,33371],{"class":40},"            optimizer.zero_grad()\n",[34,33373,33375],{"class":36,"line":33374},109,[34,33376,33377],{"class":205},"            # 梯度置为0后再进行反向传播\n",[34,33379,33381],{"class":36,"line":33380},110,[34,33382,33383],{"class":40},"            loss.backward()\n",[34,33385,33387],{"class":36,"line":33386},111,[34,33388,33389],{"class":205},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[34,33391,33393],{"class":36,"line":33392},112,[34,33394,33395],{"class":40},"            optimizer.step()\n",[34,33397,33399],{"class":36,"line":33398},113,[34,33400,33401],{"class":205},"            # loss.item()指的是batch的平均损失\n",[34,33403,33405,33408,33410,33413,33415,33418,33420],{"class":36,"line":33404},114,[34,33406,33407],{"class":40},"            train_loss",[34,33409,10130],{"class":87},[34,33411,33412],{"class":40},"loss.item()",[34,33414,1250],{"class":87},[34,33416,33417],{"class":40},"b_x.size(",[34,33419,987],{"class":63},[34,33421,807],{"class":40},[34,33423,33425],{"class":36,"line":33424},115,[34,33426,33427],{"class":205},"            # 计算每个批次中正确预测的数量\n",[34,33429,33431,33434,33436,33439,33441],{"class":36,"line":33430},116,[34,33432,33433],{"class":40},"            train_corrects",[34,33435,10130],{"class":87},[34,33437,33438],{"class":40},"torch.sum(pre_lab",[34,33440,3602],{"class":87},[34,33442,33443],{"class":40},"b_y.data)\n",[34,33445,33447],{"class":36,"line":33446},117,[34,33448,33449],{"class":205},"            # 计算目前为止一共处理了多少样本\n",[34,33451,33453,33456,33458,33460,33462],{"class":36,"line":33452},118,[34,33454,33455],{"class":40},"            train_num",[34,33457,10130],{"class":87},[34,33459,33417],{"class":40},[34,33461,987],{"class":63},[34,33463,807],{"class":40},[34,33465,33467],{"class":36,"line":33466},119,[34,33468,33469],{"class":205},"        # 验证数据\n",[34,33471,33473,33475,33478,33480,33482],{"class":36,"line":33472},120,[34,33474,4056],{"class":87},[34,33476,33477],{"class":40}," step ,(b_x,b_y) ",[34,33479,26695],{"class":87},[34,33481,32257],{"class":63},[34,33483,33484],{"class":40},"(val_dataloader):\n",[34,33486,33488],{"class":36,"line":33487},121,[34,33489,33490],{"class":205},"            # 将特征放到验证设备当中\n",[34,33492,33494,33496,33498],{"class":36,"line":33493},122,[34,33495,33261],{"class":40},[34,33497,153],{"class":87},[34,33499,33266],{"class":40},[34,33501,33503],{"class":36,"line":33502},123,[34,33504,33505],{"class":205},"            # 将标签放到放到训练设备当中\n",[34,33507,33509,33511,33513],{"class":36,"line":33508},124,[34,33510,33276],{"class":40},[34,33512,153],{"class":87},[34,33514,33281],{"class":40},[34,33516,33518],{"class":36,"line":33517},125,[34,33519,33520],{"class":205},"            # 开启验证模式，设置模型为评估模式\n",[34,33522,33524],{"class":36,"line":33523},126,[34,33525,33526],{"class":40},"            model.eval()\n",[34,33528,33530,33533],{"class":36,"line":33529},127,[34,33531,33532],{"class":87},"            with",[34,33534,33535],{"class":40}," torch.no_grad():\n",[34,33537,33539],{"class":36,"line":33538},128,[34,33540,33541],{"class":205},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[34,33543,33545,33548,33550],{"class":36,"line":33544},129,[34,33546,33547],{"class":40},"                output ",[34,33549,153],{"class":87},[34,33551,33552],{"class":40}," model(b_x)\n",[34,33554,33556],{"class":36,"line":33555},130,[34,33557,33558],{"class":205},"                # 查找每一行中最大值对应的下标\n",[34,33560,33562,33565,33567,33570,33572,33574,33576],{"class":36,"line":33561},131,[34,33563,33564],{"class":40},"                pre_lab ",[34,33566,153],{"class":87},[34,33568,33569],{"class":40}," torch.argmax(output, ",[34,33571,33336],{"class":5869},[34,33573,153],{"class":87},[34,33575,1013],{"class":63},[34,33577,807],{"class":40},[34,33579,33581],{"class":36,"line":33580},132,[34,33582,33583],{"class":205},"                # 计算验证集上的当前 batch 损失\n",[34,33585,33587,33590,33592],{"class":36,"line":33586},133,[34,33588,33589],{"class":40},"                val_batch_loss ",[34,33591,153],{"class":87},[34,33593,33594],{"class":40}," criterion(output, b_y)\n",[34,33596,33598],{"class":36,"line":33597},134,[34,33599,33600],{"class":205},"                # 对损失函数进行累加（按样本数加权）\n",[34,33602,33604,33607,33609,33612,33614,33617,33619],{"class":36,"line":33603},135,[34,33605,33606],{"class":40},"                val_loss ",[34,33608,10130],{"class":87},[34,33610,33611],{"class":40}," val_batch_loss.item() ",[34,33613,1250],{"class":87},[34,33615,33616],{"class":40}," b_x.size(",[34,33618,987],{"class":63},[34,33620,807],{"class":40},[34,33622,33624,33627,33629,33632,33634],{"class":36,"line":33623},136,[34,33625,33626],{"class":40},"                val_corrects ",[34,33628,10130],{"class":87},[34,33630,33631],{"class":40}," torch.sum(pre_lab ",[34,33633,3602],{"class":87},[34,33635,33636],{"class":40}," b_y.data)\n",[34,33638,33640],{"class":36,"line":33639},137,[34,33641,33642],{"class":205},"                # 当前用于验证的样本数量\n",[34,33644,33646,33649,33651,33653,33655],{"class":36,"line":33645},138,[34,33647,33648],{"class":40},"            val_num ",[34,33650,10130],{"class":87},[34,33652,33616],{"class":40},[34,33654,987],{"class":63},[34,33656,807],{"class":40},[34,33658,33660],{"class":36,"line":33659},139,[34,33661,33662],{"class":205},"        # 计算并保存每一次迭代的loss值和准确率\n",[34,33664,33666],{"class":36,"line":33665},140,[34,33667,33668],{"class":205},"        # 计算并保存训练集的loss值\n",[34,33670,33672,33675,33677],{"class":36,"line":33671},141,[34,33673,33674],{"class":40},"        train_loss_all.append(train_loss",[34,33676,1379],{"class":87},[34,33678,33679],{"class":40},"train_num)\n",[34,33681,33683],{"class":36,"line":33682},142,[34,33684,33685],{"class":205},"        # 取双精度\n",[34,33687,33689],{"class":36,"line":33688},143,[34,33690,33691],{"class":205},"        # 计算并保存训练集的准确率\n",[34,33693,33695,33698,33700],{"class":36,"line":33694},144,[34,33696,33697],{"class":40},"        train_acc_all.append(train_corrects.double().item()",[34,33699,1379],{"class":87},[34,33701,33679],{"class":40},[34,33703,33705],{"class":36,"line":33704},145,[34,33706,33707],{"class":205},"        # 计算并保存验证集的loss值\n",[34,33709,33711,33714,33716],{"class":36,"line":33710},146,[34,33712,33713],{"class":40},"        val_loss_all.append(val_loss",[34,33715,1379],{"class":87},[34,33717,33718],{"class":40},"val_num)\n",[34,33720,33722],{"class":36,"line":33721},147,[34,33723,33724],{"class":205},"        # 计算并保存验证集的准确率\n",[34,33726,33728,33731,33733],{"class":36,"line":33727},148,[34,33729,33730],{"class":40},"        val_acc_all.append(val_corrects.double().item()",[34,33732,1379],{"class":87},[34,33734,33718],{"class":40},[34,33736,33738],{"class":36,"line":33737},149,[34,33739,3053],{"emptyLinePlaceholder":726},[34,33741,33743],{"class":36,"line":33742},150,[34,33744,33745],{"class":205},"        # 打印训练一轮的loss值和准确率\n",[34,33747,33749,33751,33753,33755,33757,33760,33762,33765,33767,33770,33772,33774,33776,33778,33781,33783,33785,33788,33790,33792],{"class":36,"line":33748},151,[34,33750,33102],{"class":63},[34,33752,801],{"class":40},[34,33754,4245],{"class":156},[34,33756,33110],{"class":63},[34,33758,33759],{"class":156},"train loss:",[34,33761,1690],{"class":63},[34,33763,33764],{"class":87},":.4f",[34,33766,1739],{"class":63},[34,33768,33769],{"class":156}," train acc:",[34,33771,1690],{"class":63},[34,33773,33764],{"class":87},[34,33775,1739],{"class":63},[34,33777,4245],{"class":156},[34,33779,33780],{"class":40},".format(epoch,train_loss_all[",[34,33782,1327],{"class":87},[34,33784,1013],{"class":63},[34,33786,33787],{"class":40},"],train_acc_all[",[34,33789,1327],{"class":87},[34,33791,1013],{"class":63},[34,33793,33794],{"class":40},"]))\n",[34,33796,33798,33800,33802,33804,33806,33809,33811,33813,33815,33818,33820,33822,33824,33826,33829,33831,33833,33836,33838,33840],{"class":36,"line":33797},152,[34,33799,33102],{"class":63},[34,33801,801],{"class":40},[34,33803,4245],{"class":156},[34,33805,33110],{"class":63},[34,33807,33808],{"class":156},"val loss:",[34,33810,1690],{"class":63},[34,33812,33764],{"class":87},[34,33814,1739],{"class":63},[34,33816,33817],{"class":156}," val acc:",[34,33819,1690],{"class":63},[34,33821,33764],{"class":87},[34,33823,1739],{"class":63},[34,33825,4245],{"class":156},[34,33827,33828],{"class":40},".format(epoch,val_loss_all[",[34,33830,1327],{"class":87},[34,33832,1013],{"class":63},[34,33834,33835],{"class":40},"],val_acc_all[",[34,33837,1327],{"class":87},[34,33839,1013],{"class":63},[34,33841,33794],{"class":40},[34,33843,33845],{"class":36,"line":33844},153,[34,33846,3053],{"emptyLinePlaceholder":726},[34,33848,33850],{"class":36,"line":33849},154,[34,33851,33852],{"class":205},"        # 判断准确度--->保存最优模型\n",[34,33854,33856,33858,33861,33863,33865,33867,33869],{"class":36,"line":33855},155,[34,33857,3150],{"class":87},[34,33859,33860],{"class":40}," val_acc_all[",[34,33862,1327],{"class":87},[34,33864,1013],{"class":63},[34,33866,1733],{"class":40},[34,33868,1753],{"class":87},[34,33870,33871],{"class":40},"best_acc:\n",[34,33873,33875],{"class":36,"line":33874},156,[34,33876,33877],{"class":205},"            # 保存当前模型准确度\n",[34,33879,33881,33884,33886,33888,33891,33893,33895],{"class":36,"line":33880},157,[34,33882,33883],{"class":40},"            best_acc:",[34,33885,840],{"class":63},[34,33887,153],{"class":87},[34,33889,33890],{"class":40},"val_acc_all[",[34,33892,1327],{"class":87},[34,33894,1013],{"class":63},[34,33896,33897],{"class":40},"]\n",[34,33899,33901],{"class":36,"line":33900},158,[34,33902,33903],{"class":205},"            # 保存当前的准确度\n",[34,33905,33907],{"class":36,"line":33906},159,[34,33908,33909],{"class":205},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[34,33911,33913,33916,33918],{"class":36,"line":33912},160,[34,33914,33915],{"class":40},"            best_model_wts",[34,33917,153],{"class":87},[34,33919,32965],{"class":40},[34,33921,33923],{"class":36,"line":33922},161,[34,33924,3053],{"emptyLinePlaceholder":726},[34,33926,33928],{"class":36,"line":33927},162,[34,33929,33930],{"class":205},"        # 计算耗时\n",[34,33932,33934,33937,33939,33942,33944],{"class":36,"line":33933},163,[34,33935,33936],{"class":40},"        time_use",[34,33938,153],{"class":87},[34,33940,33941],{"class":40},"time.time()",[34,33943,1327],{"class":87},[34,33945,33946],{"class":40},"since\n",[34,33948,33950,33952,33954,33957,33959,33962,33964,33966,33968,33970,33972,33975,33978,33981,33983,33986,33988,33990],{"class":36,"line":33949},164,[34,33951,33102],{"class":63},[34,33953,801],{"class":40},[34,33955,33956],{"class":156},"'训练和验证耗费的时间",[34,33958,1690],{"class":63},[34,33960,33961],{"class":87},":.0f",[34,33963,1739],{"class":63},[34,33965,1339],{"class":156},[34,33967,1690],{"class":63},[34,33969,33961],{"class":87},[34,33971,1739],{"class":63},[34,33973,33974],{"class":156},"s'",[34,33976,33977],{"class":40},".format(time_use",[34,33979,33980],{"class":87},"\u002F\u002F",[34,33982,1701],{"class":63},[34,33984,33985],{"class":40},",time_use",[34,33987,1123],{"class":87},[34,33989,1701],{"class":63},[34,33991,31148],{"class":40},[34,33993,33995],{"class":36,"line":33994},165,[34,33996,33997],{"class":205},"    # 选择最优参数\n",[34,33999,34001],{"class":36,"line":34000},166,[34,34002,34003],{"class":205},"    # 加载最高准确率下的模型参数\n",[34,34005,34007],{"class":36,"line":34006},167,[34,34008,34009],{"class":205},"    # model.load_state_dict(best_model_wts)\n",[34,34011,34013,34016,34019],{"class":36,"line":34012},168,[34,34014,34015],{"class":40},"    torch.save(model.state_dict(best_model_wts), ",[34,34017,34018],{"class":156},"'.\u002Fbest_model.pth'",[34,34020,807],{"class":40},[34,34022,34024],{"class":36,"line":34023},169,[34,34025,34026],{"class":205},"    # 或者写成\n",[34,34028,34030],{"class":36,"line":34029},170,[34,34031,34032],{"class":205},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[34,34034,34036],{"class":36,"line":34035},171,[34,34037,34038],{"class":205},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[34,34040,34042,34045,34047,34050,34053,34055],{"class":36,"line":34041},172,[34,34043,34044],{"class":40},"    train_process",[34,34046,153],{"class":87},[34,34048,34049],{"class":40},"pd.DataFrame(",[34,34051,34052],{"class":5869},"data",[34,34054,153],{"class":87},[34,34056,2206],{"class":40},[34,34058,34060,34063,34065,34068],{"class":36,"line":34059},173,[34,34061,34062],{"class":156},"        \"epoch\"",[34,34064,1653],{"class":40},[34,34066,34067],{"class":63},"range",[34,34069,34070],{"class":40},"(num_epochs),\n",[34,34072,34074,34077],{"class":36,"line":34073},174,[34,34075,34076],{"class":156},"        \"train_loss_all\"",[34,34078,34079],{"class":40},":train_loss_all,\n",[34,34081,34083,34086],{"class":36,"line":34082},175,[34,34084,34085],{"class":156},"        \"val_loss_all\"",[34,34087,34088],{"class":40},":val_loss_all,\n",[34,34090,34092,34095],{"class":36,"line":34091},176,[34,34093,34094],{"class":156},"        \"train_acc_all\"",[34,34096,34097],{"class":40},":train_acc_all,\n",[34,34099,34101,34104],{"class":36,"line":34100},177,[34,34102,34103],{"class":156},"        \"val_acc_all\"",[34,34105,34106],{"class":40},":val_acc_all\n",[34,34108,34110],{"class":36,"line":34109},178,[34,34111,34112],{"class":40},"    })\n",[34,34114,34116],{"class":36,"line":34115},179,[34,34117,34118],{"class":205},"    # 返回训练保存的过程\n",[34,34120,34122,34124],{"class":36,"line":34121},180,[34,34123,4743],{"class":87},[34,34125,34126],{"class":40}," train_process\n",[34,34128,34130],{"class":36,"line":34129},181,[34,34131,3053],{"emptyLinePlaceholder":726},[34,34133,34135],{"class":36,"line":34134},182,[34,34136,34137],{"class":205},"# 将loss值和精度按照图片的形式展示出来\n",[34,34139,34141,34143,34146],{"class":36,"line":34140},183,[34,34142,32598],{"class":87},[34,34144,34145],{"class":149}," matplot_acc_loss",[34,34147,34148],{"class":40},"(train_process):\n",[34,34150,34152],{"class":36,"line":34151},184,[34,34153,34154],{"class":205},"    # 设置图的大小\n",[34,34156,34158,34161,34163,34165,34167,34169,34171,34173],{"class":36,"line":34157},185,[34,34159,34160],{"class":40},"    plt.figure(",[34,34162,32344],{"class":5869},[34,34164,153],{"class":87},[34,34166,801],{"class":40},[34,34168,1293],{"class":63},[34,34170,1173],{"class":40},[34,34172,1088],{"class":63},[34,34174,31148],{"class":40},[34,34176,34178],{"class":36,"line":34177},186,[34,34179,34180],{"class":205},"    # 设置图中有几张图\n",[34,34182,34184],{"class":36,"line":34183},187,[34,34185,34186],{"class":205},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[34,34188,34190],{"class":36,"line":34189},188,[34,34191,34192],{"class":205},"    # ①loss图\n",[34,34194,34196,34198,34200,34202,34204,34206,34208],{"class":36,"line":34195},189,[34,34197,32378],{"class":40},[34,34199,1013],{"class":63},[34,34201,1173],{"class":40},[34,34203,875],{"class":63},[34,34205,1173],{"class":40},[34,34207,1013],{"class":63},[34,34209,807],{"class":40},[34,34211,34213],{"class":36,"line":34212},190,[34,34214,34215],{"class":205},"    # 补充:\n",[34,34217,34219],{"class":36,"line":34218},191,[34,34220,34221],{"class":205},"    # plt.subplot(nrows, ncols, index)\n",[34,34223,34225],{"class":36,"line":34224},192,[34,34226,34227],{"class":205},"    # nrows：行数\n",[34,34229,34231],{"class":36,"line":34230},193,[34,34232,34233],{"class":205},"    # ncols：列数\n",[34,34235,34237],{"class":36,"line":34236},194,[34,34238,34239],{"class":205},"    # index：目前选中第几个子图（从1开始）\n",[34,34241,34243,34246,34249,34252,34255,34257,34260,34262,34265],{"class":36,"line":34242},195,[34,34244,34245],{"class":40},"    plt.plot(train_process[",[34,34247,34248],{"class":156},"\"epoch\"",[34,34250,34251],{"class":40},"],train_process.train_loss_all,",[34,34253,34254],{"class":156},"'ro-'",[34,34256,1173],{"class":40},[34,34258,34259],{"class":5869},"label",[34,34261,153],{"class":87},[34,34263,34264],{"class":156},"'train loss'",[34,34266,807],{"class":40},[34,34268,34270,34272,34274,34277,34280,34282,34284,34286,34289],{"class":36,"line":34269},196,[34,34271,34245],{"class":40},[34,34273,34248],{"class":156},[34,34275,34276],{"class":40},"],train_process.val_loss_all,",[34,34278,34279],{"class":156},"'bs--'",[34,34281,1173],{"class":40},[34,34283,34259],{"class":5869},[34,34285,153],{"class":87},[34,34287,34288],{"class":156},"'val loss'",[34,34290,807],{"class":40},[34,34292,34294],{"class":36,"line":34293},197,[34,34295,34296],{"class":205},"    # 添加一个图例\n",[34,34298,34300],{"class":36,"line":34299},198,[34,34301,34302],{"class":40},"    plt.legend()\n",[34,34304,34306],{"class":36,"line":34305},199,[34,34307,34308],{"class":205},"    # 给轴添加标签\n",[34,34310,34312,34315,34318],{"class":36,"line":34311},200,[34,34313,34314],{"class":40},"    plt.xlabel(",[34,34316,34317],{"class":156},"'epoch'",[34,34319,807],{"class":40},[34,34321,34323,34326,34329],{"class":36,"line":34322},201,[34,34324,34325],{"class":40},"    plt.ylabel(",[34,34327,34328],{"class":156},"'loss'",[34,34330,807],{"class":40},[34,34332,34334],{"class":36,"line":34333},202,[34,34335,34336],{"class":205},"    # ②准确度图\n",[34,34338,34340,34342,34344,34346,34348,34350,34352],{"class":36,"line":34339},203,[34,34341,32378],{"class":40},[34,34343,1013],{"class":63},[34,34345,1173],{"class":40},[34,34347,875],{"class":63},[34,34349,1173],{"class":40},[34,34351,875],{"class":63},[34,34353,807],{"class":40},[34,34355,34357,34359,34361,34364,34366,34368,34370,34372,34375],{"class":36,"line":34356},204,[34,34358,34245],{"class":40},[34,34360,34248],{"class":156},[34,34362,34363],{"class":40},"],train_process.train_acc_all,",[34,34365,34254],{"class":156},[34,34367,1173],{"class":40},[34,34369,34259],{"class":5869},[34,34371,153],{"class":87},[34,34373,34374],{"class":156},"'train acc'",[34,34376,807],{"class":40},[34,34378,34380,34382,34384,34387,34389,34391,34393,34395,34398],{"class":36,"line":34379},205,[34,34381,34245],{"class":40},[34,34383,34248],{"class":156},[34,34385,34386],{"class":40},"],train_process.val_acc_all,",[34,34388,34279],{"class":156},[34,34390,1173],{"class":40},[34,34392,34259],{"class":5869},[34,34394,153],{"class":87},[34,34396,34397],{"class":156},"'val acc'",[34,34399,807],{"class":40},[34,34401,34403],{"class":36,"line":34402},206,[34,34404,34405],{"class":205},"    # 添加图例\n",[34,34407,34409],{"class":36,"line":34408},207,[34,34410,34302],{"class":40},[34,34412,34414,34416,34418],{"class":36,"line":34413},208,[34,34415,34314],{"class":40},[34,34417,34248],{"class":156},[34,34419,807],{"class":40},[34,34421,34423,34425,34428],{"class":36,"line":34422},209,[34,34424,34325],{"class":40},[34,34426,34427],{"class":156},"\"acc\"",[34,34429,807],{"class":40},[34,34431,34433],{"class":36,"line":34432},210,[34,34434,34435],{"class":40},"    plt.show()\n",[34,34437,34439],{"class":36,"line":34438},211,[34,34440,3053],{"emptyLinePlaceholder":726},[34,34442,34444],{"class":36,"line":34443},212,[34,34445,34446],{"class":205},"# 正式开始训练:\n",[34,34448,34450,34452,34454,34456,34458],{"class":36,"line":34449},213,[34,34451,2191],{"class":87},[34,34453,31871],{"class":63},[34,34455,3602],{"class":87},[34,34457,31876],{"class":156},[34,34459,4392],{"class":40},[34,34461,34463],{"class":36,"line":34462},214,[34,34464,34465],{"class":205},"    # 将模型实例化\n",[34,34467,34469,34472,34474],{"class":36,"line":34468},215,[34,34470,34471],{"class":40},"    LeNet",[34,34473,153],{"class":87},[34,34475,34476],{"class":40},"LeNet()\n",[34,34478,34480,34483,34485],{"class":36,"line":34479},216,[34,34481,34482],{"class":40},"    train_dataloader,val_dataloader",[34,34484,153],{"class":87},[34,34486,34487],{"class":40},"train_val_data_process()\n",[34,34489,34491,34493,34495,34498,34501,34503,34505],{"class":36,"line":34490},217,[34,34492,34044],{"class":40},[34,34494,153],{"class":87},[34,34496,34497],{"class":40},"train_model_process(LeNet,train_dataloader,val_dataloader,",[34,34499,34500],{"class":5869},"num_epochs",[34,34502,153],{"class":87},[34,34504,1495],{"class":63},[34,34506,807],{"class":40},[34,34508,34510],{"class":36,"line":34509},218,[34,34511,34512],{"class":40},"    matplot_acc_loss(train_process)\n",[108,34514,34515],{},"画图的补充点学习：",[108,34517,34518],{},[2122,34519],{"alt":29,"src":34520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[752,34522,34523],{"start":60},[755,34524,34525],{},"测试",[24,34527,34529],{"className":31029,"code":34528,"language":31031,"meta":29,"style":29},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[31,34530,34531,34537,34547,34559,34569,34574,34584,34594,34598,34603,34612,34629,34641,34658,34669,34685,34690,34701,34712,34723,34730,34734,34739,34749,34754,34771,34779,34783,34788,34797,34806,34810,34815,34820,34825,34832,34837,34849,34859,34869,34874,34878,34883,34892,34897,34913,34918,34923,34928,34942,34947,34961,34965,34970,34985,34990,35002,35006,35011,35023,35028,35036,35041,35046,35056,35061,35070,35075,35080,35084,35089,35094,35110,35118,35123,35128,35187,35193,35198,35209,35217,35225,35229,35234,35238,35243,35251,35256,35272,35277,35287,35297],{"__ignoreMap":29},[34,34532,34533,34535],{"class":36,"line":37},[34,34534,31043],{"class":87},[34,34536,31046],{"class":40},[34,34538,34539,34541,34543,34545],{"class":36,"line":51},[34,34540,31043],{"class":87},[34,34542,32066],{"class":40},[34,34544,32034],{"class":87},[34,34546,32071],{"class":40},[34,34548,34549,34551,34554,34556],{"class":36,"line":60},[34,34550,31388],{"class":87},[34,34552,34553],{"class":40}," jupyter_client.consoleapp ",[34,34555,31043],{"class":87},[34,34557,34558],{"class":40}," classes\n",[34,34560,34561,34563,34565,34567],{"class":36,"line":76},[34,34562,31388],{"class":87},[34,34564,32049],{"class":40},[34,34566,31043],{"class":87},[34,34568,32054],{"class":40},[34,34570,34571],{"class":36,"line":93},[34,34572,34573],{"class":205},"# 导入数据集\n",[34,34575,34576,34578,34580,34582],{"class":36,"line":99},[34,34577,31388],{"class":87},[34,34579,32019],{"class":40},[34,34581,31043],{"class":87},[34,34583,32024],{"class":40},[34,34585,34586,34588,34590,34592],{"class":36,"line":353},[34,34587,31388],{"class":87},[34,34589,32565],{"class":40},[34,34591,31043],{"class":87},[34,34593,32570],{"class":40},[34,34595,34596],{"class":36,"line":359},[34,34597,3053],{"emptyLinePlaceholder":726},[34,34599,34600],{"class":36,"line":579},[34,34601,34602],{"class":205},"# 测试数据处理\n",[34,34604,34605,34607,34610],{"class":36,"line":589},[34,34606,32598],{"class":87},[34,34608,34609],{"class":149}," test_data_process",[34,34611,32604],{"class":40},[34,34613,34614,34617,34619,34621,34623,34625,34627],{"class":36,"line":601},[34,34615,34616],{"class":40},"    test_data",[34,34618,153],{"class":87},[34,34620,32106],{"class":40},[34,34622,32109],{"class":5869},[34,34624,153],{"class":87},[34,34626,32114],{"class":156},[34,34628,32117],{"class":40},[34,34630,34631,34634,34636,34639],{"class":36,"line":613},[34,34632,34633],{"class":5869},"                           train",[34,34635,153],{"class":87},[34,34637,34638],{"class":63},"False",[34,34640,32117],{"class":40},[34,34642,34643,34646,34648,34650,34652,34654,34656],{"class":36,"line":618},[34,34644,34645],{"class":5869},"                           transform",[34,34647,153],{"class":87},[34,34649,32144],{"class":40},[34,34651,32147],{"class":5869},[34,34653,153],{"class":87},[34,34655,1695],{"class":63},[34,34657,32155],{"class":40},[34,34659,34660,34663,34665,34667],{"class":36,"line":628},[34,34661,34662],{"class":5869},"                           download",[34,34664,153],{"class":87},[34,34666,32127],{"class":63},[34,34668,807],{"class":40},[34,34670,34671,34674,34676,34678,34680,34682],{"class":36,"line":640},[34,34672,34673],{"class":40},"    test_dataloader",[34,34675,153],{"class":87},[34,34677,32185],{"class":40},[34,34679,32188],{"class":5869},[34,34681,153],{"class":87},[34,34683,34684],{"class":40},"test_data,\n",[34,34686,34687],{"class":36,"line":2301},[34,34688,34689],{"class":205},"                                    # 这里是一张一张进行测试\n",[34,34691,34692,34695,34697,34699],{"class":36,"line":2307},[34,34693,34694],{"class":5869},"                                    batch_size",[34,34696,153],{"class":87},[34,34698,1013],{"class":63},[34,34700,32117],{"class":40},[34,34702,34703,34706,34708,34710],{"class":36,"line":2328},[34,34704,34705],{"class":5869},"                                    shuffle",[34,34707,153],{"class":87},[34,34709,32127],{"class":63},[34,34711,32117],{"class":40},[34,34713,34714,34717,34719,34721],{"class":36,"line":2333},[34,34715,34716],{"class":5869},"                                    num_workers",[34,34718,153],{"class":87},[34,34720,987],{"class":63},[34,34722,807],{"class":40},[34,34724,34725,34727],{"class":36,"line":2347},[34,34726,4743],{"class":87},[34,34728,34729],{"class":40}," test_dataloader\n",[34,34731,34732],{"class":36,"line":2352},[34,34733,3053],{"emptyLinePlaceholder":726},[34,34735,34736],{"class":36,"line":2381},[34,34737,34738],{"class":205},"# 定义模型测试函数\n",[34,34740,34741,34743,34746],{"class":36,"line":2386},[34,34742,32598],{"class":87},[34,34744,34745],{"class":149}," test_model_process",[34,34747,34748],{"class":40},"(model,test_dataloader):\n",[34,34750,34751],{"class":36,"line":2403},[34,34752,34753],{"class":205},"    # 将模型放到设备当中，先进行判断\n",[34,34755,34756,34758,34760,34762,34764,34766,34768],{"class":36,"line":2408},[34,34757,31888],{"class":40},[34,34759,153],{"class":87},[34,34761,31895],{"class":156},[34,34763,2358],{"class":87},[34,34765,31900],{"class":40},[34,34767,2355],{"class":87},[34,34769,34770],{"class":156}," \"cpu\"\n",[34,34772,34773,34775,34777],{"class":36,"line":2413},[34,34774,31940],{"class":40},[34,34776,153],{"class":87},[34,34778,32940],{"class":40},[34,34780,34781],{"class":36,"line":2418},[34,34782,3053],{"emptyLinePlaceholder":726},[34,34784,34785],{"class":36,"line":2432},[34,34786,34787],{"class":205},"    # 设置初始化参数\n",[34,34789,34790,34793,34795],{"class":36,"line":2437},[34,34791,34792],{"class":40},"    test_corrects",[34,34794,153],{"class":87},[34,34796,32993],{"class":63},[34,34798,34799,34802,34804],{"class":36,"line":3230},[34,34800,34801],{"class":40},"    test_num",[34,34803,153],{"class":87},[34,34805,3738],{"class":63},[34,34807,34808],{"class":36,"line":3244},[34,34809,3053],{"emptyLinePlaceholder":726},[34,34811,34812],{"class":36,"line":3252},[34,34813,34814],{"class":205},"    # 进行模型测试\n",[34,34816,34817],{"class":36,"line":3257},[34,34818,34819],{"class":205},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[34,34821,34822],{"class":36,"line":3263},[34,34823,34824],{"class":205},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[34,34826,34827,34830],{"class":36,"line":3269},[34,34828,34829],{"class":87},"    with",[34,34831,33535],{"class":40},[34,34833,34834],{"class":36,"line":3274},[34,34835,34836],{"class":205},"        # 从数据中进行\n",[34,34838,34839,34841,34844,34846],{"class":36,"line":8601},[34,34840,4056],{"class":87},[34,34842,34843],{"class":40}," test_data_x,test_data_y ",[34,34845,26695],{"class":87},[34,34847,34848],{"class":40}," test_dataloader:\n",[34,34850,34851,34854,34856],{"class":36,"line":8625},[34,34852,34853],{"class":40},"            test_data_x",[34,34855,153],{"class":87},[34,34857,34858],{"class":40},"test_data_x.to(device)\n",[34,34860,34861,34864,34866],{"class":36,"line":8630},[34,34862,34863],{"class":40},"            test_data_y",[34,34865,153],{"class":87},[34,34867,34868],{"class":40},"test_data_y.to(device)\n",[34,34870,34871],{"class":36,"line":8636},[34,34872,34873],{"class":205},"            # 设置为验证模式\n",[34,34875,34876],{"class":36,"line":8663},[34,34877,33526],{"class":40},[34,34879,34880],{"class":36,"line":8668},[34,34881,34882],{"class":205},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[34,34884,34885,34887,34889],{"class":36,"line":8674},[34,34886,33311],{"class":40},[34,34888,153],{"class":87},[34,34890,34891],{"class":40},"model(test_data_x)\n",[34,34893,34894],{"class":36,"line":8686},[34,34895,34896],{"class":205},"            # 查找每一行中最大值对应的下标\n",[34,34898,34899,34901,34903,34905,34907,34909,34911],{"class":36,"line":8698},[34,34900,33328],{"class":40},[34,34902,153],{"class":87},[34,34904,33333],{"class":40},[34,34906,33336],{"class":5869},[34,34908,153],{"class":87},[34,34910,1013],{"class":63},[34,34912,807],{"class":40},[34,34914,34915],{"class":36,"line":8710},[34,34916,34917],{"class":205},"            # 计算正确率\n",[34,34919,34920],{"class":36,"line":10369},[34,34921,34922],{"class":205},"            # .data表示是一个不带梯度信息的tensor\n",[34,34924,34925],{"class":36,"line":10394},[34,34926,34927],{"class":205},"            # 如果预测正确，则准确度test_corrects加1\n",[34,34929,34930,34933,34935,34937,34939],{"class":36,"line":10417},[34,34931,34932],{"class":40},"            test_corrects",[34,34934,10130],{"class":87},[34,34936,33438],{"class":40},[34,34938,3602],{"class":87},[34,34940,34941],{"class":40},"test_data_y.data)\n",[34,34943,34944],{"class":36,"line":10441},[34,34945,34946],{"class":205},"            # 将所有的测试样本进行累计\n",[34,34948,34949,34952,34954,34957,34959],{"class":36,"line":10446},[34,34950,34951],{"class":40},"            test_num",[34,34953,10130],{"class":87},[34,34955,34956],{"class":40},"test_data_x.size(",[34,34958,987],{"class":63},[34,34960,807],{"class":40},[34,34962,34963],{"class":36,"line":10451},[34,34964,3053],{"emptyLinePlaceholder":726},[34,34966,34967],{"class":36,"line":10456},[34,34968,34969],{"class":205},"        # 计算准确度\n",[34,34971,34972,34975,34977,34980,34982],{"class":36,"line":10465},[34,34973,34974],{"class":40},"        test_acc",[34,34976,153],{"class":87},[34,34978,34979],{"class":40},"test_corrects.double().item()",[34,34981,1379],{"class":87},[34,34983,34984],{"class":40},"test_num\n",[34,34986,34987],{"class":36,"line":10470},[34,34988,34989],{"class":205},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[34,34991,34992,34994,34996,34999],{"class":36,"line":10476},[34,34993,33102],{"class":63},[34,34995,801],{"class":40},[34,34997,34998],{"class":156},"\"测试的准确率：\"",[34,35000,35001],{"class":40},",test_acc)\n",[34,35003,35004],{"class":36,"line":10497},[34,35005,3053],{"emptyLinePlaceholder":726},[34,35007,35008],{"class":36,"line":10503},[34,35009,35010],{"class":205},"# 实现模型的测试功能\n",[34,35012,35013,35015,35017,35019,35021],{"class":36,"line":10517},[34,35014,2191],{"class":87},[34,35016,31871],{"class":63},[34,35018,3602],{"class":87},[34,35020,31876],{"class":156},[34,35022,4392],{"class":40},[34,35024,35025],{"class":36,"line":10523},[34,35026,35027],{"class":205},"    # 加载模型\n",[34,35029,35030,35032,35034],{"class":36,"line":10550},[34,35031,31940],{"class":40},[34,35033,153],{"class":87},[34,35035,34476],{"class":40},[34,35037,35038],{"class":36,"line":10559},[34,35039,35040],{"class":205},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[34,35042,35043],{"class":36,"line":10565},[34,35044,35045],{"class":205},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[34,35047,35048,35051,35054],{"class":36,"line":10573},[34,35049,35050],{"class":40},"    model.load_state_dict(torch.load(",[34,35052,35053],{"class":156},"'best_model.pth'",[34,35055,31148],{"class":40},[34,35057,35058],{"class":36,"line":10578},[34,35059,35060],{"class":205},"    # 数据加载\n",[34,35062,35063,35065,35067],{"class":36,"line":17256},[34,35064,34673],{"class":40},[34,35066,153],{"class":87},[34,35068,35069],{"class":40},"test_data_process()\n",[34,35071,35072],{"class":36,"line":17262},[34,35073,35074],{"class":205},"    # 加载模型测试的函数\n",[34,35076,35077],{"class":36,"line":17285},[34,35078,35079],{"class":40},"    test_model_process(model,test_dataloader)\n",[34,35081,35082],{"class":36,"line":17291},[34,35083,3053],{"emptyLinePlaceholder":726},[34,35085,35086],{"class":36,"line":17314},[34,35087,35088],{"class":205},"    # 验证集推理实现：\n",[34,35090,35091],{"class":36,"line":17328},[34,35092,35093],{"class":205},"    # 加载数据加载的更详细一些\n",[34,35095,35096,35098,35100,35102,35104,35106,35108],{"class":36,"line":17348},[34,35097,31888],{"class":40},[34,35099,153],{"class":87},[34,35101,31895],{"class":156},[34,35103,2358],{"class":87},[34,35105,31900],{"class":40},[34,35107,2355],{"class":87},[34,35109,34770],{"class":156},[34,35111,35112,35114,35116],{"class":36,"line":17354},[34,35113,31940],{"class":40},[34,35115,153],{"class":87},[34,35117,32940],{"class":40},[34,35119,35120],{"class":36,"line":17365},[34,35121,35122],{"class":205},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[34,35124,35125],{"class":36,"line":17388},[34,35126,35127],{"class":205},"    # 顺序不可改变\n",[34,35129,35130,35133,35135,35137,35140,35142,35145,35147,35150,35152,35155,35157,35160,35162,35165,35167,35170,35172,35175,35177,35180,35182,35185],{"class":36,"line":17410},[34,35131,35132],{"class":40},"    classes",[34,35134,153],{"class":87},[34,35136,1684],{"class":40},[34,35138,35139],{"class":156},"'T-shirt\u002Ftop'",[34,35141,1173],{"class":40},[34,35143,35144],{"class":156},"'Trouser'",[34,35146,1173],{"class":40},[34,35148,35149],{"class":156},"'Pullover'",[34,35151,1173],{"class":40},[34,35153,35154],{"class":156},"'Dress'",[34,35156,1173],{"class":40},[34,35158,35159],{"class":156},"'Coat'",[34,35161,1173],{"class":40},[34,35163,35164],{"class":156},"'Sandal'",[34,35166,1173],{"class":40},[34,35168,35169],{"class":156},"'Shirt'",[34,35171,1173],{"class":40},[34,35173,35174],{"class":156},"'Sneaker'",[34,35176,1173],{"class":40},[34,35178,35179],{"class":156},"'Bag'",[34,35181,1173],{"class":40},[34,35183,35184],{"class":156},"'Ankle boot'",[34,35186,33897],{"class":40},[34,35188,35189,35191],{"class":36,"line":17415},[34,35190,34829],{"class":87},[34,35192,33535],{"class":40},[34,35194,35195],{"class":36,"line":17421},[34,35196,35197],{"class":205},"        # 将数据和标签都放到设备当中\n",[34,35199,35200,35202,35205,35207],{"class":36,"line":17435},[34,35201,4056],{"class":87},[34,35203,35204],{"class":40}," b_x,b_y ",[34,35206,26695],{"class":87},[34,35208,34848],{"class":40},[34,35210,35211,35213,35215],{"class":36,"line":17448},[34,35212,33261],{"class":40},[34,35214,153],{"class":87},[34,35216,33266],{"class":40},[34,35218,35219,35221,35223],{"class":36,"line":17453},[34,35220,33276],{"class":40},[34,35222,153],{"class":87},[34,35224,33281],{"class":40},[34,35226,35227],{"class":36,"line":17467},[34,35228,3053],{"emptyLinePlaceholder":726},[34,35230,35231],{"class":36,"line":17472},[34,35232,35233],{"class":205},"            # 设置模型为验证模式\n",[34,35235,35236],{"class":36,"line":17478},[34,35237,33526],{"class":40},[34,35239,35240],{"class":36,"line":17483},[34,35241,35242],{"class":205},"            # 模型推理结果\n",[34,35244,35245,35247,35249],{"class":36,"line":17497},[34,35246,33311],{"class":40},[34,35248,153],{"class":87},[34,35250,33316],{"class":40},[34,35252,35253],{"class":36,"line":17502},[34,35254,35255],{"class":205},"            # 获取最大下标，最大下标就是类别号\n",[34,35257,35258,35260,35262,35264,35266,35268,35270],{"class":36,"line":17507},[34,35259,33328],{"class":40},[34,35261,153],{"class":87},[34,35263,33333],{"class":40},[34,35265,33336],{"class":5869},[34,35267,153],{"class":87},[34,35269,1013],{"class":63},[34,35271,807],{"class":40},[34,35273,35274],{"class":36,"line":17521},[34,35275,35276],{"class":205},"            # 取出张量中的数值\n",[34,35278,35279,35282,35284],{"class":36,"line":17533},[34,35280,35281],{"class":40},"            result",[34,35283,153],{"class":87},[34,35285,35286],{"class":40},"pre_lab.item()\n",[34,35288,35289,35292,35294],{"class":36,"line":17538},[34,35290,35291],{"class":40},"            label",[34,35293,153],{"class":87},[34,35295,35296],{"class":40},"b_y.item()\n",[34,35298,35299,35302,35304,35307,35310,35313,35315,35318],{"class":36,"line":17551},[34,35300,35301],{"class":63},"            print",[34,35303,801],{"class":40},[34,35305,35306],{"class":156},"\"预测值：\"",[34,35308,35309],{"class":40},",classes[result],",[34,35311,35312],{"class":156},"\"------\"",[34,35314,1173],{"class":40},[34,35316,35317],{"class":156},"\"真实值：\"",[34,35319,35320],{"class":40},",classes[label])\n",[108,35322,35323],{},"（2）AlexNet",[752,35325,35326],{},[755,35327,35328],{},"神经网络构建",[24,35330,35332],{"className":31029,"code":35331,"language":31031,"meta":29,"style":29},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[31,35333,35334,35340,35350,35360,35372,35376,35393,35401,35416,35428,35470,35497,35540,35566,35610,35653,35696,35723,35727,35737,35742,35770,35789,35808,35812,35817,35825,35840,35850,35864,35874,35889,35904,35919,35930,35934,35939,35949,35964,35969,35983,35998,36010,36015,36026,36031,36037,36042,36054,36074,36079,36088],{"__ignoreMap":29},[34,35335,35336,35338],{"class":36,"line":37},[34,35337,31043],{"class":87},[34,35339,31046],{"class":40},[34,35341,35342,35344,35346,35348],{"class":36,"line":51},[34,35343,31388],{"class":87},[34,35345,31391],{"class":40},[34,35347,31043],{"class":87},[34,35349,31396],{"class":40},[34,35351,35352,35354,35356,35358],{"class":36,"line":60},[34,35353,31388],{"class":87},[34,35355,31408],{"class":40},[34,35357,31043],{"class":87},[34,35359,31413],{"class":40},[34,35361,35362,35364,35367,35369],{"class":36,"line":76},[34,35363,31043],{"class":87},[34,35365,35366],{"class":40}," torch.nn.functional ",[34,35368,32034],{"class":87},[34,35370,35371],{"class":40}," F\n",[34,35373,35374],{"class":36,"line":93},[34,35375,3053],{"emptyLinePlaceholder":726},[34,35377,35378,35380,35383,35385,35387,35389,35391],{"class":36,"line":99},[34,35379,15347],{"class":87},[34,35381,35382],{"class":149}," AlexNet",[34,35384,801],{"class":40},[34,35386,31429],{"class":149},[34,35388,1353],{"class":40},[34,35390,31434],{"class":149},[34,35392,31437],{"class":40},[34,35394,35395,35397,35399],{"class":36,"line":353},[34,35396,31452],{"class":87},[34,35398,31455],{"class":63},[34,35400,31458],{"class":40},[34,35402,35403,35405,35408,35410,35412,35414],{"class":36,"line":359},[34,35404,31468],{"class":63},[34,35406,35407],{"class":40},"(AlexNet,",[34,35409,31474],{"class":63},[34,35411,31477],{"class":40},[34,35413,31480],{"class":63},[34,35415,2629],{"class":40},[34,35417,35418,35420,35423,35425],{"class":36,"line":579},[34,35419,31496],{"class":63},[34,35421,35422],{"class":40},".ReLu",[34,35424,153],{"class":87},[34,35426,35427],{"class":40},"nn.ReLU()\n",[34,35429,35430,35432,35434,35436,35438,35440,35442,35444,35446,35448,35450,35452,35454,35456,35458,35460,35462,35464,35466,35468],{"class":36,"line":589},[34,35431,31496],{"class":63},[34,35433,31499],{"class":40},[34,35435,153],{"class":87},[34,35437,31504],{"class":40},[34,35439,31507],{"class":5869},[34,35441,153],{"class":87},[34,35443,1013],{"class":63},[34,35445,1173],{"class":40},[34,35447,31516],{"class":5869},[34,35449,153],{"class":87},[34,35451,1005],{"class":63},[34,35453,1173],{"class":40},[34,35455,31525],{"class":5869},[34,35457,153],{"class":87},[34,35459,1267],{"class":63},[34,35461,1173],{"class":40},[34,35463,31580],{"class":5869},[34,35465,153],{"class":87},[34,35467,1088],{"class":63},[34,35469,807],{"class":40},[34,35471,35472,35474,35476,35478,35481,35483,35485,35487,35489,35491,35493,35495],{"class":36,"line":601},[34,35473,31496],{"class":63},[34,35475,31564],{"class":40},[34,35477,153],{"class":87},[34,35479,35480],{"class":40},"nn.MaxPool2d(",[34,35482,31525],{"class":5869},[34,35484,153],{"class":87},[34,35486,869],{"class":63},[34,35488,1173],{"class":40},[34,35490,31580],{"class":5869},[34,35492,153],{"class":87},[34,35494,875],{"class":63},[34,35496,807],{"class":40},[34,35498,35499,35501,35503,35505,35507,35509,35511,35513,35515,35517,35519,35522,35524,35526,35528,35530,35532,35534,35536,35538],{"class":36,"line":613},[34,35500,31496],{"class":63},[34,35502,31593],{"class":40},[34,35504,153],{"class":87},[34,35506,31504],{"class":40},[34,35508,31507],{"class":5869},[34,35510,153],{"class":87},[34,35512,1005],{"class":63},[34,35514,1173],{"class":40},[34,35516,31516],{"class":5869},[34,35518,153],{"class":87},[34,35520,35521],{"class":63},"256",[34,35523,1173],{"class":40},[34,35525,31525],{"class":5869},[34,35527,153],{"class":87},[34,35529,1114],{"class":63},[34,35531,1173],{"class":40},[34,35533,31534],{"class":5869},[34,35535,153],{"class":87},[34,35537,875],{"class":63},[34,35539,807],{"class":40},[34,35541,35542,35544,35546,35548,35550,35552,35554,35556,35558,35560,35562,35564],{"class":36,"line":618},[34,35543,31496],{"class":63},[34,35545,31628],{"class":40},[34,35547,153],{"class":87},[34,35549,35480],{"class":40},[34,35551,31525],{"class":5869},[34,35553,153],{"class":87},[34,35555,869],{"class":63},[34,35557,1173],{"class":40},[34,35559,31580],{"class":5869},[34,35561,153],{"class":87},[34,35563,875],{"class":63},[34,35565,807],{"class":40},[34,35567,35568,35570,35573,35575,35577,35579,35581,35583,35585,35587,35589,35592,35594,35596,35598,35600,35602,35604,35606,35608],{"class":36,"line":628},[34,35569,31496],{"class":63},[34,35571,35572],{"class":40},".c5",[34,35574,153],{"class":87},[34,35576,31504],{"class":40},[34,35578,31507],{"class":5869},[34,35580,153],{"class":87},[34,35582,35521],{"class":63},[34,35584,1173],{"class":40},[34,35586,31516],{"class":5869},[34,35588,153],{"class":87},[34,35590,35591],{"class":63},"384",[34,35593,1173],{"class":40},[34,35595,31525],{"class":5869},[34,35597,153],{"class":87},[34,35599,869],{"class":63},[34,35601,1173],{"class":40},[34,35603,31534],{"class":5869},[34,35605,153],{"class":87},[34,35607,1013],{"class":63},[34,35609,807],{"class":40},[34,35611,35612,35614,35617,35619,35621,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647,35649,35651],{"class":36,"line":640},[34,35613,31496],{"class":63},[34,35615,35616],{"class":40},".c6",[34,35618,153],{"class":87},[34,35620,31504],{"class":40},[34,35622,31507],{"class":5869},[34,35624,153],{"class":87},[34,35626,35591],{"class":63},[34,35628,1173],{"class":40},[34,35630,31516],{"class":5869},[34,35632,153],{"class":87},[34,35634,35591],{"class":63},[34,35636,1173],{"class":40},[34,35638,31525],{"class":5869},[34,35640,153],{"class":87},[34,35642,869],{"class":63},[34,35644,1173],{"class":40},[34,35646,31534],{"class":5869},[34,35648,153],{"class":87},[34,35650,1013],{"class":63},[34,35652,807],{"class":40},[34,35654,35655,35657,35660,35662,35664,35666,35668,35670,35672,35674,35676,35678,35680,35682,35684,35686,35688,35690,35692,35694],{"class":36,"line":2301},[34,35656,31496],{"class":63},[34,35658,35659],{"class":40},".c7",[34,35661,153],{"class":87},[34,35663,31504],{"class":40},[34,35665,31507],{"class":5869},[34,35667,153],{"class":87},[34,35669,35591],{"class":63},[34,35671,1173],{"class":40},[34,35673,31516],{"class":5869},[34,35675,153],{"class":87},[34,35677,35521],{"class":63},[34,35679,1173],{"class":40},[34,35681,31525],{"class":5869},[34,35683,153],{"class":87},[34,35685,869],{"class":63},[34,35687,1173],{"class":40},[34,35689,31534],{"class":5869},[34,35691,153],{"class":87},[34,35693,1013],{"class":63},[34,35695,807],{"class":40},[34,35697,35698,35700,35703,35705,35707,35709,35711,35713,35715,35717,35719,35721],{"class":36,"line":2307},[34,35699,31496],{"class":63},[34,35701,35702],{"class":40},".s8",[34,35704,153],{"class":87},[34,35706,35480],{"class":40},[34,35708,31525],{"class":5869},[34,35710,153],{"class":87},[34,35712,869],{"class":63},[34,35714,1173],{"class":40},[34,35716,31580],{"class":5869},[34,35718,153],{"class":87},[34,35720,875],{"class":63},[34,35722,807],{"class":40},[34,35724,35725],{"class":36,"line":2328},[34,35726,31653],{"class":205},[34,35728,35729,35731,35733,35735],{"class":36,"line":2333},[34,35730,31496],{"class":63},[34,35732,31660],{"class":40},[34,35734,153],{"class":87},[34,35736,31665],{"class":40},[34,35738,35739],{"class":36,"line":2347},[34,35740,35741],{"class":205},"       # 定义全连接层\n",[34,35743,35744,35746,35749,35751,35753,35755,35757,35759,35761,35763,35765,35768],{"class":36,"line":2352},[34,35745,31496],{"class":63},[34,35747,35748],{"class":40},".f1",[34,35750,153],{"class":87},[34,35752,31682],{"class":40},[34,35754,1139],{"class":63},[34,35756,1250],{"class":87},[34,35758,1139],{"class":63},[34,35760,1250],{"class":87},[34,35762,35521],{"class":63},[34,35764,1173],{"class":40},[34,35766,35767],{"class":63},"4096",[34,35769,807],{"class":40},[34,35771,35772,35774,35777,35779,35781,35783,35785,35787],{"class":36,"line":2381},[34,35773,31496],{"class":63},[34,35775,35776],{"class":40},".f2",[34,35778,153],{"class":87},[34,35780,31682],{"class":40},[34,35782,35767],{"class":63},[34,35784,1173],{"class":40},[34,35786,35767],{"class":63},[34,35788,807],{"class":40},[34,35790,35791,35793,35796,35798,35800,35802,35804,35806],{"class":36,"line":2386},[34,35792,31496],{"class":63},[34,35794,35795],{"class":40},".f3",[34,35797,153],{"class":87},[34,35799,31682],{"class":40},[34,35801,35767],{"class":63},[34,35803,1173],{"class":40},[34,35805,1241],{"class":63},[34,35807,807],{"class":40},[34,35809,35810],{"class":36,"line":2403},[34,35811,3053],{"emptyLinePlaceholder":726},[34,35813,35814],{"class":36,"line":2408},[34,35815,35816],{"class":205},"    # 定义前向传播\n",[34,35818,35819,35821,35823],{"class":36,"line":2413},[34,35820,31452],{"class":87},[34,35822,31744],{"class":149},[34,35824,31747],{"class":40},[34,35826,35827,35829,35831,35833,35836,35838],{"class":36,"line":2418},[34,35828,31752],{"class":40},[34,35830,153],{"class":87},[34,35832,31474],{"class":63},[34,35834,35835],{"class":40},".ReLu(",[34,35837,31474],{"class":63},[34,35839,31764],{"class":40},[34,35841,35842,35844,35846,35848],{"class":36,"line":2432},[34,35843,31752],{"class":40},[34,35845,153],{"class":87},[34,35847,31474],{"class":63},[34,35849,31775],{"class":40},[34,35851,35852,35854,35856,35858,35860,35862],{"class":36,"line":2437},[34,35853,31752],{"class":40},[34,35855,153],{"class":87},[34,35857,31474],{"class":63},[34,35859,35835],{"class":40},[34,35861,31474],{"class":63},[34,35863,31790],{"class":40},[34,35865,35866,35868,35870,35872],{"class":36,"line":3230},[34,35867,31752],{"class":40},[34,35869,153],{"class":87},[34,35871,31474],{"class":63},[34,35873,31801],{"class":40},[34,35875,35876,35878,35880,35882,35884,35886],{"class":36,"line":3244},[34,35877,31752],{"class":40},[34,35879,153],{"class":87},[34,35881,31474],{"class":63},[34,35883,35835],{"class":40},[34,35885,31474],{"class":63},[34,35887,35888],{"class":40},".c5(x))\n",[34,35890,35891,35893,35895,35897,35899,35901],{"class":36,"line":3252},[34,35892,31752],{"class":40},[34,35894,153],{"class":87},[34,35896,31474],{"class":63},[34,35898,35835],{"class":40},[34,35900,31474],{"class":63},[34,35902,35903],{"class":40},".c6(x))\n",[34,35905,35906,35908,35910,35912,35914,35916],{"class":36,"line":3257},[34,35907,31752],{"class":40},[34,35909,153],{"class":87},[34,35911,31474],{"class":63},[34,35913,35835],{"class":40},[34,35915,31474],{"class":63},[34,35917,35918],{"class":40},".c7(x))\n",[34,35920,35921,35923,35925,35927],{"class":36,"line":3263},[34,35922,31752],{"class":40},[34,35924,153],{"class":87},[34,35926,31474],{"class":63},[34,35928,35929],{"class":40},".s8(x)\n",[34,35931,35932],{"class":36,"line":3269},[34,35933,3053],{"emptyLinePlaceholder":726},[34,35935,35936],{"class":36,"line":3274},[34,35937,35938],{"class":205},"        # 展平加线性全连接层\n",[34,35940,35941,35943,35945,35947],{"class":36,"line":8601},[34,35942,31752],{"class":40},[34,35944,153],{"class":87},[34,35946,31474],{"class":63},[34,35948,31812],{"class":40},[34,35950,35951,35953,35955,35957,35959,35961],{"class":36,"line":8625},[34,35952,31752],{"class":40},[34,35954,153],{"class":87},[34,35956,31474],{"class":63},[34,35958,35835],{"class":40},[34,35960,31474],{"class":63},[34,35962,35963],{"class":40},".f1(x))\n",[34,35965,35966],{"class":36,"line":8630},[34,35967,35968],{"class":205},"        # 还需要dropout对神经元随机进行失活\n",[34,35970,35971,35973,35975,35978,35981],{"class":36,"line":8636},[34,35972,31752],{"class":40},[34,35974,153],{"class":87},[34,35976,35977],{"class":40},"F.dropout(x,",[34,35979,35980],{"class":63},"0.5",[34,35982,807],{"class":40},[34,35984,35985,35987,35989,35991,35993,35995],{"class":36,"line":8663},[34,35986,31752],{"class":40},[34,35988,153],{"class":87},[34,35990,31474],{"class":63},[34,35992,35835],{"class":40},[34,35994,31474],{"class":63},[34,35996,35997],{"class":40},".f2(x))\n",[34,35999,36000,36002,36004,36006,36008],{"class":36,"line":8668},[34,36001,31752],{"class":40},[34,36003,153],{"class":87},[34,36005,35977],{"class":40},[34,36007,35980],{"class":63},[34,36009,807],{"class":40},[34,36011,36012],{"class":36,"line":8674},[34,36013,36014],{"class":205},"        # 直接输出\n",[34,36016,36017,36019,36021,36023],{"class":36,"line":8686},[34,36018,31752],{"class":40},[34,36020,153],{"class":87},[34,36022,31474],{"class":63},[34,36024,36025],{"class":40},".f3(x)\n",[34,36027,36028],{"class":36,"line":8698},[34,36029,36030],{"class":205},"        # 前向传播输出\n",[34,36032,36033,36035],{"class":36,"line":8710},[34,36034,15405],{"class":87},[34,36036,31860],{"class":40},[34,36038,36039],{"class":36,"line":10369},[34,36040,36041],{"class":205},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[34,36043,36044,36046,36048,36050,36052],{"class":36,"line":10394},[34,36045,2191],{"class":87},[34,36047,31871],{"class":63},[34,36049,3602],{"class":87},[34,36051,31876],{"class":156},[34,36053,4392],{"class":40},[34,36055,36056,36058,36060,36062,36064,36066,36068,36070,36072],{"class":36,"line":10417},[34,36057,31888],{"class":40},[34,36059,153],{"class":87},[34,36061,31102],{"class":40},[34,36063,31895],{"class":156},[34,36065,2358],{"class":87},[34,36067,31900],{"class":40},[34,36069,2355],{"class":87},[34,36071,31127],{"class":156},[34,36073,807],{"class":40},[34,36075,36076],{"class":36,"line":10441},[34,36077,36078],{"class":205},"    # 模型实例化，然后将实例化的模型放到设备中\n",[34,36080,36081,36083,36085],{"class":36,"line":10446},[34,36082,31940],{"class":40},[34,36084,153],{"class":87},[34,36086,36087],{"class":40},"AlexNet().to(device)\n",[34,36089,36090,36092,36094,36096,36098,36101,36103,36105],{"class":36,"line":10451},[34,36091,31950],{"class":63},[34,36093,31953],{"class":40},[34,36095,1013],{"class":63},[34,36097,1173],{"class":40},[34,36099,36100],{"class":63},"227",[34,36102,1173],{"class":40},[34,36104,36100],{"class":63},[34,36106,31966],{"class":40},[752,36108,36109],{"start":51},[755,36110,31979],{},[24,36112,36114],{"className":31029,"code":36113,"language":31031,"meta":29,"style":29},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[31,36115,36116,36122,36128,36138,36144,36154,36164,36174,36184,36194,36198,36209,36219,36223,36227,36231,36239,36251,36261,36277,36287,36319,36333,36343,36353,36357,36367,36381,36391,36401,36411,36417,36421,36425,36429,36433,36437,36445,36465,36469,36473,36477,36481,36485,36501,36505,36509,36517,36521,36525,36533,36537,36541,36545,36553,36557,36561,36565,36569,36577,36581,36589,36593,36601,36605,36613,36617,36625,36629,36633,36641,36645,36649,36653,36665,36689,36703,36707,36711,36715,36723,36727,36735,36739,36747,36751,36759,36763,36771,36775,36783,36787,36799,36803,36811,36815,36823,36827,36831,36835,36839,36847,36851,36867,36871,36879,36883,36887,36891,36895,36899,36903,36907,36923,36927,36939,36943,36955,36959,36971,36975,36983,36987,36995,36999,37003,37008,37014,37018,37027,37031,37048,37052,37061,37065,37083,37096,37101,37114,37118,37122,37130,37134,37138,37146,37150,37158,37162,37170,37174,37178,37220,37262,37266,37270,37286,37290,37306,37310,37314,37322,37326,37330,37342,37380,37385,37390,37399,37403,37417,37427,37433,37439,37445,37451,37455,37459,37465,37469,37473,37481,37485,37503,37507,37511,37515,37531,37535,37539,37543,37547,37551,37571,37591,37595,37599,37603,37611,37619,37623,37639,37659,37679,37683,37687,37695,37703,37707,37711,37715,37727,37731,37741,37749,37766],{"__ignoreMap":29},[34,36117,36118,36120],{"class":36,"line":37},[34,36119,31043],{"class":87},[34,36121,32473],{"class":40},[34,36123,36124,36126],{"class":36,"line":51},[34,36125,31043],{"class":87},[34,36127,32480],{"class":40},[34,36129,36130,36132,36134,36136],{"class":36,"line":60},[34,36131,31043],{"class":87},[34,36133,32491],{"class":40},[34,36135,32034],{"class":87},[34,36137,32496],{"class":40},[34,36139,36140,36142],{"class":36,"line":76},[34,36141,31043],{"class":87},[34,36143,31046],{"class":40},[34,36145,36146,36148,36150,36152],{"class":36,"line":93},[34,36147,31388],{"class":87},[34,36149,32066],{"class":40},[34,36151,31043],{"class":87},[34,36153,32513],{"class":40},[34,36155,36156,36158,36160,36162],{"class":36,"line":99},[34,36157,31388],{"class":87},[34,36159,32019],{"class":40},[34,36161,31043],{"class":87},[34,36163,32024],{"class":40},[34,36165,36166,36168,36170,36172],{"class":36,"line":353},[34,36167,31388],{"class":87},[34,36169,32049],{"class":40},[34,36171,31043],{"class":87},[34,36173,32054],{"class":40},[34,36175,36176,36178,36180,36182],{"class":36,"line":359},[34,36177,31043],{"class":87},[34,36179,32066],{"class":40},[34,36181,32034],{"class":87},[34,36183,32071],{"class":40},[34,36185,36186,36188,36190,36192],{"class":36,"line":579},[34,36187,31043],{"class":87},[34,36189,32083],{"class":40},[34,36191,32034],{"class":87},[34,36193,32088],{"class":40},[34,36195,36196],{"class":36,"line":589},[34,36197,32558],{"class":205},[34,36199,36200,36202,36204,36206],{"class":36,"line":601},[34,36201,31388],{"class":87},[34,36203,32565],{"class":40},[34,36205,31043],{"class":87},[34,36207,36208],{"class":40}," AlexNet\n",[34,36210,36211,36213,36215,36217],{"class":36,"line":613},[34,36212,31388],{"class":87},[34,36214,31391],{"class":40},[34,36216,31043],{"class":87},[34,36218,31396],{"class":40},[34,36220,36221],{"class":36,"line":618},[34,36222,3053],{"emptyLinePlaceholder":726},[34,36224,36225],{"class":36,"line":628},[34,36226,3053],{"emptyLinePlaceholder":726},[34,36228,36229],{"class":36,"line":640},[34,36230,32593],{"class":205},[34,36232,36233,36235,36237],{"class":36,"line":2301},[34,36234,32598],{"class":87},[34,36236,32601],{"class":149},[34,36238,32604],{"class":40},[34,36240,36241,36243,36245,36247,36249],{"class":36,"line":2307},[34,36242,32609],{"class":40},[34,36244,153],{"class":87},[34,36246,32106],{"class":40},[34,36248,32114],{"class":156},[34,36250,32117],{"class":40},[34,36252,36253,36255,36257,36259],{"class":36,"line":2328},[34,36254,32622],{"class":5869},[34,36256,153],{"class":87},[34,36258,32127],{"class":63},[34,36260,32117],{"class":40},[34,36262,36263,36265,36267,36269,36271,36273,36275],{"class":36,"line":2333},[34,36264,32633],{"class":5869},[34,36266,153],{"class":87},[34,36268,32144],{"class":40},[34,36270,32147],{"class":5869},[34,36272,153],{"class":87},[34,36274,36100],{"class":63},[34,36276,32155],{"class":40},[34,36278,36279,36281,36283,36285],{"class":36,"line":2347},[34,36280,32650],{"class":5869},[34,36282,153],{"class":87},[34,36284,32127],{"class":63},[34,36286,807],{"class":40},[34,36288,36289,36291,36293,36295,36297,36299,36301,36303,36305,36307,36309,36311,36313,36315,36317],{"class":36,"line":2352},[34,36290,32661],{"class":40},[34,36292,153],{"class":87},[34,36294,32666],{"class":40},[34,36296,32669],{"class":63},[34,36298,801],{"class":40},[34,36300,32674],{"class":63},[34,36302,1250],{"class":87},[34,36304,8011],{"class":63},[34,36306,32681],{"class":40},[34,36308,32669],{"class":63},[34,36310,801],{"class":40},[34,36312,32688],{"class":63},[34,36314,1250],{"class":87},[34,36316,8011],{"class":63},[34,36318,32695],{"class":40},[34,36320,36321,36323,36325,36327,36329,36331],{"class":36,"line":2381},[34,36322,32700],{"class":40},[34,36324,153],{"class":87},[34,36326,32705],{"class":40},[34,36328,32188],{"class":5869},[34,36330,153],{"class":87},[34,36332,32193],{"class":40},[34,36334,36335,36337,36339,36341],{"class":36,"line":2386},[34,36336,32716],{"class":5869},[34,36338,153],{"class":87},[34,36340,32721],{"class":63},[34,36342,32117],{"class":40},[34,36344,36345,36347,36349,36351],{"class":36,"line":2403},[34,36346,32728],{"class":5869},[34,36348,153],{"class":87},[34,36350,32127],{"class":63},[34,36352,32117],{"class":40},[34,36354,36355],{"class":36,"line":2408},[34,36356,32739],{"class":205},[34,36358,36359,36361,36363,36365],{"class":36,"line":2413},[34,36360,32744],{"class":5869},[34,36362,153],{"class":87},[34,36364,1190],{"class":63},[34,36366,807],{"class":40},[34,36368,36369,36371,36373,36375,36377,36379],{"class":36,"line":2418},[34,36370,32755],{"class":40},[34,36372,153],{"class":87},[34,36374,32185],{"class":40},[34,36376,32188],{"class":5869},[34,36378,153],{"class":87},[34,36380,32766],{"class":40},[34,36382,36383,36385,36387,36389],{"class":36,"line":2432},[34,36384,32771],{"class":5869},[34,36386,153],{"class":87},[34,36388,32721],{"class":63},[34,36390,32117],{"class":40},[34,36392,36393,36395,36397,36399],{"class":36,"line":2437},[34,36394,32782],{"class":5869},[34,36396,153],{"class":87},[34,36398,32127],{"class":63},[34,36400,32117],{"class":40},[34,36402,36403,36405,36407,36409],{"class":36,"line":3230},[34,36404,32793],{"class":5869},[34,36406,153],{"class":87},[34,36408,1190],{"class":63},[34,36410,807],{"class":40},[34,36412,36413,36415],{"class":36,"line":3244},[34,36414,4743],{"class":87},[34,36416,32806],{"class":40},[34,36418,36419],{"class":36,"line":3252},[34,36420,3053],{"emptyLinePlaceholder":726},[34,36422,36423],{"class":36,"line":3257},[34,36424,32815],{"class":205},[34,36426,36427],{"class":36,"line":3263},[34,36428,32820],{"class":205},[34,36430,36431],{"class":36,"line":3269},[34,36432,3053],{"emptyLinePlaceholder":726},[34,36434,36435],{"class":36,"line":3274},[34,36436,32829],{"class":205},[34,36438,36439,36441,36443],{"class":36,"line":8601},[34,36440,32598],{"class":87},[34,36442,32836],{"class":149},[34,36444,32839],{"class":40},[34,36446,36447,36449,36451,36453,36455,36457,36459,36461,36463],{"class":36,"line":8625},[34,36448,31888],{"class":40},[34,36450,153],{"class":87},[34,36452,31102],{"class":40},[34,36454,31895],{"class":156},[34,36456,2358],{"class":87},[34,36458,31900],{"class":40},[34,36460,2355],{"class":87},[34,36462,32858],{"class":156},[34,36464,807],{"class":40},[34,36466,36467],{"class":36,"line":8630},[34,36468,3053],{"emptyLinePlaceholder":726},[34,36470,36471],{"class":36,"line":8636},[34,36472,3053],{"emptyLinePlaceholder":726},[34,36474,36475],{"class":36,"line":8663},[34,36476,32873],{"class":205},[34,36478,36479],{"class":36,"line":8668},[34,36480,32878],{"class":205},[34,36482,36483],{"class":36,"line":8674},[34,36484,32883],{"class":205},[34,36486,36487,36489,36491,36493,36495,36497,36499],{"class":36,"line":8686},[34,36488,32888],{"class":40},[34,36490,153],{"class":87},[34,36492,32893],{"class":40},[34,36494,32896],{"class":5869},[34,36496,153],{"class":87},[34,36498,32901],{"class":63},[34,36500,807],{"class":40},[34,36502,36503],{"class":36,"line":8698},[34,36504,3053],{"emptyLinePlaceholder":726},[34,36506,36507],{"class":36,"line":8710},[34,36508,32912],{"class":205},[34,36510,36511,36513,36515],{"class":36,"line":10369},[34,36512,32917],{"class":40},[34,36514,153],{"class":87},[34,36516,32922],{"class":40},[34,36518,36519],{"class":36,"line":10394},[34,36520,3053],{"emptyLinePlaceholder":726},[34,36522,36523],{"class":36,"line":10417},[34,36524,32931],{"class":205},[34,36526,36527,36529,36531],{"class":36,"line":10441},[34,36528,31940],{"class":40},[34,36530,153],{"class":87},[34,36532,32940],{"class":40},[34,36534,36535],{"class":36,"line":10446},[34,36536,32945],{"class":205},[34,36538,36539],{"class":36,"line":10451},[34,36540,32950],{"class":205},[34,36542,36543],{"class":36,"line":10456},[34,36544,32955],{"class":205},[34,36546,36547,36549,36551],{"class":36,"line":10465},[34,36548,32960],{"class":40},[34,36550,153],{"class":87},[34,36552,32965],{"class":40},[34,36554,36555],{"class":36,"line":10470},[34,36556,3053],{"emptyLinePlaceholder":726},[34,36558,36559],{"class":36,"line":10476},[34,36560,3053],{"emptyLinePlaceholder":726},[34,36562,36563],{"class":36,"line":10497},[34,36564,32978],{"class":205},[34,36566,36567],{"class":36,"line":10503},[34,36568,32983],{"class":205},[34,36570,36571,36573,36575],{"class":36,"line":10517},[34,36572,32988],{"class":40},[34,36574,153],{"class":87},[34,36576,32993],{"class":63},[34,36578,36579],{"class":36,"line":10523},[34,36580,32998],{"class":205},[34,36582,36583,36585,36587],{"class":36,"line":10550},[34,36584,33003],{"class":40},[34,36586,153],{"class":87},[34,36588,33008],{"class":40},[34,36590,36591],{"class":36,"line":10559},[34,36592,33013],{"class":205},[34,36594,36595,36597,36599],{"class":36,"line":10565},[34,36596,33018],{"class":40},[34,36598,153],{"class":87},[34,36600,33008],{"class":40},[34,36602,36603],{"class":36,"line":10573},[34,36604,33027],{"class":205},[34,36606,36607,36609,36611],{"class":36,"line":10578},[34,36608,33032],{"class":40},[34,36610,153],{"class":87},[34,36612,33008],{"class":40},[34,36614,36615],{"class":36,"line":17256},[34,36616,33041],{"class":205},[34,36618,36619,36621,36623],{"class":36,"line":17262},[34,36620,33046],{"class":40},[34,36622,153],{"class":87},[34,36624,33008],{"class":40},[34,36626,36627],{"class":36,"line":17285},[34,36628,3053],{"emptyLinePlaceholder":726},[34,36630,36631],{"class":36,"line":17291},[34,36632,33059],{"class":205},[34,36634,36635,36637,36639],{"class":36,"line":17314},[34,36636,33064],{"class":40},[34,36638,153],{"class":87},[34,36640,33069],{"class":40},[34,36642,36643],{"class":36,"line":17328},[34,36644,3053],{"emptyLinePlaceholder":726},[34,36646,36647],{"class":36,"line":17348},[34,36648,3053],{"emptyLinePlaceholder":726},[34,36650,36651],{"class":36,"line":17354},[34,36652,33082],{"class":205},[34,36654,36655,36657,36659,36661,36663],{"class":36,"line":17365},[34,36656,3854],{"class":87},[34,36658,33089],{"class":40},[34,36660,26695],{"class":87},[34,36662,33094],{"class":63},[34,36664,33097],{"class":40},[34,36666,36667,36669,36671,36673,36675,36677,36679,36681,36683,36685,36687],{"class":36,"line":17388},[34,36668,33102],{"class":63},[34,36670,801],{"class":40},[34,36672,33107],{"class":156},[34,36674,33110],{"class":63},[34,36676,1379],{"class":156},[34,36678,33110],{"class":63},[34,36680,1046],{"class":156},[34,36682,33119],{"class":40},[34,36684,1327],{"class":87},[34,36686,1013],{"class":63},[34,36688,31148],{"class":40},[34,36690,36691,36693,36695,36697,36699,36701],{"class":36,"line":17410},[34,36692,33102],{"class":63},[34,36694,801],{"class":40},[34,36696,33134],{"class":156},[34,36698,1250],{"class":87},[34,36700,1241],{"class":63},[34,36702,807],{"class":40},[34,36704,36705],{"class":36,"line":17415},[34,36706,3053],{"emptyLinePlaceholder":726},[34,36708,36709],{"class":36,"line":17421},[34,36710,33149],{"class":205},[34,36712,36713],{"class":36,"line":17435},[34,36714,33154],{"class":205},[34,36716,36717,36719,36721],{"class":36,"line":17448},[34,36718,33159],{"class":40},[34,36720,153],{"class":87},[34,36722,32993],{"class":63},[34,36724,36725],{"class":36,"line":17453},[34,36726,33168],{"class":205},[34,36728,36729,36731,36733],{"class":36,"line":17467},[34,36730,33173],{"class":40},[34,36732,153],{"class":87},[34,36734,3738],{"class":63},[34,36736,36737],{"class":36,"line":17472},[34,36738,33182],{"class":205},[34,36740,36741,36743,36745],{"class":36,"line":17478},[34,36742,33187],{"class":40},[34,36744,153],{"class":87},[34,36746,32993],{"class":63},[34,36748,36749],{"class":36,"line":17483},[34,36750,33196],{"class":205},[34,36752,36753,36755,36757],{"class":36,"line":17497},[34,36754,33201],{"class":40},[34,36756,153],{"class":87},[34,36758,3738],{"class":63},[34,36760,36761],{"class":36,"line":17502},[34,36762,33210],{"class":205},[34,36764,36765,36767,36769],{"class":36,"line":17507},[34,36766,33215],{"class":40},[34,36768,153],{"class":87},[34,36770,3738],{"class":63},[34,36772,36773],{"class":36,"line":17521},[34,36774,33224],{"class":205},[34,36776,36777,36779,36781],{"class":36,"line":17533},[34,36778,33229],{"class":40},[34,36780,153],{"class":87},[34,36782,3738],{"class":63},[34,36784,36785],{"class":36,"line":17538},[34,36786,33238],{"class":205},[34,36788,36789,36791,36793,36795,36797],{"class":36,"line":17551},[34,36790,4056],{"class":87},[34,36792,32252],{"class":40},[34,36794,26695],{"class":87},[34,36796,32257],{"class":63},[34,36798,33251],{"class":40},[34,36800,36801],{"class":36,"line":17556},[34,36802,33256],{"class":205},[34,36804,36805,36807,36809],{"class":36,"line":17561},[34,36806,33261],{"class":40},[34,36808,153],{"class":87},[34,36810,33266],{"class":40},[34,36812,36813],{"class":36,"line":17566},[34,36814,33271],{"class":205},[34,36816,36817,36819,36821],{"class":36,"line":17579},[34,36818,33276],{"class":40},[34,36820,153],{"class":87},[34,36822,33281],{"class":40},[34,36824,36825],{"class":36,"line":17584},[34,36826,33287],{"class":205},[34,36828,36829],{"class":36,"line":33284},[34,36830,33293],{"class":40},[34,36832,36833],{"class":36,"line":33290},[34,36834,33299],{"class":205},[34,36836,36837],{"class":36,"line":33296},[34,36838,33305],{"class":205},[34,36840,36841,36843,36845],{"class":36,"line":33302},[34,36842,33311],{"class":40},[34,36844,153],{"class":87},[34,36846,33316],{"class":40},[34,36848,36849],{"class":36,"line":33308},[34,36850,33322],{"class":205},[34,36852,36853,36855,36857,36859,36861,36863,36865],{"class":36,"line":33319},[34,36854,33328],{"class":40},[34,36856,153],{"class":87},[34,36858,33333],{"class":40},[34,36860,33336],{"class":5869},[34,36862,153],{"class":87},[34,36864,1013],{"class":63},[34,36866,807],{"class":40},[34,36868,36869],{"class":36,"line":33325},[34,36870,33348],{"class":205},[34,36872,36873,36875,36877],{"class":36,"line":33345},[34,36874,33354],{"class":40},[34,36876,153],{"class":87},[34,36878,33359],{"class":40},[34,36880,36881],{"class":36,"line":33351},[34,36882,33365],{"class":205},[34,36884,36885],{"class":36,"line":33362},[34,36886,33371],{"class":40},[34,36888,36889],{"class":36,"line":33368},[34,36890,33377],{"class":205},[34,36892,36893],{"class":36,"line":33374},[34,36894,33383],{"class":40},[34,36896,36897],{"class":36,"line":33380},[34,36898,33389],{"class":205},[34,36900,36901],{"class":36,"line":33386},[34,36902,33395],{"class":40},[34,36904,36905],{"class":36,"line":33392},[34,36906,33401],{"class":205},[34,36908,36909,36911,36913,36915,36917,36919,36921],{"class":36,"line":33398},[34,36910,33407],{"class":40},[34,36912,10130],{"class":87},[34,36914,33412],{"class":40},[34,36916,1250],{"class":87},[34,36918,33417],{"class":40},[34,36920,987],{"class":63},[34,36922,807],{"class":40},[34,36924,36925],{"class":36,"line":33404},[34,36926,33427],{"class":205},[34,36928,36929,36931,36933,36935,36937],{"class":36,"line":33424},[34,36930,33433],{"class":40},[34,36932,10130],{"class":87},[34,36934,33438],{"class":40},[34,36936,3602],{"class":87},[34,36938,33443],{"class":40},[34,36940,36941],{"class":36,"line":33430},[34,36942,33449],{"class":205},[34,36944,36945,36947,36949,36951,36953],{"class":36,"line":33446},[34,36946,33455],{"class":40},[34,36948,10130],{"class":87},[34,36950,33417],{"class":40},[34,36952,987],{"class":63},[34,36954,807],{"class":40},[34,36956,36957],{"class":36,"line":33452},[34,36958,33469],{"class":205},[34,36960,36961,36963,36965,36967,36969],{"class":36,"line":33466},[34,36962,4056],{"class":87},[34,36964,33477],{"class":40},[34,36966,26695],{"class":87},[34,36968,32257],{"class":63},[34,36970,33484],{"class":40},[34,36972,36973],{"class":36,"line":33472},[34,36974,33490],{"class":205},[34,36976,36977,36979,36981],{"class":36,"line":33487},[34,36978,33261],{"class":40},[34,36980,153],{"class":87},[34,36982,33266],{"class":40},[34,36984,36985],{"class":36,"line":33493},[34,36986,33505],{"class":205},[34,36988,36989,36991,36993],{"class":36,"line":33502},[34,36990,33276],{"class":40},[34,36992,153],{"class":87},[34,36994,33281],{"class":40},[34,36996,36997],{"class":36,"line":33508},[34,36998,33520],{"class":205},[34,37000,37001],{"class":36,"line":33517},[34,37002,33526],{"class":40},[34,37004,37005],{"class":36,"line":33523},[34,37006,37007],{"class":205},"            # 验证时不计算梯度以节省内存\u002F计算\n",[34,37009,37010,37012],{"class":36,"line":33529},[34,37011,33532],{"class":87},[34,37013,33535],{"class":40},[34,37015,37016],{"class":36,"line":33538},[34,37017,33541],{"class":205},[34,37019,37020,37023,37025],{"class":36,"line":33544},[34,37021,37022],{"class":40},"                output",[34,37024,153],{"class":87},[34,37026,33316],{"class":40},[34,37028,37029],{"class":36,"line":33555},[34,37030,33558],{"class":205},[34,37032,37033,37036,37038,37040,37042,37044,37046],{"class":36,"line":33561},[34,37034,37035],{"class":40},"                pre_lab",[34,37037,153],{"class":87},[34,37039,33333],{"class":40},[34,37041,33336],{"class":5869},[34,37043,153],{"class":87},[34,37045,1013],{"class":63},[34,37047,807],{"class":40},[34,37049,37050],{"class":36,"line":33580},[34,37051,33583],{"class":205},[34,37053,37054,37057,37059],{"class":36,"line":33586},[34,37055,37056],{"class":40},"                val_batch_loss",[34,37058,153],{"class":87},[34,37060,33359],{"class":40},[34,37062,37063],{"class":36,"line":33597},[34,37064,33600],{"class":205},[34,37066,37067,37070,37072,37075,37077,37079,37081],{"class":36,"line":33603},[34,37068,37069],{"class":40},"                val_loss",[34,37071,10130],{"class":87},[34,37073,37074],{"class":40},"val_batch_loss.item()",[34,37076,1250],{"class":87},[34,37078,33417],{"class":40},[34,37080,987],{"class":63},[34,37082,807],{"class":40},[34,37084,37085,37088,37090,37092,37094],{"class":36,"line":33623},[34,37086,37087],{"class":40},"                val_corrects",[34,37089,10130],{"class":87},[34,37091,33438],{"class":40},[34,37093,3602],{"class":87},[34,37095,33443],{"class":40},[34,37097,37098],{"class":36,"line":33639},[34,37099,37100],{"class":205},"            # 当前用于验证的样本数量\n",[34,37102,37103,37106,37108,37110,37112],{"class":36,"line":33645},[34,37104,37105],{"class":40},"            val_num",[34,37107,10130],{"class":87},[34,37109,33417],{"class":40},[34,37111,987],{"class":63},[34,37113,807],{"class":40},[34,37115,37116],{"class":36,"line":33659},[34,37117,33662],{"class":205},[34,37119,37120],{"class":36,"line":33665},[34,37121,33668],{"class":205},[34,37123,37124,37126,37128],{"class":36,"line":33671},[34,37125,33674],{"class":40},[34,37127,1379],{"class":87},[34,37129,33679],{"class":40},[34,37131,37132],{"class":36,"line":33682},[34,37133,33685],{"class":205},[34,37135,37136],{"class":36,"line":33688},[34,37137,33691],{"class":205},[34,37139,37140,37142,37144],{"class":36,"line":33694},[34,37141,33697],{"class":40},[34,37143,1379],{"class":87},[34,37145,33679],{"class":40},[34,37147,37148],{"class":36,"line":33704},[34,37149,33707],{"class":205},[34,37151,37152,37154,37156],{"class":36,"line":33710},[34,37153,33713],{"class":40},[34,37155,1379],{"class":87},[34,37157,33718],{"class":40},[34,37159,37160],{"class":36,"line":33721},[34,37161,33724],{"class":205},[34,37163,37164,37166,37168],{"class":36,"line":33727},[34,37165,33730],{"class":40},[34,37167,1379],{"class":87},[34,37169,33718],{"class":40},[34,37171,37172],{"class":36,"line":33737},[34,37173,3053],{"emptyLinePlaceholder":726},[34,37175,37176],{"class":36,"line":33742},[34,37177,33745],{"class":205},[34,37179,37180,37182,37184,37186,37188,37190,37192,37194,37196,37198,37200,37202,37204,37206,37208,37210,37212,37214,37216,37218],{"class":36,"line":33748},[34,37181,33102],{"class":63},[34,37183,801],{"class":40},[34,37185,4245],{"class":156},[34,37187,33110],{"class":63},[34,37189,33759],{"class":156},[34,37191,1690],{"class":63},[34,37193,33764],{"class":87},[34,37195,1739],{"class":63},[34,37197,33769],{"class":156},[34,37199,1690],{"class":63},[34,37201,33764],{"class":87},[34,37203,1739],{"class":63},[34,37205,4245],{"class":156},[34,37207,33780],{"class":40},[34,37209,1327],{"class":87},[34,37211,1013],{"class":63},[34,37213,33787],{"class":40},[34,37215,1327],{"class":87},[34,37217,1013],{"class":63},[34,37219,33794],{"class":40},[34,37221,37222,37224,37226,37228,37230,37232,37234,37236,37238,37240,37242,37244,37246,37248,37250,37252,37254,37256,37258,37260],{"class":36,"line":33797},[34,37223,33102],{"class":63},[34,37225,801],{"class":40},[34,37227,4245],{"class":156},[34,37229,33110],{"class":63},[34,37231,33808],{"class":156},[34,37233,1690],{"class":63},[34,37235,33764],{"class":87},[34,37237,1739],{"class":63},[34,37239,33817],{"class":156},[34,37241,1690],{"class":63},[34,37243,33764],{"class":87},[34,37245,1739],{"class":63},[34,37247,4245],{"class":156},[34,37249,33828],{"class":40},[34,37251,1327],{"class":87},[34,37253,1013],{"class":63},[34,37255,33835],{"class":40},[34,37257,1327],{"class":87},[34,37259,1013],{"class":63},[34,37261,33794],{"class":40},[34,37263,37264],{"class":36,"line":33844},[34,37265,3053],{"emptyLinePlaceholder":726},[34,37267,37268],{"class":36,"line":33849},[34,37269,33852],{"class":205},[34,37271,37272,37274,37276,37278,37280,37282,37284],{"class":36,"line":33855},[34,37273,3150],{"class":87},[34,37275,33860],{"class":40},[34,37277,1327],{"class":87},[34,37279,1013],{"class":63},[34,37281,1733],{"class":40},[34,37283,1753],{"class":87},[34,37285,33871],{"class":40},[34,37287,37288],{"class":36,"line":33874},[34,37289,33877],{"class":205},[34,37291,37292,37294,37296,37298,37300,37302,37304],{"class":36,"line":33880},[34,37293,33883],{"class":40},[34,37295,840],{"class":63},[34,37297,153],{"class":87},[34,37299,33890],{"class":40},[34,37301,1327],{"class":87},[34,37303,1013],{"class":63},[34,37305,33897],{"class":40},[34,37307,37308],{"class":36,"line":33900},[34,37309,33903],{"class":205},[34,37311,37312],{"class":36,"line":33906},[34,37313,33909],{"class":205},[34,37315,37316,37318,37320],{"class":36,"line":33912},[34,37317,33915],{"class":40},[34,37319,153],{"class":87},[34,37321,32965],{"class":40},[34,37323,37324],{"class":36,"line":33922},[34,37325,3053],{"emptyLinePlaceholder":726},[34,37327,37328],{"class":36,"line":33927},[34,37329,33930],{"class":205},[34,37331,37332,37334,37336,37338,37340],{"class":36,"line":33933},[34,37333,33936],{"class":40},[34,37335,153],{"class":87},[34,37337,33941],{"class":40},[34,37339,1327],{"class":87},[34,37341,33946],{"class":40},[34,37343,37344,37346,37348,37350,37352,37354,37356,37358,37360,37362,37364,37366,37368,37370,37372,37374,37376,37378],{"class":36,"line":33949},[34,37345,33102],{"class":63},[34,37347,801],{"class":40},[34,37349,33956],{"class":156},[34,37351,1690],{"class":63},[34,37353,33961],{"class":87},[34,37355,1739],{"class":63},[34,37357,1339],{"class":156},[34,37359,1690],{"class":63},[34,37361,33961],{"class":87},[34,37363,1739],{"class":63},[34,37365,33974],{"class":156},[34,37367,33977],{"class":40},[34,37369,33980],{"class":87},[34,37371,1701],{"class":63},[34,37373,33985],{"class":40},[34,37375,1123],{"class":87},[34,37377,1701],{"class":63},[34,37379,31148],{"class":40},[34,37381,37382],{"class":36,"line":33994},[34,37383,37384],{"class":205},"    # 选择最优参数并保存\n",[34,37386,37387],{"class":36,"line":34000},[34,37388,37389],{"class":205},"    # 保存最佳模型权重字典\n",[34,37391,37392,37395,37397],{"class":36,"line":34006},[34,37393,37394],{"class":40},"    torch.save(best_model_wts,",[34,37396,34018],{"class":156},[34,37398,807],{"class":40},[34,37400,37401],{"class":36,"line":34012},[34,37402,34038],{"class":205},[34,37404,37405,37407,37409,37411,37413,37415],{"class":36,"line":34023},[34,37406,34044],{"class":40},[34,37408,153],{"class":87},[34,37410,34049],{"class":40},[34,37412,34052],{"class":5869},[34,37414,153],{"class":87},[34,37416,2206],{"class":40},[34,37418,37419,37421,37423,37425],{"class":36,"line":34029},[34,37420,34062],{"class":156},[34,37422,1653],{"class":40},[34,37424,34067],{"class":63},[34,37426,34070],{"class":40},[34,37428,37429,37431],{"class":36,"line":34035},[34,37430,34076],{"class":156},[34,37432,34079],{"class":40},[34,37434,37435,37437],{"class":36,"line":34041},[34,37436,34085],{"class":156},[34,37438,34088],{"class":40},[34,37440,37441,37443],{"class":36,"line":34059},[34,37442,34094],{"class":156},[34,37444,34097],{"class":40},[34,37446,37447,37449],{"class":36,"line":34073},[34,37448,34103],{"class":156},[34,37450,34106],{"class":40},[34,37452,37453],{"class":36,"line":34082},[34,37454,34112],{"class":40},[34,37456,37457],{"class":36,"line":34091},[34,37458,34118],{"class":205},[34,37460,37461,37463],{"class":36,"line":34100},[34,37462,4743],{"class":87},[34,37464,34126],{"class":40},[34,37466,37467],{"class":36,"line":34109},[34,37468,3053],{"emptyLinePlaceholder":726},[34,37470,37471],{"class":36,"line":34115},[34,37472,34137],{"class":205},[34,37474,37475,37477,37479],{"class":36,"line":34121},[34,37476,32598],{"class":87},[34,37478,34145],{"class":149},[34,37480,34148],{"class":40},[34,37482,37483],{"class":36,"line":34129},[34,37484,34154],{"class":205},[34,37486,37487,37489,37491,37493,37495,37497,37499,37501],{"class":36,"line":34134},[34,37488,34160],{"class":40},[34,37490,32344],{"class":5869},[34,37492,153],{"class":87},[34,37494,801],{"class":40},[34,37496,1293],{"class":63},[34,37498,1173],{"class":40},[34,37500,1088],{"class":63},[34,37502,31148],{"class":40},[34,37504,37505],{"class":36,"line":34140},[34,37506,34180],{"class":205},[34,37508,37509],{"class":36,"line":34151},[34,37510,34186],{"class":205},[34,37512,37513],{"class":36,"line":34157},[34,37514,34192],{"class":205},[34,37516,37517,37519,37521,37523,37525,37527,37529],{"class":36,"line":34177},[34,37518,32378],{"class":40},[34,37520,1013],{"class":63},[34,37522,1173],{"class":40},[34,37524,875],{"class":63},[34,37526,1173],{"class":40},[34,37528,1013],{"class":63},[34,37530,807],{"class":40},[34,37532,37533],{"class":36,"line":34183},[34,37534,34215],{"class":205},[34,37536,37537],{"class":36,"line":34189},[34,37538,34221],{"class":205},[34,37540,37541],{"class":36,"line":34195},[34,37542,34227],{"class":205},[34,37544,37545],{"class":36,"line":34212},[34,37546,34233],{"class":205},[34,37548,37549],{"class":36,"line":34218},[34,37550,34239],{"class":205},[34,37552,37553,37555,37557,37559,37561,37563,37565,37567,37569],{"class":36,"line":34224},[34,37554,34245],{"class":40},[34,37556,34248],{"class":156},[34,37558,34251],{"class":40},[34,37560,34254],{"class":156},[34,37562,1173],{"class":40},[34,37564,34259],{"class":5869},[34,37566,153],{"class":87},[34,37568,34264],{"class":156},[34,37570,807],{"class":40},[34,37572,37573,37575,37577,37579,37581,37583,37585,37587,37589],{"class":36,"line":34230},[34,37574,34245],{"class":40},[34,37576,34248],{"class":156},[34,37578,34276],{"class":40},[34,37580,34279],{"class":156},[34,37582,1173],{"class":40},[34,37584,34259],{"class":5869},[34,37586,153],{"class":87},[34,37588,34288],{"class":156},[34,37590,807],{"class":40},[34,37592,37593],{"class":36,"line":34236},[34,37594,34296],{"class":205},[34,37596,37597],{"class":36,"line":34242},[34,37598,34302],{"class":40},[34,37600,37601],{"class":36,"line":34269},[34,37602,34308],{"class":205},[34,37604,37605,37607,37609],{"class":36,"line":34293},[34,37606,34314],{"class":40},[34,37608,34317],{"class":156},[34,37610,807],{"class":40},[34,37612,37613,37615,37617],{"class":36,"line":34299},[34,37614,34325],{"class":40},[34,37616,34328],{"class":156},[34,37618,807],{"class":40},[34,37620,37621],{"class":36,"line":34305},[34,37622,34336],{"class":205},[34,37624,37625,37627,37629,37631,37633,37635,37637],{"class":36,"line":34311},[34,37626,32378],{"class":40},[34,37628,1013],{"class":63},[34,37630,1173],{"class":40},[34,37632,875],{"class":63},[34,37634,1173],{"class":40},[34,37636,875],{"class":63},[34,37638,807],{"class":40},[34,37640,37641,37643,37645,37647,37649,37651,37653,37655,37657],{"class":36,"line":34322},[34,37642,34245],{"class":40},[34,37644,34248],{"class":156},[34,37646,34363],{"class":40},[34,37648,34254],{"class":156},[34,37650,1173],{"class":40},[34,37652,34259],{"class":5869},[34,37654,153],{"class":87},[34,37656,34374],{"class":156},[34,37658,807],{"class":40},[34,37660,37661,37663,37665,37667,37669,37671,37673,37675,37677],{"class":36,"line":34333},[34,37662,34245],{"class":40},[34,37664,34248],{"class":156},[34,37666,34386],{"class":40},[34,37668,34279],{"class":156},[34,37670,1173],{"class":40},[34,37672,34259],{"class":5869},[34,37674,153],{"class":87},[34,37676,34397],{"class":156},[34,37678,807],{"class":40},[34,37680,37681],{"class":36,"line":34339},[34,37682,34405],{"class":205},[34,37684,37685],{"class":36,"line":34356},[34,37686,34302],{"class":40},[34,37688,37689,37691,37693],{"class":36,"line":34379},[34,37690,34314],{"class":40},[34,37692,34248],{"class":156},[34,37694,807],{"class":40},[34,37696,37697,37699,37701],{"class":36,"line":34402},[34,37698,34325],{"class":40},[34,37700,34427],{"class":156},[34,37702,807],{"class":40},[34,37704,37705],{"class":36,"line":34408},[34,37706,34435],{"class":40},[34,37708,37709],{"class":36,"line":34413},[34,37710,3053],{"emptyLinePlaceholder":726},[34,37712,37713],{"class":36,"line":34422},[34,37714,34446],{"class":205},[34,37716,37717,37719,37721,37723,37725],{"class":36,"line":34432},[34,37718,2191],{"class":87},[34,37720,31871],{"class":63},[34,37722,3602],{"class":87},[34,37724,31876],{"class":156},[34,37726,4392],{"class":40},[34,37728,37729],{"class":36,"line":34438},[34,37730,34465],{"class":205},[34,37732,37733,37736,37738],{"class":36,"line":34443},[34,37734,37735],{"class":40},"    AlexNet",[34,37737,153],{"class":87},[34,37739,37740],{"class":40},"AlexNet()\n",[34,37742,37743,37745,37747],{"class":36,"line":34449},[34,37744,34482],{"class":40},[34,37746,153],{"class":87},[34,37748,34487],{"class":40},[34,37750,37751,37753,37755,37758,37760,37762,37764],{"class":36,"line":34462},[34,37752,34044],{"class":40},[34,37754,153],{"class":87},[34,37756,37757],{"class":40},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[34,37759,34500],{"class":5869},[34,37761,153],{"class":87},[34,37763,1495],{"class":63},[34,37765,807],{"class":40},[34,37767,37768],{"class":36,"line":34468},[34,37769,34512],{"class":40},[752,37771,37772],{"start":60},[755,37773,34525],{},[24,37775,37777],{"className":31029,"code":37776,"language":31031,"meta":29,"style":29},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[31,37778,37779,37785,37795,37805,37815,37819,37829,37839,37850,37854,37858,37862,37870,37886,37896,37912,37922,37936,37940,37950,37960,37970,37976,37980,37984,37992,37996,38012,38020,38024,38028,38036,38044,38048,38052,38056,38060,38066,38070,38080,38088,38096,38100,38104,38108,38116,38120,38136,38140,38144,38148,38160,38164,38176,38180,38184,38196,38200,38210,38214,38218,38230,38234,38242,38246,38250,38258,38262,38270,38274,38278,38282,38286,38290,38306,38314,38318,38322,38370,38376,38380,38390,38398,38406,38410,38414,38418,38422,38430,38434,38450,38454,38462,38470],{"__ignoreMap":29},[34,37780,37781,37783],{"class":36,"line":37},[34,37782,31043],{"class":87},[34,37784,31046],{"class":40},[34,37786,37787,37789,37791,37793],{"class":36,"line":51},[34,37788,31043],{"class":87},[34,37790,32066],{"class":40},[34,37792,32034],{"class":87},[34,37794,32071],{"class":40},[34,37796,37797,37799,37801,37803],{"class":36,"line":60},[34,37798,31388],{"class":87},[34,37800,34553],{"class":40},[34,37802,31043],{"class":87},[34,37804,34558],{"class":40},[34,37806,37807,37809,37811,37813],{"class":36,"line":76},[34,37808,31388],{"class":87},[34,37810,32049],{"class":40},[34,37812,31043],{"class":87},[34,37814,32054],{"class":40},[34,37816,37817],{"class":36,"line":93},[34,37818,34573],{"class":205},[34,37820,37821,37823,37825,37827],{"class":36,"line":99},[34,37822,31388],{"class":87},[34,37824,32019],{"class":40},[34,37826,31043],{"class":87},[34,37828,32024],{"class":40},[34,37830,37831,37833,37835,37837],{"class":36,"line":353},[34,37832,31388],{"class":87},[34,37834,32565],{"class":40},[34,37836,31043],{"class":87},[34,37838,36208],{"class":40},[34,37840,37841,37843,37846,37848],{"class":36,"line":359},[34,37842,31388],{"class":87},[34,37844,37845],{"class":40}," 练习.AlexNet.model ",[34,37847,31043],{"class":87},[34,37849,36208],{"class":40},[34,37851,37852],{"class":36,"line":579},[34,37853,3053],{"emptyLinePlaceholder":726},[34,37855,37856],{"class":36,"line":589},[34,37857,3053],{"emptyLinePlaceholder":726},[34,37859,37860],{"class":36,"line":601},[34,37861,34602],{"class":205},[34,37863,37864,37866,37868],{"class":36,"line":613},[34,37865,32598],{"class":87},[34,37867,34609],{"class":149},[34,37869,32604],{"class":40},[34,37871,37872,37874,37876,37878,37880,37882,37884],{"class":36,"line":618},[34,37873,34616],{"class":40},[34,37875,153],{"class":87},[34,37877,32106],{"class":40},[34,37879,32109],{"class":5869},[34,37881,153],{"class":87},[34,37883,32114],{"class":156},[34,37885,32117],{"class":40},[34,37887,37888,37890,37892,37894],{"class":36,"line":628},[34,37889,34633],{"class":5869},[34,37891,153],{"class":87},[34,37893,34638],{"class":63},[34,37895,32117],{"class":40},[34,37897,37898,37900,37902,37904,37906,37908,37910],{"class":36,"line":640},[34,37899,34645],{"class":5869},[34,37901,153],{"class":87},[34,37903,32144],{"class":40},[34,37905,32147],{"class":5869},[34,37907,153],{"class":87},[34,37909,36100],{"class":63},[34,37911,32155],{"class":40},[34,37913,37914,37916,37918,37920],{"class":36,"line":2301},[34,37915,34662],{"class":5869},[34,37917,153],{"class":87},[34,37919,32127],{"class":63},[34,37921,807],{"class":40},[34,37923,37924,37926,37928,37930,37932,37934],{"class":36,"line":2307},[34,37925,34673],{"class":40},[34,37927,153],{"class":87},[34,37929,32185],{"class":40},[34,37931,32188],{"class":5869},[34,37933,153],{"class":87},[34,37935,34684],{"class":40},[34,37937,37938],{"class":36,"line":2328},[34,37939,34689],{"class":205},[34,37941,37942,37944,37946,37948],{"class":36,"line":2333},[34,37943,34694],{"class":5869},[34,37945,153],{"class":87},[34,37947,1013],{"class":63},[34,37949,32117],{"class":40},[34,37951,37952,37954,37956,37958],{"class":36,"line":2347},[34,37953,34705],{"class":5869},[34,37955,153],{"class":87},[34,37957,32127],{"class":63},[34,37959,32117],{"class":40},[34,37961,37962,37964,37966,37968],{"class":36,"line":2352},[34,37963,34716],{"class":5869},[34,37965,153],{"class":87},[34,37967,987],{"class":63},[34,37969,807],{"class":40},[34,37971,37972,37974],{"class":36,"line":2381},[34,37973,4743],{"class":87},[34,37975,34729],{"class":40},[34,37977,37978],{"class":36,"line":2386},[34,37979,3053],{"emptyLinePlaceholder":726},[34,37981,37982],{"class":36,"line":2403},[34,37983,34738],{"class":205},[34,37985,37986,37988,37990],{"class":36,"line":2408},[34,37987,32598],{"class":87},[34,37989,34745],{"class":149},[34,37991,34748],{"class":40},[34,37993,37994],{"class":36,"line":2413},[34,37995,34753],{"class":205},[34,37997,37998,38000,38002,38004,38006,38008,38010],{"class":36,"line":2418},[34,37999,31888],{"class":40},[34,38001,153],{"class":87},[34,38003,31895],{"class":156},[34,38005,2358],{"class":87},[34,38007,31900],{"class":40},[34,38009,2355],{"class":87},[34,38011,34770],{"class":156},[34,38013,38014,38016,38018],{"class":36,"line":2432},[34,38015,31940],{"class":40},[34,38017,153],{"class":87},[34,38019,32940],{"class":40},[34,38021,38022],{"class":36,"line":2437},[34,38023,3053],{"emptyLinePlaceholder":726},[34,38025,38026],{"class":36,"line":3230},[34,38027,34787],{"class":205},[34,38029,38030,38032,38034],{"class":36,"line":3244},[34,38031,34792],{"class":40},[34,38033,153],{"class":87},[34,38035,32993],{"class":63},[34,38037,38038,38040,38042],{"class":36,"line":3252},[34,38039,34801],{"class":40},[34,38041,153],{"class":87},[34,38043,3738],{"class":63},[34,38045,38046],{"class":36,"line":3257},[34,38047,3053],{"emptyLinePlaceholder":726},[34,38049,38050],{"class":36,"line":3263},[34,38051,34814],{"class":205},[34,38053,38054],{"class":36,"line":3269},[34,38055,34819],{"class":205},[34,38057,38058],{"class":36,"line":3274},[34,38059,34824],{"class":205},[34,38061,38062,38064],{"class":36,"line":8601},[34,38063,34829],{"class":87},[34,38065,33535],{"class":40},[34,38067,38068],{"class":36,"line":8625},[34,38069,34836],{"class":205},[34,38071,38072,38074,38076,38078],{"class":36,"line":8630},[34,38073,4056],{"class":87},[34,38075,34843],{"class":40},[34,38077,26695],{"class":87},[34,38079,34848],{"class":40},[34,38081,38082,38084,38086],{"class":36,"line":8636},[34,38083,34853],{"class":40},[34,38085,153],{"class":87},[34,38087,34858],{"class":40},[34,38089,38090,38092,38094],{"class":36,"line":8663},[34,38091,34863],{"class":40},[34,38093,153],{"class":87},[34,38095,34868],{"class":40},[34,38097,38098],{"class":36,"line":8668},[34,38099,34873],{"class":205},[34,38101,38102],{"class":36,"line":8674},[34,38103,33526],{"class":40},[34,38105,38106],{"class":36,"line":8686},[34,38107,34882],{"class":205},[34,38109,38110,38112,38114],{"class":36,"line":8698},[34,38111,33311],{"class":40},[34,38113,153],{"class":87},[34,38115,34891],{"class":40},[34,38117,38118],{"class":36,"line":8710},[34,38119,34896],{"class":205},[34,38121,38122,38124,38126,38128,38130,38132,38134],{"class":36,"line":10369},[34,38123,33328],{"class":40},[34,38125,153],{"class":87},[34,38127,33333],{"class":40},[34,38129,33336],{"class":5869},[34,38131,153],{"class":87},[34,38133,1013],{"class":63},[34,38135,807],{"class":40},[34,38137,38138],{"class":36,"line":10394},[34,38139,34917],{"class":205},[34,38141,38142],{"class":36,"line":10417},[34,38143,34922],{"class":205},[34,38145,38146],{"class":36,"line":10441},[34,38147,34927],{"class":205},[34,38149,38150,38152,38154,38156,38158],{"class":36,"line":10446},[34,38151,34932],{"class":40},[34,38153,10130],{"class":87},[34,38155,33438],{"class":40},[34,38157,3602],{"class":87},[34,38159,34941],{"class":40},[34,38161,38162],{"class":36,"line":10451},[34,38163,34946],{"class":205},[34,38165,38166,38168,38170,38172,38174],{"class":36,"line":10456},[34,38167,34951],{"class":40},[34,38169,10130],{"class":87},[34,38171,34956],{"class":40},[34,38173,987],{"class":63},[34,38175,807],{"class":40},[34,38177,38178],{"class":36,"line":10465},[34,38179,3053],{"emptyLinePlaceholder":726},[34,38181,38182],{"class":36,"line":10470},[34,38183,34969],{"class":205},[34,38185,38186,38188,38190,38192,38194],{"class":36,"line":10476},[34,38187,34974],{"class":40},[34,38189,153],{"class":87},[34,38191,34979],{"class":40},[34,38193,1379],{"class":87},[34,38195,34984],{"class":40},[34,38197,38198],{"class":36,"line":10497},[34,38199,34989],{"class":205},[34,38201,38202,38204,38206,38208],{"class":36,"line":10503},[34,38203,33102],{"class":63},[34,38205,801],{"class":40},[34,38207,34998],{"class":156},[34,38209,35001],{"class":40},[34,38211,38212],{"class":36,"line":10517},[34,38213,3053],{"emptyLinePlaceholder":726},[34,38215,38216],{"class":36,"line":10523},[34,38217,35010],{"class":205},[34,38219,38220,38222,38224,38226,38228],{"class":36,"line":10550},[34,38221,2191],{"class":87},[34,38223,31871],{"class":63},[34,38225,3602],{"class":87},[34,38227,31876],{"class":156},[34,38229,4392],{"class":40},[34,38231,38232],{"class":36,"line":10559},[34,38233,35027],{"class":205},[34,38235,38236,38238,38240],{"class":36,"line":10565},[34,38237,31940],{"class":40},[34,38239,153],{"class":87},[34,38241,37740],{"class":40},[34,38243,38244],{"class":36,"line":10573},[34,38245,35040],{"class":205},[34,38247,38248],{"class":36,"line":10578},[34,38249,35045],{"class":205},[34,38251,38252,38254,38256],{"class":36,"line":17256},[34,38253,35050],{"class":40},[34,38255,35053],{"class":156},[34,38257,31148],{"class":40},[34,38259,38260],{"class":36,"line":17262},[34,38261,35060],{"class":205},[34,38263,38264,38266,38268],{"class":36,"line":17285},[34,38265,34673],{"class":40},[34,38267,153],{"class":87},[34,38269,35069],{"class":40},[34,38271,38272],{"class":36,"line":17291},[34,38273,35074],{"class":205},[34,38275,38276],{"class":36,"line":17314},[34,38277,35079],{"class":40},[34,38279,38280],{"class":36,"line":17328},[34,38281,3053],{"emptyLinePlaceholder":726},[34,38283,38284],{"class":36,"line":17348},[34,38285,35088],{"class":205},[34,38287,38288],{"class":36,"line":17354},[34,38289,35093],{"class":205},[34,38291,38292,38294,38296,38298,38300,38302,38304],{"class":36,"line":17365},[34,38293,31888],{"class":40},[34,38295,153],{"class":87},[34,38297,31895],{"class":156},[34,38299,2358],{"class":87},[34,38301,31900],{"class":40},[34,38303,2355],{"class":87},[34,38305,34770],{"class":156},[34,38307,38308,38310,38312],{"class":36,"line":17388},[34,38309,31940],{"class":40},[34,38311,153],{"class":87},[34,38313,32940],{"class":40},[34,38315,38316],{"class":36,"line":17410},[34,38317,35122],{"class":205},[34,38319,38320],{"class":36,"line":17415},[34,38321,35127],{"class":205},[34,38323,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368],{"class":36,"line":17421},[34,38325,35132],{"class":40},[34,38327,153],{"class":87},[34,38329,1684],{"class":40},[34,38331,35139],{"class":156},[34,38333,1173],{"class":40},[34,38335,35144],{"class":156},[34,38337,1173],{"class":40},[34,38339,35149],{"class":156},[34,38341,1173],{"class":40},[34,38343,35154],{"class":156},[34,38345,1173],{"class":40},[34,38347,35159],{"class":156},[34,38349,1173],{"class":40},[34,38351,35164],{"class":156},[34,38353,1173],{"class":40},[34,38355,35169],{"class":156},[34,38357,1173],{"class":40},[34,38359,35174],{"class":156},[34,38361,1173],{"class":40},[34,38363,35179],{"class":156},[34,38365,1173],{"class":40},[34,38367,35184],{"class":156},[34,38369,33897],{"class":40},[34,38371,38372,38374],{"class":36,"line":17435},[34,38373,34829],{"class":87},[34,38375,33535],{"class":40},[34,38377,38378],{"class":36,"line":17448},[34,38379,35197],{"class":205},[34,38381,38382,38384,38386,38388],{"class":36,"line":17453},[34,38383,4056],{"class":87},[34,38385,35204],{"class":40},[34,38387,26695],{"class":87},[34,38389,34848],{"class":40},[34,38391,38392,38394,38396],{"class":36,"line":17467},[34,38393,33261],{"class":40},[34,38395,153],{"class":87},[34,38397,33266],{"class":40},[34,38399,38400,38402,38404],{"class":36,"line":17472},[34,38401,33276],{"class":40},[34,38403,153],{"class":87},[34,38405,33281],{"class":40},[34,38407,38408],{"class":36,"line":17478},[34,38409,3053],{"emptyLinePlaceholder":726},[34,38411,38412],{"class":36,"line":17483},[34,38413,35233],{"class":205},[34,38415,38416],{"class":36,"line":17497},[34,38417,33526],{"class":40},[34,38419,38420],{"class":36,"line":17502},[34,38421,35242],{"class":205},[34,38423,38424,38426,38428],{"class":36,"line":17507},[34,38425,33311],{"class":40},[34,38427,153],{"class":87},[34,38429,33316],{"class":40},[34,38431,38432],{"class":36,"line":17521},[34,38433,35255],{"class":205},[34,38435,38436,38438,38440,38442,38444,38446,38448],{"class":36,"line":17533},[34,38437,33328],{"class":40},[34,38439,153],{"class":87},[34,38441,33333],{"class":40},[34,38443,33336],{"class":5869},[34,38445,153],{"class":87},[34,38447,1013],{"class":63},[34,38449,807],{"class":40},[34,38451,38452],{"class":36,"line":17538},[34,38453,35276],{"class":205},[34,38455,38456,38458,38460],{"class":36,"line":17551},[34,38457,35281],{"class":40},[34,38459,153],{"class":87},[34,38461,35286],{"class":40},[34,38463,38464,38466,38468],{"class":36,"line":17556},[34,38465,35291],{"class":40},[34,38467,153],{"class":87},[34,38469,35296],{"class":40},[34,38471,38472,38474,38476,38478,38480,38482,38484,38486],{"class":36,"line":17561},[34,38473,35301],{"class":63},[34,38475,801],{"class":40},[34,38477,35306],{"class":156},[34,38479,35309],{"class":40},[34,38481,35312],{"class":156},[34,38483,1173],{"class":40},[34,38485,35317],{"class":156},[34,38487,35320],{"class":40},[19,38489,38491],{"id":38490},"_22vgg","2.2.VGG",[22650,38493,38495],{"id":38494},"_221原理","2.2.1.原理",[108,38497,38498],{},[2122,38499],{"alt":29,"src":38500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[108,38502,38503],{},[2122,38504],{"alt":29,"src":38505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[108,38507,38508],{},[2122,38509],{"alt":29,"src":38510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[108,38512,38513],{},"参数详细描述：",[108,38515,38516],{},[2122,38517],{"alt":29,"src":38518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[108,38520,38521],{},[2122,38522],{"alt":29,"src":38523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[108,38525,38526],{},[2122,38527],{"alt":29,"src":38528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[108,38530,38531],{},[2122,38532],{"alt":29,"src":38533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[108,38535,38536],{},[2122,38537],{"alt":29,"src":38538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22650,38540,38542],{"id":38541},"_222代码实现","2.2.2.代码实现",[752,38544,38545],{},[755,38546,38547],{},"网络搭建",[24,38549,38551],{"className":31029,"code":38550,"language":31031,"meta":29,"style":29},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[31,38552,38553,38559,38571,38581,38591,38595,38612,38620,38639,38644,38649,38661,38699,38704,38740,38744,38773,38778,38783,38794,38830,38834,38870,38874,38902,38906,38911,38922,38958,38962,38998,39002,39038,39042,39070,39074,39079,39090,39127,39131,39167,39171,39207,39211,39239,39243,39248,39259,39295,39299,39335,39339,39375,39379,39407,39411,39416,39427,39432,39437,39442,39463,39467,39479,39483,39495,39499,39503,39508,39513,39528,39533,39543,39548,39563,39568,39587,39592,39601,39606,39616,39621,39626,39640,39645,39659,39667,39671,39675,39683,39694,39705,39716,39727,39738,39749,39755,39759,39764,39777,39797,39803,39812],{"__ignoreMap":29},[34,38554,38555,38557],{"class":36,"line":37},[34,38556,31043],{"class":87},[34,38558,31046],{"class":40},[34,38560,38561,38563,38566,38568],{"class":36,"line":51},[34,38562,31388],{"class":87},[34,38564,38565],{"class":40}," sympy.core.sympify ",[34,38567,31043],{"class":87},[34,38569,38570],{"class":40}," kernS\n",[34,38572,38573,38575,38577,38579],{"class":36,"line":60},[34,38574,31388],{"class":87},[34,38576,31391],{"class":40},[34,38578,31043],{"class":87},[34,38580,31396],{"class":40},[34,38582,38583,38585,38587,38589],{"class":36,"line":76},[34,38584,31388],{"class":87},[34,38586,31408],{"class":40},[34,38588,31043],{"class":87},[34,38590,31413],{"class":40},[34,38592,38593],{"class":36,"line":93},[34,38594,3053],{"emptyLinePlaceholder":726},[34,38596,38597,38599,38602,38604,38606,38608,38610],{"class":36,"line":99},[34,38598,15347],{"class":87},[34,38600,38601],{"class":149}," VGG16",[34,38603,801],{"class":40},[34,38605,31429],{"class":149},[34,38607,1353],{"class":40},[34,38609,31434],{"class":149},[34,38611,31437],{"class":40},[34,38613,38614,38616,38618],{"class":36,"line":353},[34,38615,31452],{"class":87},[34,38617,31455],{"class":63},[34,38619,31458],{"class":40},[34,38621,38622,38624,38626,38629,38631,38633,38635,38637],{"class":36,"line":359},[34,38623,31468],{"class":63},[34,38625,801],{"class":40},[34,38627,38628],{"class":63},"VGG16",[34,38630,13088],{"class":40},[34,38632,31474],{"class":63},[34,38634,31477],{"class":40},[34,38636,31480],{"class":63},[34,38638,2629],{"class":40},[34,38640,38641],{"class":36,"line":579},[34,38642,38643],{"class":205},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[34,38645,38646],{"class":36,"line":589},[34,38647,38648],{"class":205},"        # 这里用的是灰度图\n",[34,38650,38651,38653,38656,38658],{"class":36,"line":601},[34,38652,31496],{"class":63},[34,38654,38655],{"class":40},".block1",[34,38657,153],{"class":87},[34,38659,38660],{"class":40},"nn.Sequential(\n",[34,38662,38663,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694,38696],{"class":36,"line":613},[34,38664,38665],{"class":40},"            nn.Conv2d(",[34,38667,31507],{"class":5869},[34,38669,153],{"class":87},[34,38671,1013],{"class":63},[34,38673,1173],{"class":40},[34,38675,31516],{"class":5869},[34,38677,153],{"class":87},[34,38679,999],{"class":63},[34,38681,1173],{"class":40},[34,38683,31525],{"class":5869},[34,38685,153],{"class":87},[34,38687,869],{"class":63},[34,38689,1173],{"class":40},[34,38691,31534],{"class":5869},[34,38693,153],{"class":87},[34,38695,1013],{"class":63},[34,38697,38698],{"class":40},"),\n",[34,38700,38701],{"class":36,"line":618},[34,38702,38703],{"class":40},"            nn.ReLU(),\n",[34,38705,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738],{"class":36,"line":628},[34,38707,38665],{"class":40},[34,38709,31507],{"class":5869},[34,38711,153],{"class":87},[34,38713,999],{"class":63},[34,38715,1173],{"class":40},[34,38717,31516],{"class":5869},[34,38719,153],{"class":87},[34,38721,999],{"class":63},[34,38723,1173],{"class":40},[34,38725,31525],{"class":5869},[34,38727,153],{"class":87},[34,38729,869],{"class":63},[34,38731,1173],{"class":40},[34,38733,31534],{"class":5869},[34,38735,153],{"class":87},[34,38737,1013],{"class":63},[34,38739,38698],{"class":40},[34,38741,38742],{"class":36,"line":640},[34,38743,38703],{"class":40},[34,38745,38746,38749,38751,38753,38755,38757,38759,38761,38763,38765,38767,38769,38771],{"class":36,"line":2301},[34,38747,38748],{"class":40},"            nn.MaxPool2d(",[34,38750,31525],{"class":5869},[34,38752,153],{"class":87},[34,38754,875],{"class":63},[34,38756,1173],{"class":40},[34,38758,31580],{"class":5869},[34,38760,153],{"class":87},[34,38762,875],{"class":63},[34,38764,1173],{"class":40},[34,38766,31534],{"class":5869},[34,38768,153],{"class":87},[34,38770,987],{"class":63},[34,38772,807],{"class":40},[34,38774,38775],{"class":36,"line":2307},[34,38776,38777],{"class":40},"        )\n",[34,38779,38780],{"class":36,"line":2328},[34,38781,38782],{"class":205},"        # 第二层\n",[34,38784,38785,38787,38790,38792],{"class":36,"line":2333},[34,38786,31496],{"class":63},[34,38788,38789],{"class":40},".block2",[34,38791,153],{"class":87},[34,38793,38660],{"class":40},[34,38795,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828],{"class":36,"line":2347},[34,38797,38665],{"class":40},[34,38799,31507],{"class":5869},[34,38801,153],{"class":87},[34,38803,999],{"class":63},[34,38805,1173],{"class":40},[34,38807,31516],{"class":5869},[34,38809,153],{"class":87},[34,38811,32721],{"class":63},[34,38813,1173],{"class":40},[34,38815,31525],{"class":5869},[34,38817,153],{"class":87},[34,38819,869],{"class":63},[34,38821,1173],{"class":40},[34,38823,31534],{"class":5869},[34,38825,153],{"class":87},[34,38827,1013],{"class":63},[34,38829,38698],{"class":40},[34,38831,38832],{"class":36,"line":2352},[34,38833,38703],{"class":40},[34,38835,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860,38862,38864,38866,38868],{"class":36,"line":2381},[34,38837,38665],{"class":40},[34,38839,31507],{"class":5869},[34,38841,153],{"class":87},[34,38843,32721],{"class":63},[34,38845,1173],{"class":40},[34,38847,31516],{"class":5869},[34,38849,153],{"class":87},[34,38851,32721],{"class":63},[34,38853,1173],{"class":40},[34,38855,31525],{"class":5869},[34,38857,153],{"class":87},[34,38859,869],{"class":63},[34,38861,1173],{"class":40},[34,38863,31534],{"class":5869},[34,38865,153],{"class":87},[34,38867,1013],{"class":63},[34,38869,38698],{"class":40},[34,38871,38872],{"class":36,"line":2386},[34,38873,38703],{"class":40},[34,38875,38876,38878,38880,38882,38884,38886,38888,38890,38892,38894,38896,38898,38900],{"class":36,"line":2403},[34,38877,38748],{"class":40},[34,38879,31525],{"class":5869},[34,38881,153],{"class":87},[34,38883,875],{"class":63},[34,38885,1173],{"class":40},[34,38887,31580],{"class":5869},[34,38889,153],{"class":87},[34,38891,875],{"class":63},[34,38893,1173],{"class":40},[34,38895,31534],{"class":5869},[34,38897,153],{"class":87},[34,38899,987],{"class":63},[34,38901,807],{"class":40},[34,38903,38904],{"class":36,"line":2408},[34,38905,38777],{"class":40},[34,38907,38908],{"class":36,"line":2413},[34,38909,38910],{"class":205},"        # 第三层\n",[34,38912,38913,38915,38918,38920],{"class":36,"line":2418},[34,38914,31496],{"class":63},[34,38916,38917],{"class":40},".block3",[34,38919,153],{"class":87},[34,38921,38660],{"class":40},[34,38923,38924,38926,38928,38930,38932,38934,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956],{"class":36,"line":2432},[34,38925,38665],{"class":40},[34,38927,31507],{"class":5869},[34,38929,153],{"class":87},[34,38931,32721],{"class":63},[34,38933,1173],{"class":40},[34,38935,31516],{"class":5869},[34,38937,153],{"class":87},[34,38939,35521],{"class":63},[34,38941,1173],{"class":40},[34,38943,31525],{"class":5869},[34,38945,153],{"class":87},[34,38947,869],{"class":63},[34,38949,1173],{"class":40},[34,38951,31534],{"class":5869},[34,38953,153],{"class":87},[34,38955,1013],{"class":63},[34,38957,38698],{"class":40},[34,38959,38960],{"class":36,"line":2437},[34,38961,38703],{"class":40},[34,38963,38964,38966,38968,38970,38972,38974,38976,38978,38980,38982,38984,38986,38988,38990,38992,38994,38996],{"class":36,"line":3230},[34,38965,38665],{"class":40},[34,38967,31507],{"class":5869},[34,38969,153],{"class":87},[34,38971,35521],{"class":63},[34,38973,1173],{"class":40},[34,38975,31516],{"class":5869},[34,38977,153],{"class":87},[34,38979,35521],{"class":63},[34,38981,1173],{"class":40},[34,38983,31525],{"class":5869},[34,38985,153],{"class":87},[34,38987,869],{"class":63},[34,38989,1173],{"class":40},[34,38991,31534],{"class":5869},[34,38993,153],{"class":87},[34,38995,1013],{"class":63},[34,38997,38698],{"class":40},[34,38999,39000],{"class":36,"line":3244},[34,39001,38703],{"class":40},[34,39003,39004,39006,39008,39010,39012,39014,39016,39018,39020,39022,39024,39026,39028,39030,39032,39034,39036],{"class":36,"line":3252},[34,39005,38665],{"class":40},[34,39007,31507],{"class":5869},[34,39009,153],{"class":87},[34,39011,35521],{"class":63},[34,39013,1173],{"class":40},[34,39015,31516],{"class":5869},[34,39017,153],{"class":87},[34,39019,35521],{"class":63},[34,39021,1173],{"class":40},[34,39023,31525],{"class":5869},[34,39025,153],{"class":87},[34,39027,869],{"class":63},[34,39029,1173],{"class":40},[34,39031,31534],{"class":5869},[34,39033,153],{"class":87},[34,39035,1013],{"class":63},[34,39037,38698],{"class":40},[34,39039,39040],{"class":36,"line":3257},[34,39041,38703],{"class":40},[34,39043,39044,39046,39048,39050,39052,39054,39056,39058,39060,39062,39064,39066,39068],{"class":36,"line":3263},[34,39045,38748],{"class":40},[34,39047,31525],{"class":5869},[34,39049,153],{"class":87},[34,39051,875],{"class":63},[34,39053,1173],{"class":40},[34,39055,31580],{"class":5869},[34,39057,153],{"class":87},[34,39059,875],{"class":63},[34,39061,1173],{"class":40},[34,39063,31534],{"class":5869},[34,39065,153],{"class":87},[34,39067,987],{"class":63},[34,39069,807],{"class":40},[34,39071,39072],{"class":36,"line":3269},[34,39073,38777],{"class":40},[34,39075,39076],{"class":36,"line":3274},[34,39077,39078],{"class":205},"        # 第四层\n",[34,39080,39081,39083,39086,39088],{"class":36,"line":8601},[34,39082,31496],{"class":63},[34,39084,39085],{"class":40},".block4",[34,39087,153],{"class":87},[34,39089,38660],{"class":40},[34,39091,39092,39094,39096,39098,39100,39102,39104,39106,39109,39111,39113,39115,39117,39119,39121,39123,39125],{"class":36,"line":8625},[34,39093,38665],{"class":40},[34,39095,31507],{"class":5869},[34,39097,153],{"class":87},[34,39099,35521],{"class":63},[34,39101,1173],{"class":40},[34,39103,31516],{"class":5869},[34,39105,153],{"class":87},[34,39107,39108],{"class":63},"512",[34,39110,1173],{"class":40},[34,39112,31525],{"class":5869},[34,39114,153],{"class":87},[34,39116,869],{"class":63},[34,39118,1173],{"class":40},[34,39120,31534],{"class":5869},[34,39122,153],{"class":87},[34,39124,1013],{"class":63},[34,39126,38698],{"class":40},[34,39128,39129],{"class":36,"line":8630},[34,39130,38703],{"class":40},[34,39132,39133,39135,39137,39139,39141,39143,39145,39147,39149,39151,39153,39155,39157,39159,39161,39163,39165],{"class":36,"line":8636},[34,39134,38665],{"class":40},[34,39136,31507],{"class":5869},[34,39138,153],{"class":87},[34,39140,39108],{"class":63},[34,39142,1173],{"class":40},[34,39144,31516],{"class":5869},[34,39146,153],{"class":87},[34,39148,39108],{"class":63},[34,39150,1173],{"class":40},[34,39152,31525],{"class":5869},[34,39154,153],{"class":87},[34,39156,869],{"class":63},[34,39158,1173],{"class":40},[34,39160,31534],{"class":5869},[34,39162,153],{"class":87},[34,39164,1013],{"class":63},[34,39166,38698],{"class":40},[34,39168,39169],{"class":36,"line":8663},[34,39170,38703],{"class":40},[34,39172,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191,39193,39195,39197,39199,39201,39203,39205],{"class":36,"line":8668},[34,39174,38665],{"class":40},[34,39176,31507],{"class":5869},[34,39178,153],{"class":87},[34,39180,39108],{"class":63},[34,39182,1173],{"class":40},[34,39184,31516],{"class":5869},[34,39186,153],{"class":87},[34,39188,39108],{"class":63},[34,39190,1173],{"class":40},[34,39192,31525],{"class":5869},[34,39194,153],{"class":87},[34,39196,869],{"class":63},[34,39198,1173],{"class":40},[34,39200,31534],{"class":5869},[34,39202,153],{"class":87},[34,39204,1013],{"class":63},[34,39206,38698],{"class":40},[34,39208,39209],{"class":36,"line":8674},[34,39210,38703],{"class":40},[34,39212,39213,39215,39217,39219,39221,39223,39225,39227,39229,39231,39233,39235,39237],{"class":36,"line":8686},[34,39214,38748],{"class":40},[34,39216,31525],{"class":5869},[34,39218,153],{"class":87},[34,39220,875],{"class":63},[34,39222,1173],{"class":40},[34,39224,31580],{"class":5869},[34,39226,153],{"class":87},[34,39228,875],{"class":63},[34,39230,1173],{"class":40},[34,39232,31534],{"class":5869},[34,39234,153],{"class":87},[34,39236,987],{"class":63},[34,39238,807],{"class":40},[34,39240,39241],{"class":36,"line":8698},[34,39242,38777],{"class":40},[34,39244,39245],{"class":36,"line":8710},[34,39246,39247],{"class":205},"        # 第五层\n",[34,39249,39250,39252,39255,39257],{"class":36,"line":10369},[34,39251,31496],{"class":63},[34,39253,39254],{"class":40},".block5",[34,39256,153],{"class":87},[34,39258,38660],{"class":40},[34,39260,39261,39263,39265,39267,39269,39271,39273,39275,39277,39279,39281,39283,39285,39287,39289,39291,39293],{"class":36,"line":10394},[34,39262,38665],{"class":40},[34,39264,31507],{"class":5869},[34,39266,153],{"class":87},[34,39268,39108],{"class":63},[34,39270,1173],{"class":40},[34,39272,31516],{"class":5869},[34,39274,153],{"class":87},[34,39276,39108],{"class":63},[34,39278,1173],{"class":40},[34,39280,31525],{"class":5869},[34,39282,153],{"class":87},[34,39284,869],{"class":63},[34,39286,1173],{"class":40},[34,39288,31534],{"class":5869},[34,39290,153],{"class":87},[34,39292,1013],{"class":63},[34,39294,38698],{"class":40},[34,39296,39297],{"class":36,"line":10417},[34,39298,38703],{"class":40},[34,39300,39301,39303,39305,39307,39309,39311,39313,39315,39317,39319,39321,39323,39325,39327,39329,39331,39333],{"class":36,"line":10441},[34,39302,38665],{"class":40},[34,39304,31507],{"class":5869},[34,39306,153],{"class":87},[34,39308,39108],{"class":63},[34,39310,1173],{"class":40},[34,39312,31516],{"class":5869},[34,39314,153],{"class":87},[34,39316,39108],{"class":63},[34,39318,1173],{"class":40},[34,39320,31525],{"class":5869},[34,39322,153],{"class":87},[34,39324,869],{"class":63},[34,39326,1173],{"class":40},[34,39328,31534],{"class":5869},[34,39330,153],{"class":87},[34,39332,1013],{"class":63},[34,39334,38698],{"class":40},[34,39336,39337],{"class":36,"line":10446},[34,39338,38703],{"class":40},[34,39340,39341,39343,39345,39347,39349,39351,39353,39355,39357,39359,39361,39363,39365,39367,39369,39371,39373],{"class":36,"line":10451},[34,39342,38665],{"class":40},[34,39344,31507],{"class":5869},[34,39346,153],{"class":87},[34,39348,39108],{"class":63},[34,39350,1173],{"class":40},[34,39352,31516],{"class":5869},[34,39354,153],{"class":87},[34,39356,39108],{"class":63},[34,39358,1173],{"class":40},[34,39360,31525],{"class":5869},[34,39362,153],{"class":87},[34,39364,869],{"class":63},[34,39366,1173],{"class":40},[34,39368,31534],{"class":5869},[34,39370,153],{"class":87},[34,39372,1013],{"class":63},[34,39374,38698],{"class":40},[34,39376,39377],{"class":36,"line":10456},[34,39378,38703],{"class":40},[34,39380,39381,39383,39385,39387,39389,39391,39393,39395,39397,39399,39401,39403,39405],{"class":36,"line":10465},[34,39382,38748],{"class":40},[34,39384,31525],{"class":5869},[34,39386,153],{"class":87},[34,39388,875],{"class":63},[34,39390,1173],{"class":40},[34,39392,31580],{"class":5869},[34,39394,153],{"class":87},[34,39396,875],{"class":63},[34,39398,1173],{"class":40},[34,39400,31534],{"class":5869},[34,39402,153],{"class":87},[34,39404,987],{"class":63},[34,39406,807],{"class":40},[34,39408,39409],{"class":36,"line":10470},[34,39410,38777],{"class":40},[34,39412,39413],{"class":36,"line":10476},[34,39414,39415],{"class":205},"        # 全连接层\n",[34,39417,39418,39420,39423,39425],{"class":36,"line":10497},[34,39419,31496],{"class":63},[34,39421,39422],{"class":40},".block6",[34,39424,153],{"class":87},[34,39426,38660],{"class":40},[34,39428,39429],{"class":36,"line":10503},[34,39430,39431],{"class":205},"            # 平展操作\n",[34,39433,39434],{"class":36,"line":10517},[34,39435,39436],{"class":205},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[34,39438,39439],{"class":36,"line":10523},[34,39440,39441],{"class":40},"            nn.Flatten(),\n",[34,39443,39444,39447,39449,39451,39453,39455,39457,39459,39461],{"class":36,"line":10550},[34,39445,39446],{"class":40},"            nn.Linear(",[34,39448,1164],{"class":63},[34,39450,1250],{"class":87},[34,39452,1164],{"class":63},[34,39454,1250],{"class":87},[34,39456,39108],{"class":63},[34,39458,1173],{"class":40},[34,39460,35521],{"class":63},[34,39462,38698],{"class":40},[34,39464,39465],{"class":36,"line":10559},[34,39466,38703],{"class":40},[34,39468,39469,39471,39473,39475,39477],{"class":36,"line":10565},[34,39470,39446],{"class":40},[34,39472,35521],{"class":63},[34,39474,1173],{"class":40},[34,39476,32721],{"class":63},[34,39478,38698],{"class":40},[34,39480,39481],{"class":36,"line":10573},[34,39482,38703],{"class":40},[34,39484,39485,39487,39489,39491,39493],{"class":36,"line":10578},[34,39486,39446],{"class":40},[34,39488,32721],{"class":63},[34,39490,1173],{"class":40},[34,39492,1241],{"class":63},[34,39494,807],{"class":40},[34,39496,39497],{"class":36,"line":17256},[34,39498,38777],{"class":40},[34,39500,39501],{"class":36,"line":17262},[34,39502,3053],{"emptyLinePlaceholder":726},[34,39504,39505],{"class":36,"line":17285},[34,39506,39507],{"class":205},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[34,39509,39510],{"class":36,"line":17291},[34,39511,39512],{"class":205},"        # 循环遍历模型\n",[34,39514,39515,39517,39520,39522,39525],{"class":36,"line":17314},[34,39516,4056],{"class":87},[34,39518,39519],{"class":40}," m ",[34,39521,26695],{"class":87},[34,39523,39524],{"class":63}," self",[34,39526,39527],{"class":40},".modules():\n",[34,39529,39530],{"class":36,"line":17328},[34,39531,39532],{"class":205},"            # print(m)\n",[34,39534,39535,39537,39540],{"class":36,"line":17348},[34,39536,5295],{"class":87},[34,39538,39539],{"class":63}," isinstance",[34,39541,39542],{"class":40},"(m,nn.Conv2d):\n",[34,39544,39545],{"class":36,"line":17354},[34,39546,39547],{"class":205},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[34,39549,39550,39553,39556,39558,39561],{"class":36,"line":17365},[34,39551,39552],{"class":40},"                nn.init.kaiming_normal_(m.weight,",[34,39554,39555],{"class":5869},"nonlinearity",[34,39557,153],{"class":87},[34,39559,39560],{"class":156},"'relu'",[34,39562,807],{"class":40},[34,39564,39565],{"class":36,"line":17388},[34,39566,39567],{"class":205},"                # 判断b参数是否存在\n",[34,39569,39570,39573,39576,39579,39582,39585],{"class":36,"line":17410},[34,39571,39572],{"class":87},"                if",[34,39574,39575],{"class":40}," m.bias ",[34,39577,39578],{"class":87},"is",[34,39580,39581],{"class":87}," not",[34,39583,39584],{"class":63}," None",[34,39586,4392],{"class":40},[34,39588,39589],{"class":36,"line":17415},[34,39590,39591],{"class":205},"                    # 如果参数不存在的化初始化b=0\n",[34,39593,39594,39597,39599],{"class":36,"line":17421},[34,39595,39596],{"class":40},"                    nn.init.constant_(m.bias,",[34,39598,987],{"class":63},[34,39600,807],{"class":40},[34,39602,39603],{"class":36,"line":17435},[34,39604,39605],{"class":205},"            # 全连接层初始化\n",[34,39607,39608,39611,39613],{"class":36,"line":17448},[34,39609,39610],{"class":87},"            elif",[34,39612,39539],{"class":63},[34,39614,39615],{"class":40},"(m,nn.Linear):\n",[34,39617,39618],{"class":36,"line":17453},[34,39619,39620],{"class":205},"                # 这个初始化方法是利用的是正太分布的方式\n",[34,39622,39623],{"class":36,"line":17467},[34,39624,39625],{"class":205},"                # 均值为0，方差为0.01\n",[34,39627,39628,39631,39633,39635,39638],{"class":36,"line":17472},[34,39629,39630],{"class":40},"                nn.init.normal_(m.weight,",[34,39632,987],{"class":63},[34,39634,1173],{"class":40},[34,39636,39637],{"class":63},"0.01",[34,39639,807],{"class":40},[34,39641,39642],{"class":36,"line":17478},[34,39643,39644],{"class":205},"                # 初始化b参数\n",[34,39646,39647,39649,39651,39653,39655,39657],{"class":36,"line":17483},[34,39648,39572],{"class":87},[34,39650,39575],{"class":40},[34,39652,39578],{"class":87},[34,39654,39581],{"class":87},[34,39656,39584],{"class":63},[34,39658,4392],{"class":40},[34,39660,39661,39663,39665],{"class":36,"line":17497},[34,39662,39596],{"class":40},[34,39664,987],{"class":63},[34,39666,807],{"class":40},[34,39668,39669],{"class":36,"line":17502},[34,39670,3053],{"emptyLinePlaceholder":726},[34,39672,39673],{"class":36,"line":17507},[34,39674,35816],{"class":205},[34,39676,39677,39679,39681],{"class":36,"line":17521},[34,39678,31452],{"class":87},[34,39680,31744],{"class":149},[34,39682,31747],{"class":40},[34,39684,39685,39687,39689,39691],{"class":36,"line":17533},[34,39686,31752],{"class":40},[34,39688,153],{"class":87},[34,39690,31474],{"class":63},[34,39692,39693],{"class":40},".block1(x)\n",[34,39695,39696,39698,39700,39702],{"class":36,"line":17538},[34,39697,31752],{"class":40},[34,39699,153],{"class":87},[34,39701,31474],{"class":63},[34,39703,39704],{"class":40},".block2(x)\n",[34,39706,39707,39709,39711,39713],{"class":36,"line":17551},[34,39708,31752],{"class":40},[34,39710,153],{"class":87},[34,39712,31474],{"class":63},[34,39714,39715],{"class":40},".block3(x)\n",[34,39717,39718,39720,39722,39724],{"class":36,"line":17556},[34,39719,31752],{"class":40},[34,39721,153],{"class":87},[34,39723,31474],{"class":63},[34,39725,39726],{"class":40},".block4(x)\n",[34,39728,39729,39731,39733,39735],{"class":36,"line":17561},[34,39730,31752],{"class":40},[34,39732,153],{"class":87},[34,39734,31474],{"class":63},[34,39736,39737],{"class":40},".block5(x)\n",[34,39739,39740,39742,39744,39746],{"class":36,"line":17566},[34,39741,31752],{"class":40},[34,39743,153],{"class":87},[34,39745,31474],{"class":63},[34,39747,39748],{"class":40},".block6(x)\n",[34,39750,39751,39753],{"class":36,"line":17579},[34,39752,15405],{"class":87},[34,39754,31860],{"class":40},[34,39756,39757],{"class":36,"line":17584},[34,39758,3053],{"emptyLinePlaceholder":726},[34,39760,39761],{"class":36,"line":33284},[34,39762,39763],{"class":205},"# 验证模型\n",[34,39765,39766,39768,39770,39772,39775],{"class":36,"line":33290},[34,39767,2191],{"class":87},[34,39769,31871],{"class":63},[34,39771,3602],{"class":87},[34,39773,39774],{"class":156},"'__main__'",[34,39776,4392],{"class":40},[34,39778,39779,39781,39783,39785,39787,39789,39791,39793,39795],{"class":36,"line":33296},[34,39780,31888],{"class":40},[34,39782,153],{"class":87},[34,39784,31102],{"class":40},[34,39786,31895],{"class":156},[34,39788,2358],{"class":87},[34,39790,31900],{"class":40},[34,39792,2355],{"class":87},[34,39794,31127],{"class":156},[34,39796,807],{"class":40},[34,39798,39799,39801],{"class":36,"line":33302},[34,39800,31950],{"class":63},[34,39802,31136],{"class":40},[34,39804,39805,39807,39809],{"class":36,"line":33308},[34,39806,31940],{"class":40},[34,39808,153],{"class":87},[34,39810,39811],{"class":40},"VGG16().to(device)\n",[34,39813,39814,39816,39818,39820,39822,39824,39826,39828],{"class":36,"line":33319},[34,39815,31950],{"class":63},[34,39817,31953],{"class":40},[34,39819,1013],{"class":63},[34,39821,1173],{"class":40},[34,39823,32152],{"class":63},[34,39825,1173],{"class":40},[34,39827,32152],{"class":63},[34,39829,31966],{"class":40},[752,39831,39832],{"start":51},[755,39833,39834],{},"训练代码",[108,39836,39837],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[108,39839,39840],{},"解决方式:",[108,39842,39843],{},"①权重初始化",[24,39845,39847],{"className":31029,"code":39846,"language":31031,"meta":29,"style":29},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[31,39848,39849,39854,39859,39871,39876,39884,39889,39902,39907,39921,39926,39935,39940,39949,39954,39959,39972,39977,39991],{"__ignoreMap":29},[34,39850,39851],{"class":36,"line":37},[34,39852,39853],{"class":205},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[34,39855,39856],{"class":36,"line":51},[34,39857,39858],{"class":205},"# 循环遍历模型\n",[34,39860,39861,39863,39865,39867,39869],{"class":36,"line":60},[34,39862,3678],{"class":87},[34,39864,39519],{"class":40},[34,39866,26695],{"class":87},[34,39868,39524],{"class":63},[34,39870,39527],{"class":40},[34,39872,39873],{"class":36,"line":76},[34,39874,39875],{"class":205},"    # print(m)\n",[34,39877,39878,39880,39882],{"class":36,"line":93},[34,39879,3754],{"class":87},[34,39881,39539],{"class":63},[34,39883,39542],{"class":40},[34,39885,39886],{"class":36,"line":99},[34,39887,39888],{"class":205},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[34,39890,39891,39894,39896,39898,39900],{"class":36,"line":353},[34,39892,39893],{"class":40},"        nn.init.kaiming_normal_(m.weight,",[34,39895,39555],{"class":5869},[34,39897,153],{"class":87},[34,39899,39560],{"class":156},[34,39901,807],{"class":40},[34,39903,39904],{"class":36,"line":359},[34,39905,39906],{"class":205},"        # 判断b参数是否存在\n",[34,39908,39909,39911,39913,39915,39917,39919],{"class":36,"line":579},[34,39910,3150],{"class":87},[34,39912,39575],{"class":40},[34,39914,39578],{"class":87},[34,39916,39581],{"class":87},[34,39918,39584],{"class":63},[34,39920,4392],{"class":40},[34,39922,39923],{"class":36,"line":589},[34,39924,39925],{"class":205},"            # 如果参数不存在的化初始化b=0\n",[34,39927,39928,39931,39933],{"class":36,"line":601},[34,39929,39930],{"class":40},"            nn.init.constant_(m.bias,",[34,39932,987],{"class":63},[34,39934,807],{"class":40},[34,39936,39937],{"class":36,"line":613},[34,39938,39939],{"class":205},"    # 全连接层初始化\n",[34,39941,39942,39945,39947],{"class":36,"line":618},[34,39943,39944],{"class":87},"    elif",[34,39946,39539],{"class":63},[34,39948,39615],{"class":40},[34,39950,39951],{"class":36,"line":628},[34,39952,39953],{"class":205},"        # 这个初始化方法是利用的是正太分布的方式\n",[34,39955,39956],{"class":36,"line":640},[34,39957,39958],{"class":205},"        # 均值为0，方差为0.01\n",[34,39960,39961,39964,39966,39968,39970],{"class":36,"line":2301},[34,39962,39963],{"class":40},"        nn.init.normal_(m.weight,",[34,39965,987],{"class":63},[34,39967,1173],{"class":40},[34,39969,39637],{"class":63},[34,39971,807],{"class":40},[34,39973,39974],{"class":36,"line":2307},[34,39975,39976],{"class":205},"        # 初始化b参数\n",[34,39978,39979,39981,39983,39985,39987,39989],{"class":36,"line":2328},[34,39980,3150],{"class":87},[34,39982,39575],{"class":40},[34,39984,39578],{"class":87},[34,39986,39581],{"class":87},[34,39988,39584],{"class":63},[34,39990,4392],{"class":40},[34,39992,39993,39995,39997],{"class":36,"line":2333},[34,39994,39930],{"class":40},[34,39996,987],{"class":63},[34,39998,807],{"class":40},[108,40000,40001],{},"②尽可能地增加批次",[108,40003,40004],{},"训练完整代码：",[24,40006,40007],{"className":31029,"code":38550,"language":31031,"meta":29,"style":29},[31,40008,40009,40015,40025,40035,40045,40049,40065,40073,40091,40095,40099,40109,40145,40149,40185,40189,40217,40221,40225,40235,40271,40275,40311,40315,40343,40347,40351,40361,40397,40401,40437,40441,40477,40481,40509,40513,40517,40527,40563,40567,40603,40607,40643,40647,40675,40679,40683,40693,40729,40733,40769,40773,40809,40813,40841,40845,40849,40859,40863,40867,40871,40891,40895,40907,40911,40923,40927,40931,40935,40939,40951,40955,40963,40967,40979,40983,40997,41001,41009,41013,41021,41025,41029,41041,41045,41059,41067,41071,41075,41083,41093,41103,41113,41123,41133,41143,41149,41153,41157,41169,41189,41195,41203],{"__ignoreMap":29},[34,40010,40011,40013],{"class":36,"line":37},[34,40012,31043],{"class":87},[34,40014,31046],{"class":40},[34,40016,40017,40019,40021,40023],{"class":36,"line":51},[34,40018,31388],{"class":87},[34,40020,38565],{"class":40},[34,40022,31043],{"class":87},[34,40024,38570],{"class":40},[34,40026,40027,40029,40031,40033],{"class":36,"line":60},[34,40028,31388],{"class":87},[34,40030,31391],{"class":40},[34,40032,31043],{"class":87},[34,40034,31396],{"class":40},[34,40036,40037,40039,40041,40043],{"class":36,"line":76},[34,40038,31388],{"class":87},[34,40040,31408],{"class":40},[34,40042,31043],{"class":87},[34,40044,31413],{"class":40},[34,40046,40047],{"class":36,"line":93},[34,40048,3053],{"emptyLinePlaceholder":726},[34,40050,40051,40053,40055,40057,40059,40061,40063],{"class":36,"line":99},[34,40052,15347],{"class":87},[34,40054,38601],{"class":149},[34,40056,801],{"class":40},[34,40058,31429],{"class":149},[34,40060,1353],{"class":40},[34,40062,31434],{"class":149},[34,40064,31437],{"class":40},[34,40066,40067,40069,40071],{"class":36,"line":353},[34,40068,31452],{"class":87},[34,40070,31455],{"class":63},[34,40072,31458],{"class":40},[34,40074,40075,40077,40079,40081,40083,40085,40087,40089],{"class":36,"line":359},[34,40076,31468],{"class":63},[34,40078,801],{"class":40},[34,40080,38628],{"class":63},[34,40082,13088],{"class":40},[34,40084,31474],{"class":63},[34,40086,31477],{"class":40},[34,40088,31480],{"class":63},[34,40090,2629],{"class":40},[34,40092,40093],{"class":36,"line":579},[34,40094,38643],{"class":205},[34,40096,40097],{"class":36,"line":589},[34,40098,38648],{"class":205},[34,40100,40101,40103,40105,40107],{"class":36,"line":601},[34,40102,31496],{"class":63},[34,40104,38655],{"class":40},[34,40106,153],{"class":87},[34,40108,38660],{"class":40},[34,40110,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143],{"class":36,"line":613},[34,40112,38665],{"class":40},[34,40114,31507],{"class":5869},[34,40116,153],{"class":87},[34,40118,1013],{"class":63},[34,40120,1173],{"class":40},[34,40122,31516],{"class":5869},[34,40124,153],{"class":87},[34,40126,999],{"class":63},[34,40128,1173],{"class":40},[34,40130,31525],{"class":5869},[34,40132,153],{"class":87},[34,40134,869],{"class":63},[34,40136,1173],{"class":40},[34,40138,31534],{"class":5869},[34,40140,153],{"class":87},[34,40142,1013],{"class":63},[34,40144,38698],{"class":40},[34,40146,40147],{"class":36,"line":618},[34,40148,38703],{"class":40},[34,40150,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183],{"class":36,"line":628},[34,40152,38665],{"class":40},[34,40154,31507],{"class":5869},[34,40156,153],{"class":87},[34,40158,999],{"class":63},[34,40160,1173],{"class":40},[34,40162,31516],{"class":5869},[34,40164,153],{"class":87},[34,40166,999],{"class":63},[34,40168,1173],{"class":40},[34,40170,31525],{"class":5869},[34,40172,153],{"class":87},[34,40174,869],{"class":63},[34,40176,1173],{"class":40},[34,40178,31534],{"class":5869},[34,40180,153],{"class":87},[34,40182,1013],{"class":63},[34,40184,38698],{"class":40},[34,40186,40187],{"class":36,"line":640},[34,40188,38703],{"class":40},[34,40190,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215],{"class":36,"line":2301},[34,40192,38748],{"class":40},[34,40194,31525],{"class":5869},[34,40196,153],{"class":87},[34,40198,875],{"class":63},[34,40200,1173],{"class":40},[34,40202,31580],{"class":5869},[34,40204,153],{"class":87},[34,40206,875],{"class":63},[34,40208,1173],{"class":40},[34,40210,31534],{"class":5869},[34,40212,153],{"class":87},[34,40214,987],{"class":63},[34,40216,807],{"class":40},[34,40218,40219],{"class":36,"line":2307},[34,40220,38777],{"class":40},[34,40222,40223],{"class":36,"line":2328},[34,40224,38782],{"class":205},[34,40226,40227,40229,40231,40233],{"class":36,"line":2333},[34,40228,31496],{"class":63},[34,40230,38789],{"class":40},[34,40232,153],{"class":87},[34,40234,38660],{"class":40},[34,40236,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269],{"class":36,"line":2347},[34,40238,38665],{"class":40},[34,40240,31507],{"class":5869},[34,40242,153],{"class":87},[34,40244,999],{"class":63},[34,40246,1173],{"class":40},[34,40248,31516],{"class":5869},[34,40250,153],{"class":87},[34,40252,32721],{"class":63},[34,40254,1173],{"class":40},[34,40256,31525],{"class":5869},[34,40258,153],{"class":87},[34,40260,869],{"class":63},[34,40262,1173],{"class":40},[34,40264,31534],{"class":5869},[34,40266,153],{"class":87},[34,40268,1013],{"class":63},[34,40270,38698],{"class":40},[34,40272,40273],{"class":36,"line":2352},[34,40274,38703],{"class":40},[34,40276,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309],{"class":36,"line":2381},[34,40278,38665],{"class":40},[34,40280,31507],{"class":5869},[34,40282,153],{"class":87},[34,40284,32721],{"class":63},[34,40286,1173],{"class":40},[34,40288,31516],{"class":5869},[34,40290,153],{"class":87},[34,40292,32721],{"class":63},[34,40294,1173],{"class":40},[34,40296,31525],{"class":5869},[34,40298,153],{"class":87},[34,40300,869],{"class":63},[34,40302,1173],{"class":40},[34,40304,31534],{"class":5869},[34,40306,153],{"class":87},[34,40308,1013],{"class":63},[34,40310,38698],{"class":40},[34,40312,40313],{"class":36,"line":2386},[34,40314,38703],{"class":40},[34,40316,40317,40319,40321,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341],{"class":36,"line":2403},[34,40318,38748],{"class":40},[34,40320,31525],{"class":5869},[34,40322,153],{"class":87},[34,40324,875],{"class":63},[34,40326,1173],{"class":40},[34,40328,31580],{"class":5869},[34,40330,153],{"class":87},[34,40332,875],{"class":63},[34,40334,1173],{"class":40},[34,40336,31534],{"class":5869},[34,40338,153],{"class":87},[34,40340,987],{"class":63},[34,40342,807],{"class":40},[34,40344,40345],{"class":36,"line":2408},[34,40346,38777],{"class":40},[34,40348,40349],{"class":36,"line":2413},[34,40350,38910],{"class":205},[34,40352,40353,40355,40357,40359],{"class":36,"line":2418},[34,40354,31496],{"class":63},[34,40356,38917],{"class":40},[34,40358,153],{"class":87},[34,40360,38660],{"class":40},[34,40362,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383,40385,40387,40389,40391,40393,40395],{"class":36,"line":2432},[34,40364,38665],{"class":40},[34,40366,31507],{"class":5869},[34,40368,153],{"class":87},[34,40370,32721],{"class":63},[34,40372,1173],{"class":40},[34,40374,31516],{"class":5869},[34,40376,153],{"class":87},[34,40378,35521],{"class":63},[34,40380,1173],{"class":40},[34,40382,31525],{"class":5869},[34,40384,153],{"class":87},[34,40386,869],{"class":63},[34,40388,1173],{"class":40},[34,40390,31534],{"class":5869},[34,40392,153],{"class":87},[34,40394,1013],{"class":63},[34,40396,38698],{"class":40},[34,40398,40399],{"class":36,"line":2437},[34,40400,38703],{"class":40},[34,40402,40403,40405,40407,40409,40411,40413,40415,40417,40419,40421,40423,40425,40427,40429,40431,40433,40435],{"class":36,"line":3230},[34,40404,38665],{"class":40},[34,40406,31507],{"class":5869},[34,40408,153],{"class":87},[34,40410,35521],{"class":63},[34,40412,1173],{"class":40},[34,40414,31516],{"class":5869},[34,40416,153],{"class":87},[34,40418,35521],{"class":63},[34,40420,1173],{"class":40},[34,40422,31525],{"class":5869},[34,40424,153],{"class":87},[34,40426,869],{"class":63},[34,40428,1173],{"class":40},[34,40430,31534],{"class":5869},[34,40432,153],{"class":87},[34,40434,1013],{"class":63},[34,40436,38698],{"class":40},[34,40438,40439],{"class":36,"line":3244},[34,40440,38703],{"class":40},[34,40442,40443,40445,40447,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467,40469,40471,40473,40475],{"class":36,"line":3252},[34,40444,38665],{"class":40},[34,40446,31507],{"class":5869},[34,40448,153],{"class":87},[34,40450,35521],{"class":63},[34,40452,1173],{"class":40},[34,40454,31516],{"class":5869},[34,40456,153],{"class":87},[34,40458,35521],{"class":63},[34,40460,1173],{"class":40},[34,40462,31525],{"class":5869},[34,40464,153],{"class":87},[34,40466,869],{"class":63},[34,40468,1173],{"class":40},[34,40470,31534],{"class":5869},[34,40472,153],{"class":87},[34,40474,1013],{"class":63},[34,40476,38698],{"class":40},[34,40478,40479],{"class":36,"line":3257},[34,40480,38703],{"class":40},[34,40482,40483,40485,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507],{"class":36,"line":3263},[34,40484,38748],{"class":40},[34,40486,31525],{"class":5869},[34,40488,153],{"class":87},[34,40490,875],{"class":63},[34,40492,1173],{"class":40},[34,40494,31580],{"class":5869},[34,40496,153],{"class":87},[34,40498,875],{"class":63},[34,40500,1173],{"class":40},[34,40502,31534],{"class":5869},[34,40504,153],{"class":87},[34,40506,987],{"class":63},[34,40508,807],{"class":40},[34,40510,40511],{"class":36,"line":3269},[34,40512,38777],{"class":40},[34,40514,40515],{"class":36,"line":3274},[34,40516,39078],{"class":205},[34,40518,40519,40521,40523,40525],{"class":36,"line":8601},[34,40520,31496],{"class":63},[34,40522,39085],{"class":40},[34,40524,153],{"class":87},[34,40526,38660],{"class":40},[34,40528,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553,40555,40557,40559,40561],{"class":36,"line":8625},[34,40530,38665],{"class":40},[34,40532,31507],{"class":5869},[34,40534,153],{"class":87},[34,40536,35521],{"class":63},[34,40538,1173],{"class":40},[34,40540,31516],{"class":5869},[34,40542,153],{"class":87},[34,40544,39108],{"class":63},[34,40546,1173],{"class":40},[34,40548,31525],{"class":5869},[34,40550,153],{"class":87},[34,40552,869],{"class":63},[34,40554,1173],{"class":40},[34,40556,31534],{"class":5869},[34,40558,153],{"class":87},[34,40560,1013],{"class":63},[34,40562,38698],{"class":40},[34,40564,40565],{"class":36,"line":8630},[34,40566,38703],{"class":40},[34,40568,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587,40589,40591,40593,40595,40597,40599,40601],{"class":36,"line":8636},[34,40570,38665],{"class":40},[34,40572,31507],{"class":5869},[34,40574,153],{"class":87},[34,40576,39108],{"class":63},[34,40578,1173],{"class":40},[34,40580,31516],{"class":5869},[34,40582,153],{"class":87},[34,40584,39108],{"class":63},[34,40586,1173],{"class":40},[34,40588,31525],{"class":5869},[34,40590,153],{"class":87},[34,40592,869],{"class":63},[34,40594,1173],{"class":40},[34,40596,31534],{"class":5869},[34,40598,153],{"class":87},[34,40600,1013],{"class":63},[34,40602,38698],{"class":40},[34,40604,40605],{"class":36,"line":8663},[34,40606,38703],{"class":40},[34,40608,40609,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641],{"class":36,"line":8668},[34,40610,38665],{"class":40},[34,40612,31507],{"class":5869},[34,40614,153],{"class":87},[34,40616,39108],{"class":63},[34,40618,1173],{"class":40},[34,40620,31516],{"class":5869},[34,40622,153],{"class":87},[34,40624,39108],{"class":63},[34,40626,1173],{"class":40},[34,40628,31525],{"class":5869},[34,40630,153],{"class":87},[34,40632,869],{"class":63},[34,40634,1173],{"class":40},[34,40636,31534],{"class":5869},[34,40638,153],{"class":87},[34,40640,1013],{"class":63},[34,40642,38698],{"class":40},[34,40644,40645],{"class":36,"line":8674},[34,40646,38703],{"class":40},[34,40648,40649,40651,40653,40655,40657,40659,40661,40663,40665,40667,40669,40671,40673],{"class":36,"line":8686},[34,40650,38748],{"class":40},[34,40652,31525],{"class":5869},[34,40654,153],{"class":87},[34,40656,875],{"class":63},[34,40658,1173],{"class":40},[34,40660,31580],{"class":5869},[34,40662,153],{"class":87},[34,40664,875],{"class":63},[34,40666,1173],{"class":40},[34,40668,31534],{"class":5869},[34,40670,153],{"class":87},[34,40672,987],{"class":63},[34,40674,807],{"class":40},[34,40676,40677],{"class":36,"line":8698},[34,40678,38777],{"class":40},[34,40680,40681],{"class":36,"line":8710},[34,40682,39247],{"class":205},[34,40684,40685,40687,40689,40691],{"class":36,"line":10369},[34,40686,31496],{"class":63},[34,40688,39254],{"class":40},[34,40690,153],{"class":87},[34,40692,38660],{"class":40},[34,40694,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713,40715,40717,40719,40721,40723,40725,40727],{"class":36,"line":10394},[34,40696,38665],{"class":40},[34,40698,31507],{"class":5869},[34,40700,153],{"class":87},[34,40702,39108],{"class":63},[34,40704,1173],{"class":40},[34,40706,31516],{"class":5869},[34,40708,153],{"class":87},[34,40710,39108],{"class":63},[34,40712,1173],{"class":40},[34,40714,31525],{"class":5869},[34,40716,153],{"class":87},[34,40718,869],{"class":63},[34,40720,1173],{"class":40},[34,40722,31534],{"class":5869},[34,40724,153],{"class":87},[34,40726,1013],{"class":63},[34,40728,38698],{"class":40},[34,40730,40731],{"class":36,"line":10417},[34,40732,38703],{"class":40},[34,40734,40735,40737,40739,40741,40743,40745,40747,40749,40751,40753,40755,40757,40759,40761,40763,40765,40767],{"class":36,"line":10441},[34,40736,38665],{"class":40},[34,40738,31507],{"class":5869},[34,40740,153],{"class":87},[34,40742,39108],{"class":63},[34,40744,1173],{"class":40},[34,40746,31516],{"class":5869},[34,40748,153],{"class":87},[34,40750,39108],{"class":63},[34,40752,1173],{"class":40},[34,40754,31525],{"class":5869},[34,40756,153],{"class":87},[34,40758,869],{"class":63},[34,40760,1173],{"class":40},[34,40762,31534],{"class":5869},[34,40764,153],{"class":87},[34,40766,1013],{"class":63},[34,40768,38698],{"class":40},[34,40770,40771],{"class":36,"line":10446},[34,40772,38703],{"class":40},[34,40774,40775,40777,40779,40781,40783,40785,40787,40789,40791,40793,40795,40797,40799,40801,40803,40805,40807],{"class":36,"line":10451},[34,40776,38665],{"class":40},[34,40778,31507],{"class":5869},[34,40780,153],{"class":87},[34,40782,39108],{"class":63},[34,40784,1173],{"class":40},[34,40786,31516],{"class":5869},[34,40788,153],{"class":87},[34,40790,39108],{"class":63},[34,40792,1173],{"class":40},[34,40794,31525],{"class":5869},[34,40796,153],{"class":87},[34,40798,869],{"class":63},[34,40800,1173],{"class":40},[34,40802,31534],{"class":5869},[34,40804,153],{"class":87},[34,40806,1013],{"class":63},[34,40808,38698],{"class":40},[34,40810,40811],{"class":36,"line":10456},[34,40812,38703],{"class":40},[34,40814,40815,40817,40819,40821,40823,40825,40827,40829,40831,40833,40835,40837,40839],{"class":36,"line":10465},[34,40816,38748],{"class":40},[34,40818,31525],{"class":5869},[34,40820,153],{"class":87},[34,40822,875],{"class":63},[34,40824,1173],{"class":40},[34,40826,31580],{"class":5869},[34,40828,153],{"class":87},[34,40830,875],{"class":63},[34,40832,1173],{"class":40},[34,40834,31534],{"class":5869},[34,40836,153],{"class":87},[34,40838,987],{"class":63},[34,40840,807],{"class":40},[34,40842,40843],{"class":36,"line":10470},[34,40844,38777],{"class":40},[34,40846,40847],{"class":36,"line":10476},[34,40848,39415],{"class":205},[34,40850,40851,40853,40855,40857],{"class":36,"line":10497},[34,40852,31496],{"class":63},[34,40854,39422],{"class":40},[34,40856,153],{"class":87},[34,40858,38660],{"class":40},[34,40860,40861],{"class":36,"line":10503},[34,40862,39431],{"class":205},[34,40864,40865],{"class":36,"line":10517},[34,40866,39436],{"class":205},[34,40868,40869],{"class":36,"line":10523},[34,40870,39441],{"class":40},[34,40872,40873,40875,40877,40879,40881,40883,40885,40887,40889],{"class":36,"line":10550},[34,40874,39446],{"class":40},[34,40876,1164],{"class":63},[34,40878,1250],{"class":87},[34,40880,1164],{"class":63},[34,40882,1250],{"class":87},[34,40884,39108],{"class":63},[34,40886,1173],{"class":40},[34,40888,35521],{"class":63},[34,40890,38698],{"class":40},[34,40892,40893],{"class":36,"line":10559},[34,40894,38703],{"class":40},[34,40896,40897,40899,40901,40903,40905],{"class":36,"line":10565},[34,40898,39446],{"class":40},[34,40900,35521],{"class":63},[34,40902,1173],{"class":40},[34,40904,32721],{"class":63},[34,40906,38698],{"class":40},[34,40908,40909],{"class":36,"line":10573},[34,40910,38703],{"class":40},[34,40912,40913,40915,40917,40919,40921],{"class":36,"line":10578},[34,40914,39446],{"class":40},[34,40916,32721],{"class":63},[34,40918,1173],{"class":40},[34,40920,1241],{"class":63},[34,40922,807],{"class":40},[34,40924,40925],{"class":36,"line":17256},[34,40926,38777],{"class":40},[34,40928,40929],{"class":36,"line":17262},[34,40930,3053],{"emptyLinePlaceholder":726},[34,40932,40933],{"class":36,"line":17285},[34,40934,39507],{"class":205},[34,40936,40937],{"class":36,"line":17291},[34,40938,39512],{"class":205},[34,40940,40941,40943,40945,40947,40949],{"class":36,"line":17314},[34,40942,4056],{"class":87},[34,40944,39519],{"class":40},[34,40946,26695],{"class":87},[34,40948,39524],{"class":63},[34,40950,39527],{"class":40},[34,40952,40953],{"class":36,"line":17328},[34,40954,39532],{"class":205},[34,40956,40957,40959,40961],{"class":36,"line":17348},[34,40958,5295],{"class":87},[34,40960,39539],{"class":63},[34,40962,39542],{"class":40},[34,40964,40965],{"class":36,"line":17354},[34,40966,39547],{"class":205},[34,40968,40969,40971,40973,40975,40977],{"class":36,"line":17365},[34,40970,39552],{"class":40},[34,40972,39555],{"class":5869},[34,40974,153],{"class":87},[34,40976,39560],{"class":156},[34,40978,807],{"class":40},[34,40980,40981],{"class":36,"line":17388},[34,40982,39567],{"class":205},[34,40984,40985,40987,40989,40991,40993,40995],{"class":36,"line":17410},[34,40986,39572],{"class":87},[34,40988,39575],{"class":40},[34,40990,39578],{"class":87},[34,40992,39581],{"class":87},[34,40994,39584],{"class":63},[34,40996,4392],{"class":40},[34,40998,40999],{"class":36,"line":17415},[34,41000,39591],{"class":205},[34,41002,41003,41005,41007],{"class":36,"line":17421},[34,41004,39596],{"class":40},[34,41006,987],{"class":63},[34,41008,807],{"class":40},[34,41010,41011],{"class":36,"line":17435},[34,41012,39605],{"class":205},[34,41014,41015,41017,41019],{"class":36,"line":17448},[34,41016,39610],{"class":87},[34,41018,39539],{"class":63},[34,41020,39615],{"class":40},[34,41022,41023],{"class":36,"line":17453},[34,41024,39620],{"class":205},[34,41026,41027],{"class":36,"line":17467},[34,41028,39625],{"class":205},[34,41030,41031,41033,41035,41037,41039],{"class":36,"line":17472},[34,41032,39630],{"class":40},[34,41034,987],{"class":63},[34,41036,1173],{"class":40},[34,41038,39637],{"class":63},[34,41040,807],{"class":40},[34,41042,41043],{"class":36,"line":17478},[34,41044,39644],{"class":205},[34,41046,41047,41049,41051,41053,41055,41057],{"class":36,"line":17483},[34,41048,39572],{"class":87},[34,41050,39575],{"class":40},[34,41052,39578],{"class":87},[34,41054,39581],{"class":87},[34,41056,39584],{"class":63},[34,41058,4392],{"class":40},[34,41060,41061,41063,41065],{"class":36,"line":17497},[34,41062,39596],{"class":40},[34,41064,987],{"class":63},[34,41066,807],{"class":40},[34,41068,41069],{"class":36,"line":17502},[34,41070,3053],{"emptyLinePlaceholder":726},[34,41072,41073],{"class":36,"line":17507},[34,41074,35816],{"class":205},[34,41076,41077,41079,41081],{"class":36,"line":17521},[34,41078,31452],{"class":87},[34,41080,31744],{"class":149},[34,41082,31747],{"class":40},[34,41084,41085,41087,41089,41091],{"class":36,"line":17533},[34,41086,31752],{"class":40},[34,41088,153],{"class":87},[34,41090,31474],{"class":63},[34,41092,39693],{"class":40},[34,41094,41095,41097,41099,41101],{"class":36,"line":17538},[34,41096,31752],{"class":40},[34,41098,153],{"class":87},[34,41100,31474],{"class":63},[34,41102,39704],{"class":40},[34,41104,41105,41107,41109,41111],{"class":36,"line":17551},[34,41106,31752],{"class":40},[34,41108,153],{"class":87},[34,41110,31474],{"class":63},[34,41112,39715],{"class":40},[34,41114,41115,41117,41119,41121],{"class":36,"line":17556},[34,41116,31752],{"class":40},[34,41118,153],{"class":87},[34,41120,31474],{"class":63},[34,41122,39726],{"class":40},[34,41124,41125,41127,41129,41131],{"class":36,"line":17561},[34,41126,31752],{"class":40},[34,41128,153],{"class":87},[34,41130,31474],{"class":63},[34,41132,39737],{"class":40},[34,41134,41135,41137,41139,41141],{"class":36,"line":17566},[34,41136,31752],{"class":40},[34,41138,153],{"class":87},[34,41140,31474],{"class":63},[34,41142,39748],{"class":40},[34,41144,41145,41147],{"class":36,"line":17579},[34,41146,15405],{"class":87},[34,41148,31860],{"class":40},[34,41150,41151],{"class":36,"line":17584},[34,41152,3053],{"emptyLinePlaceholder":726},[34,41154,41155],{"class":36,"line":33284},[34,41156,39763],{"class":205},[34,41158,41159,41161,41163,41165,41167],{"class":36,"line":33290},[34,41160,2191],{"class":87},[34,41162,31871],{"class":63},[34,41164,3602],{"class":87},[34,41166,39774],{"class":156},[34,41168,4392],{"class":40},[34,41170,41171,41173,41175,41177,41179,41181,41183,41185,41187],{"class":36,"line":33296},[34,41172,31888],{"class":40},[34,41174,153],{"class":87},[34,41176,31102],{"class":40},[34,41178,31895],{"class":156},[34,41180,2358],{"class":87},[34,41182,31900],{"class":40},[34,41184,2355],{"class":87},[34,41186,31127],{"class":156},[34,41188,807],{"class":40},[34,41190,41191,41193],{"class":36,"line":33302},[34,41192,31950],{"class":63},[34,41194,31136],{"class":40},[34,41196,41197,41199,41201],{"class":36,"line":33308},[34,41198,31940],{"class":40},[34,41200,153],{"class":87},[34,41202,39811],{"class":40},[34,41204,41205,41207,41209,41211,41213,41215,41217,41219],{"class":36,"line":33319},[34,41206,31950],{"class":63},[34,41208,31953],{"class":40},[34,41210,1013],{"class":63},[34,41212,1173],{"class":40},[34,41214,32152],{"class":63},[34,41216,1173],{"class":40},[34,41218,32152],{"class":63},[34,41220,31966],{"class":40},[752,41222,41223],{"start":60},[755,41224,41225],{},"测试代码",[24,41227,41229],{"className":31029,"code":41228,"language":31031,"meta":29,"style":29},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[31,41230,41231,41237,41247,41257,41261,41271,41282,41286,41290,41294,41302,41318,41328,41344,41354,41368,41372,41382,41392,41402,41408,41412,41416,41424,41428,41444,41452,41456,41460,41468,41476,41480,41484,41488,41492,41498,41502,41512,41520,41528,41532,41536,41540,41548,41552,41568,41572,41576,41580,41592,41596,41608,41612,41616,41628,41632,41642,41646,41650,41662,41666,41675,41679,41683,41691,41695,41703,41707,41711,41715,41719,41723,41739,41747,41751,41755,41803,41809,41813,41823,41831,41839,41843,41847,41851,41855,41863,41867,41883,41887,41895,41903],{"__ignoreMap":29},[34,41232,41233,41235],{"class":36,"line":37},[34,41234,31043],{"class":87},[34,41236,31046],{"class":40},[34,41238,41239,41241,41243,41245],{"class":36,"line":51},[34,41240,31043],{"class":87},[34,41242,32066],{"class":40},[34,41244,32034],{"class":87},[34,41246,32071],{"class":40},[34,41248,41249,41251,41253,41255],{"class":36,"line":60},[34,41250,31388],{"class":87},[34,41252,32049],{"class":40},[34,41254,31043],{"class":87},[34,41256,32054],{"class":40},[34,41258,41259],{"class":36,"line":76},[34,41260,34573],{"class":205},[34,41262,41263,41265,41267,41269],{"class":36,"line":93},[34,41264,31388],{"class":87},[34,41266,32019],{"class":40},[34,41268,31043],{"class":87},[34,41270,32024],{"class":40},[34,41272,41273,41275,41277,41279],{"class":36,"line":99},[34,41274,31388],{"class":87},[34,41276,32565],{"class":40},[34,41278,31043],{"class":87},[34,41280,41281],{"class":63}," VGG16\n",[34,41283,41284],{"class":36,"line":353},[34,41285,3053],{"emptyLinePlaceholder":726},[34,41287,41288],{"class":36,"line":359},[34,41289,3053],{"emptyLinePlaceholder":726},[34,41291,41292],{"class":36,"line":579},[34,41293,34602],{"class":205},[34,41295,41296,41298,41300],{"class":36,"line":589},[34,41297,32598],{"class":87},[34,41299,34609],{"class":149},[34,41301,32604],{"class":40},[34,41303,41304,41306,41308,41310,41312,41314,41316],{"class":36,"line":601},[34,41305,34616],{"class":40},[34,41307,153],{"class":87},[34,41309,32106],{"class":40},[34,41311,32109],{"class":5869},[34,41313,153],{"class":87},[34,41315,32114],{"class":156},[34,41317,32117],{"class":40},[34,41319,41320,41322,41324,41326],{"class":36,"line":613},[34,41321,34633],{"class":5869},[34,41323,153],{"class":87},[34,41325,34638],{"class":63},[34,41327,32117],{"class":40},[34,41329,41330,41332,41334,41336,41338,41340,41342],{"class":36,"line":618},[34,41331,34645],{"class":5869},[34,41333,153],{"class":87},[34,41335,32144],{"class":40},[34,41337,32147],{"class":5869},[34,41339,153],{"class":87},[34,41341,32152],{"class":63},[34,41343,32155],{"class":40},[34,41345,41346,41348,41350,41352],{"class":36,"line":628},[34,41347,34662],{"class":5869},[34,41349,153],{"class":87},[34,41351,32127],{"class":63},[34,41353,807],{"class":40},[34,41355,41356,41358,41360,41362,41364,41366],{"class":36,"line":640},[34,41357,34673],{"class":40},[34,41359,153],{"class":87},[34,41361,32185],{"class":40},[34,41363,32188],{"class":5869},[34,41365,153],{"class":87},[34,41367,34684],{"class":40},[34,41369,41370],{"class":36,"line":2301},[34,41371,34689],{"class":205},[34,41373,41374,41376,41378,41380],{"class":36,"line":2307},[34,41375,34694],{"class":5869},[34,41377,153],{"class":87},[34,41379,1013],{"class":63},[34,41381,32117],{"class":40},[34,41383,41384,41386,41388,41390],{"class":36,"line":2328},[34,41385,34705],{"class":5869},[34,41387,153],{"class":87},[34,41389,32127],{"class":63},[34,41391,32117],{"class":40},[34,41393,41394,41396,41398,41400],{"class":36,"line":2333},[34,41395,34716],{"class":5869},[34,41397,153],{"class":87},[34,41399,987],{"class":63},[34,41401,807],{"class":40},[34,41403,41404,41406],{"class":36,"line":2347},[34,41405,4743],{"class":87},[34,41407,34729],{"class":40},[34,41409,41410],{"class":36,"line":2352},[34,41411,3053],{"emptyLinePlaceholder":726},[34,41413,41414],{"class":36,"line":2381},[34,41415,34738],{"class":205},[34,41417,41418,41420,41422],{"class":36,"line":2386},[34,41419,32598],{"class":87},[34,41421,34745],{"class":149},[34,41423,34748],{"class":40},[34,41425,41426],{"class":36,"line":2403},[34,41427,34753],{"class":205},[34,41429,41430,41432,41434,41436,41438,41440,41442],{"class":36,"line":2408},[34,41431,31888],{"class":40},[34,41433,153],{"class":87},[34,41435,31895],{"class":156},[34,41437,2358],{"class":87},[34,41439,31900],{"class":40},[34,41441,2355],{"class":87},[34,41443,34770],{"class":156},[34,41445,41446,41448,41450],{"class":36,"line":2413},[34,41447,31940],{"class":40},[34,41449,153],{"class":87},[34,41451,32940],{"class":40},[34,41453,41454],{"class":36,"line":2418},[34,41455,3053],{"emptyLinePlaceholder":726},[34,41457,41458],{"class":36,"line":2432},[34,41459,34787],{"class":205},[34,41461,41462,41464,41466],{"class":36,"line":2437},[34,41463,34792],{"class":40},[34,41465,153],{"class":87},[34,41467,32993],{"class":63},[34,41469,41470,41472,41474],{"class":36,"line":3230},[34,41471,34801],{"class":40},[34,41473,153],{"class":87},[34,41475,3738],{"class":63},[34,41477,41478],{"class":36,"line":3244},[34,41479,3053],{"emptyLinePlaceholder":726},[34,41481,41482],{"class":36,"line":3252},[34,41483,34814],{"class":205},[34,41485,41486],{"class":36,"line":3257},[34,41487,34819],{"class":205},[34,41489,41490],{"class":36,"line":3263},[34,41491,34824],{"class":205},[34,41493,41494,41496],{"class":36,"line":3269},[34,41495,34829],{"class":87},[34,41497,33535],{"class":40},[34,41499,41500],{"class":36,"line":3274},[34,41501,34836],{"class":205},[34,41503,41504,41506,41508,41510],{"class":36,"line":8601},[34,41505,4056],{"class":87},[34,41507,34843],{"class":40},[34,41509,26695],{"class":87},[34,41511,34848],{"class":40},[34,41513,41514,41516,41518],{"class":36,"line":8625},[34,41515,34853],{"class":40},[34,41517,153],{"class":87},[34,41519,34858],{"class":40},[34,41521,41522,41524,41526],{"class":36,"line":8630},[34,41523,34863],{"class":40},[34,41525,153],{"class":87},[34,41527,34868],{"class":40},[34,41529,41530],{"class":36,"line":8636},[34,41531,34873],{"class":205},[34,41533,41534],{"class":36,"line":8663},[34,41535,33526],{"class":40},[34,41537,41538],{"class":36,"line":8668},[34,41539,34882],{"class":205},[34,41541,41542,41544,41546],{"class":36,"line":8674},[34,41543,33311],{"class":40},[34,41545,153],{"class":87},[34,41547,34891],{"class":40},[34,41549,41550],{"class":36,"line":8686},[34,41551,34896],{"class":205},[34,41553,41554,41556,41558,41560,41562,41564,41566],{"class":36,"line":8698},[34,41555,33328],{"class":40},[34,41557,153],{"class":87},[34,41559,33333],{"class":40},[34,41561,33336],{"class":5869},[34,41563,153],{"class":87},[34,41565,1013],{"class":63},[34,41567,807],{"class":40},[34,41569,41570],{"class":36,"line":8710},[34,41571,34917],{"class":205},[34,41573,41574],{"class":36,"line":10369},[34,41575,34922],{"class":205},[34,41577,41578],{"class":36,"line":10394},[34,41579,34927],{"class":205},[34,41581,41582,41584,41586,41588,41590],{"class":36,"line":10417},[34,41583,34932],{"class":40},[34,41585,10130],{"class":87},[34,41587,33438],{"class":40},[34,41589,3602],{"class":87},[34,41591,34941],{"class":40},[34,41593,41594],{"class":36,"line":10441},[34,41595,34946],{"class":205},[34,41597,41598,41600,41602,41604,41606],{"class":36,"line":10446},[34,41599,34951],{"class":40},[34,41601,10130],{"class":87},[34,41603,34956],{"class":40},[34,41605,987],{"class":63},[34,41607,807],{"class":40},[34,41609,41610],{"class":36,"line":10451},[34,41611,3053],{"emptyLinePlaceholder":726},[34,41613,41614],{"class":36,"line":10456},[34,41615,34969],{"class":205},[34,41617,41618,41620,41622,41624,41626],{"class":36,"line":10465},[34,41619,34974],{"class":40},[34,41621,153],{"class":87},[34,41623,34979],{"class":40},[34,41625,1379],{"class":87},[34,41627,34984],{"class":40},[34,41629,41630],{"class":36,"line":10470},[34,41631,34989],{"class":205},[34,41633,41634,41636,41638,41640],{"class":36,"line":10476},[34,41635,33102],{"class":63},[34,41637,801],{"class":40},[34,41639,34998],{"class":156},[34,41641,35001],{"class":40},[34,41643,41644],{"class":36,"line":10497},[34,41645,3053],{"emptyLinePlaceholder":726},[34,41647,41648],{"class":36,"line":10503},[34,41649,35010],{"class":205},[34,41651,41652,41654,41656,41658,41660],{"class":36,"line":10517},[34,41653,2191],{"class":87},[34,41655,31871],{"class":63},[34,41657,3602],{"class":87},[34,41659,31876],{"class":156},[34,41661,4392],{"class":40},[34,41663,41664],{"class":36,"line":10523},[34,41665,35027],{"class":205},[34,41667,41668,41670,41672],{"class":36,"line":10550},[34,41669,31940],{"class":40},[34,41671,153],{"class":87},[34,41673,41674],{"class":40},"VGG16()\n",[34,41676,41677],{"class":36,"line":10559},[34,41678,35040],{"class":205},[34,41680,41681],{"class":36,"line":10565},[34,41682,35045],{"class":205},[34,41684,41685,41687,41689],{"class":36,"line":10573},[34,41686,35050],{"class":40},[34,41688,35053],{"class":156},[34,41690,31148],{"class":40},[34,41692,41693],{"class":36,"line":10578},[34,41694,35060],{"class":205},[34,41696,41697,41699,41701],{"class":36,"line":17256},[34,41698,34673],{"class":40},[34,41700,153],{"class":87},[34,41702,35069],{"class":40},[34,41704,41705],{"class":36,"line":17262},[34,41706,35074],{"class":205},[34,41708,41709],{"class":36,"line":17285},[34,41710,35079],{"class":40},[34,41712,41713],{"class":36,"line":17291},[34,41714,3053],{"emptyLinePlaceholder":726},[34,41716,41717],{"class":36,"line":17314},[34,41718,35088],{"class":205},[34,41720,41721],{"class":36,"line":17328},[34,41722,35093],{"class":205},[34,41724,41725,41727,41729,41731,41733,41735,41737],{"class":36,"line":17348},[34,41726,31888],{"class":40},[34,41728,153],{"class":87},[34,41730,31895],{"class":156},[34,41732,2358],{"class":87},[34,41734,31900],{"class":40},[34,41736,2355],{"class":87},[34,41738,34770],{"class":156},[34,41740,41741,41743,41745],{"class":36,"line":17354},[34,41742,31940],{"class":40},[34,41744,153],{"class":87},[34,41746,32940],{"class":40},[34,41748,41749],{"class":36,"line":17365},[34,41750,35122],{"class":205},[34,41752,41753],{"class":36,"line":17388},[34,41754,35127],{"class":205},[34,41756,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801],{"class":36,"line":17410},[34,41758,35132],{"class":40},[34,41760,153],{"class":87},[34,41762,1684],{"class":40},[34,41764,35139],{"class":156},[34,41766,1173],{"class":40},[34,41768,35144],{"class":156},[34,41770,1173],{"class":40},[34,41772,35149],{"class":156},[34,41774,1173],{"class":40},[34,41776,35154],{"class":156},[34,41778,1173],{"class":40},[34,41780,35159],{"class":156},[34,41782,1173],{"class":40},[34,41784,35164],{"class":156},[34,41786,1173],{"class":40},[34,41788,35169],{"class":156},[34,41790,1173],{"class":40},[34,41792,35174],{"class":156},[34,41794,1173],{"class":40},[34,41796,35179],{"class":156},[34,41798,1173],{"class":40},[34,41800,35184],{"class":156},[34,41802,33897],{"class":40},[34,41804,41805,41807],{"class":36,"line":17415},[34,41806,34829],{"class":87},[34,41808,33535],{"class":40},[34,41810,41811],{"class":36,"line":17421},[34,41812,35197],{"class":205},[34,41814,41815,41817,41819,41821],{"class":36,"line":17435},[34,41816,4056],{"class":87},[34,41818,35204],{"class":40},[34,41820,26695],{"class":87},[34,41822,34848],{"class":40},[34,41824,41825,41827,41829],{"class":36,"line":17448},[34,41826,33261],{"class":40},[34,41828,153],{"class":87},[34,41830,33266],{"class":40},[34,41832,41833,41835,41837],{"class":36,"line":17453},[34,41834,33276],{"class":40},[34,41836,153],{"class":87},[34,41838,33281],{"class":40},[34,41840,41841],{"class":36,"line":17467},[34,41842,3053],{"emptyLinePlaceholder":726},[34,41844,41845],{"class":36,"line":17472},[34,41846,35233],{"class":205},[34,41848,41849],{"class":36,"line":17478},[34,41850,33526],{"class":40},[34,41852,41853],{"class":36,"line":17483},[34,41854,35242],{"class":205},[34,41856,41857,41859,41861],{"class":36,"line":17497},[34,41858,33311],{"class":40},[34,41860,153],{"class":87},[34,41862,33316],{"class":40},[34,41864,41865],{"class":36,"line":17502},[34,41866,35255],{"class":205},[34,41868,41869,41871,41873,41875,41877,41879,41881],{"class":36,"line":17507},[34,41870,33328],{"class":40},[34,41872,153],{"class":87},[34,41874,33333],{"class":40},[34,41876,33336],{"class":5869},[34,41878,153],{"class":87},[34,41880,1013],{"class":63},[34,41882,807],{"class":40},[34,41884,41885],{"class":36,"line":17521},[34,41886,35276],{"class":205},[34,41888,41889,41891,41893],{"class":36,"line":17533},[34,41890,35281],{"class":40},[34,41892,153],{"class":87},[34,41894,35286],{"class":40},[34,41896,41897,41899,41901],{"class":36,"line":17538},[34,41898,35291],{"class":40},[34,41900,153],{"class":87},[34,41902,35296],{"class":40},[34,41904,41905,41907,41909,41911,41913,41915,41917,41919],{"class":36,"line":17551},[34,41906,35301],{"class":63},[34,41908,801],{"class":40},[34,41910,35306],{"class":156},[34,41912,35309],{"class":40},[34,41914,35312],{"class":156},[34,41916,1173],{"class":40},[34,41918,35317],{"class":156},[34,41920,35320],{"class":40},[19,41922,41924],{"id":41923},"_23googlenet","2.3.GoogLeNet",[22650,41926,41928],{"id":41927},"_231原理","2.3.1.原理",[752,41930,41931],{},[755,41932,41933],{},"网络结构",[108,41935,41936],{},[2122,41937],{"alt":29,"src":41938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[108,41940,41941],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[108,41943,41944],{},[2122,41945],{"alt":29,"src":41946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[108,41948,41949],{},[2122,41950],{"alt":29,"src":41951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[108,41953,41954],{},[2122,41955],{"alt":29,"src":41956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[752,41958,41959],{"start":51},[755,41960,41961],{},"1x1卷积的优点",[108,41963,41964],{},[2122,41965],{"alt":29,"src":41966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[752,41968,41969],{"start":60},[755,41970,41971],{},"全局平均池化层优点",[108,41973,41974],{},[2122,41975],{"alt":29,"src":41976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[108,41978,41979],{},[2122,41980],{"alt":29,"src":41981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[752,41983,41984],{"start":76},[755,41985,41986],{},"参数详细描述",[108,41988,41989],{},[2122,41990],{"alt":29,"src":41991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[108,41993,41994],{},[2122,41995],{"alt":29,"src":41996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[108,41998,41999],{},[2122,42000],{"alt":29,"src":42001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[108,42003,42004],{},[2122,42005],{"alt":29,"src":42006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[108,42008,42009],{},[2122,42010],{"alt":29,"src":42011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[108,42013,42014],{},[2122,42015],{"alt":29,"src":42016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[108,42018,42019],{},[2122,42020],{"alt":29,"src":42021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[108,42023,42024],{},[2122,42025],{"alt":29,"src":42026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[108,42028,42029],{},[2122,42030],{"alt":29,"src":42031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[108,42033,42034],{},[2122,42035],{"alt":29,"src":42036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[108,42038,42039],{},[2122,42040],{"alt":29,"src":42041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[108,42043,42044],{},[2122,42045],{"alt":29,"src":42046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[108,42048,42049],{},[2122,42050],{"alt":29,"src":42051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[108,42053,42054],{},[2122,42055],{"alt":29,"src":42056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[108,42058,42059],{},[2122,42060],{"alt":29,"src":42061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[108,42063,42064],{},[2122,42065],{"alt":29,"src":42066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[108,42068,42069],{},[2122,42070],{"alt":29,"src":42071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[108,42073,42074],{},[2122,42075],{"alt":29,"src":42076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[108,42078,42079],{},[2122,42080],{"alt":29,"src":42081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[108,42083,42084],{},[2122,42085],{"alt":29,"src":42086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[108,42088,42089],{},[2122,42090],{"alt":29,"src":42091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22650,42093,42095],{"id":42094},"_232代码实现","2.3.2.代码实现",[752,42097,42098],{},[755,42099,31362],{},[108,42101,42102],{},"根据原理一步一步搭建即可",[24,42104,42106],{"className":31029,"code":42105,"language":31031,"meta":29,"style":29},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[31,42107,42108,42114,42124,42134,42138,42155,42164,42179,42189,42194,42227,42232,42269,42316,42321,42357,42404,42409,42414,42449,42481,42485,42493,42509,42533,42558,42579,42584,42599,42603,42607,42612,42629,42634,42643,42658,42669,42713,42717,42745,42749,42760,42788,42792,42829,42833,42861,42865,42876,42912,42944,42972,42976,42987,43021,43053,43085,43118,43152,43180,43184,43195,43228,43260,43274,43278,43291,43295,43300,43312,43320,43342,43347,43352,43357,43362,43367,43372,43386,43394,43403,43416,43431,43440,43444,43452,43463,43474,43485,43496,43507,43513,43517,43522,43534,43554,43563],{"__ignoreMap":29},[34,42109,42110,42112],{"class":36,"line":37},[34,42111,31043],{"class":87},[34,42113,31046],{"class":40},[34,42115,42116,42118,42120,42122],{"class":36,"line":51},[34,42117,31388],{"class":87},[34,42119,31391],{"class":40},[34,42121,31043],{"class":87},[34,42123,31396],{"class":40},[34,42125,42126,42128,42130,42132],{"class":36,"line":60},[34,42127,31388],{"class":87},[34,42129,31408],{"class":40},[34,42131,31043],{"class":87},[34,42133,31413],{"class":40},[34,42135,42136],{"class":36,"line":76},[34,42137,3053],{"emptyLinePlaceholder":726},[34,42139,42140,42142,42145,42147,42149,42151,42153],{"class":36,"line":93},[34,42141,15347],{"class":87},[34,42143,42144],{"class":149}," Inception",[34,42146,801],{"class":40},[34,42148,31429],{"class":149},[34,42150,1353],{"class":40},[34,42152,31434],{"class":149},[34,42154,31437],{"class":40},[34,42156,42157,42159,42161],{"class":36,"line":99},[34,42158,31452],{"class":87},[34,42160,31455],{"class":63},[34,42162,42163],{"class":40},"(self,in_channels,c1,c2,c3,c4):\n",[34,42165,42166,42168,42171,42173,42175,42177],{"class":36,"line":353},[34,42167,31468],{"class":63},[34,42169,42170],{"class":40},"(Inception,",[34,42172,31474],{"class":63},[34,42174,31477],{"class":40},[34,42176,31480],{"class":63},[34,42178,2629],{"class":40},[34,42180,42181,42183,42185,42187],{"class":36,"line":359},[34,42182,31496],{"class":63},[34,42184,35422],{"class":40},[34,42186,153],{"class":87},[34,42188,35427],{"class":40},[34,42190,42191],{"class":36,"line":579},[34,42192,42193],{"class":205},"        # 路线1：定义1*1卷积\n",[34,42195,42196,42198,42201,42203,42205,42207,42209,42212,42214,42216,42219,42221,42223,42225],{"class":36,"line":589},[34,42197,31496],{"class":63},[34,42199,42200],{"class":40},".p1_1",[34,42202,153],{"class":87},[34,42204,31504],{"class":40},[34,42206,31507],{"class":5869},[34,42208,153],{"class":87},[34,42210,42211],{"class":40},"in_channels,",[34,42213,31516],{"class":5869},[34,42215,153],{"class":87},[34,42217,42218],{"class":40},"c1,",[34,42220,31525],{"class":5869},[34,42222,153],{"class":87},[34,42224,1013],{"class":63},[34,42226,807],{"class":40},[34,42228,42229],{"class":36,"line":601},[34,42230,42231],{"class":205},"        # 路线2：定义1*1卷积和3*3\n",[34,42233,42234,42236,42239,42241,42243,42245,42247,42249,42251,42253,42256,42258,42261,42263,42265,42267],{"class":36,"line":613},[34,42235,31496],{"class":63},[34,42237,42238],{"class":40},".p2_1",[34,42240,153],{"class":87},[34,42242,31504],{"class":40},[34,42244,31507],{"class":5869},[34,42246,153],{"class":87},[34,42248,42211],{"class":40},[34,42250,31516],{"class":5869},[34,42252,153],{"class":87},[34,42254,42255],{"class":40},"c2[",[34,42257,987],{"class":63},[34,42259,42260],{"class":40},"],",[34,42262,31525],{"class":5869},[34,42264,153],{"class":87},[34,42266,1013],{"class":63},[34,42268,807],{"class":40},[34,42270,42271,42273,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314],{"class":36,"line":618},[34,42272,31496],{"class":63},[34,42274,42275],{"class":40},".p2_2",[34,42277,153],{"class":87},[34,42279,31504],{"class":40},[34,42281,31507],{"class":5869},[34,42283,153],{"class":87},[34,42285,42255],{"class":40},[34,42287,987],{"class":63},[34,42289,42260],{"class":40},[34,42291,31516],{"class":5869},[34,42293,153],{"class":87},[34,42295,42255],{"class":40},[34,42297,1013],{"class":63},[34,42299,42260],{"class":40},[34,42301,31525],{"class":5869},[34,42303,153],{"class":87},[34,42305,869],{"class":63},[34,42307,1173],{"class":40},[34,42309,31534],{"class":5869},[34,42311,153],{"class":87},[34,42313,1013],{"class":63},[34,42315,807],{"class":40},[34,42317,42318],{"class":36,"line":628},[34,42319,42320],{"class":205},"        # 路线3：定义1*1卷积和5*5\n",[34,42322,42323,42325,42328,42330,42332,42334,42336,42338,42340,42342,42345,42347,42349,42351,42353,42355],{"class":36,"line":640},[34,42324,31496],{"class":63},[34,42326,42327],{"class":40},".p3_1",[34,42329,153],{"class":87},[34,42331,31504],{"class":40},[34,42333,31507],{"class":5869},[34,42335,153],{"class":87},[34,42337,42211],{"class":40},[34,42339,31516],{"class":5869},[34,42341,153],{"class":87},[34,42343,42344],{"class":40},"c3[",[34,42346,987],{"class":63},[34,42348,42260],{"class":40},[34,42350,31525],{"class":5869},[34,42352,153],{"class":87},[34,42354,1013],{"class":63},[34,42356,807],{"class":40},[34,42358,42359,42361,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398,42400,42402],{"class":36,"line":2301},[34,42360,31496],{"class":63},[34,42362,42363],{"class":40},".p3_2",[34,42365,153],{"class":87},[34,42367,31504],{"class":40},[34,42369,31507],{"class":5869},[34,42371,153],{"class":87},[34,42373,42344],{"class":40},[34,42375,987],{"class":63},[34,42377,42260],{"class":40},[34,42379,31516],{"class":5869},[34,42381,153],{"class":87},[34,42383,42344],{"class":40},[34,42385,1013],{"class":63},[34,42387,42260],{"class":40},[34,42389,31525],{"class":5869},[34,42391,153],{"class":87},[34,42393,1114],{"class":63},[34,42395,1173],{"class":40},[34,42397,31534],{"class":5869},[34,42399,153],{"class":87},[34,42401,875],{"class":63},[34,42403,807],{"class":40},[34,42405,42406],{"class":36,"line":2307},[34,42407,42408],{"class":205},"        # 路线4：定义3*3最大池化和1*1卷积\n",[34,42410,42411],{"class":36,"line":2328},[34,42412,42413],{"class":205},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[34,42415,42416,42418,42421,42423,42425,42427,42429,42431,42433,42435,42437,42439,42441,42443,42445,42447],{"class":36,"line":2333},[34,42417,31496],{"class":63},[34,42419,42420],{"class":40},".p4_1",[34,42422,153],{"class":87},[34,42424,35480],{"class":40},[34,42426,31525],{"class":5869},[34,42428,153],{"class":87},[34,42430,869],{"class":63},[34,42432,1173],{"class":40},[34,42434,31580],{"class":5869},[34,42436,153],{"class":87},[34,42438,1013],{"class":63},[34,42440,1173],{"class":40},[34,42442,31534],{"class":5869},[34,42444,153],{"class":87},[34,42446,1013],{"class":63},[34,42448,807],{"class":40},[34,42450,42451,42453,42456,42458,42460,42462,42464,42466,42468,42470,42473,42475,42477,42479],{"class":36,"line":2347},[34,42452,31496],{"class":63},[34,42454,42455],{"class":40},".p4_2",[34,42457,153],{"class":87},[34,42459,31504],{"class":40},[34,42461,31507],{"class":5869},[34,42463,153],{"class":87},[34,42465,42211],{"class":40},[34,42467,31516],{"class":5869},[34,42469,153],{"class":87},[34,42471,42472],{"class":40},"c4,",[34,42474,31525],{"class":5869},[34,42476,153],{"class":87},[34,42478,1013],{"class":63},[34,42480,807],{"class":40},[34,42482,42483],{"class":36,"line":2352},[34,42484,3053],{"emptyLinePlaceholder":726},[34,42486,42487,42489,42491],{"class":36,"line":2381},[34,42488,31452],{"class":87},[34,42490,31744],{"class":149},[34,42492,31747],{"class":40},[34,42494,42495,42498,42500,42502,42504,42506],{"class":36,"line":2386},[34,42496,42497],{"class":40},"        p1",[34,42499,153],{"class":87},[34,42501,31474],{"class":63},[34,42503,35835],{"class":40},[34,42505,31474],{"class":63},[34,42507,42508],{"class":40},".p1_1(x))\n",[34,42510,42511,42513,42515,42517,42519,42521,42524,42526,42528,42530],{"class":36,"line":2403},[34,42512,7738],{"class":40},[34,42514,153],{"class":87},[34,42516,31474],{"class":63},[34,42518,35835],{"class":40},[34,42520,31474],{"class":63},[34,42522,42523],{"class":40},".p2_2(",[34,42525,31474],{"class":63},[34,42527,35835],{"class":40},[34,42529,31474],{"class":63},[34,42531,42532],{"class":40},".p2_1(x))))\n",[34,42534,42535,42538,42540,42542,42544,42546,42549,42551,42553,42555],{"class":36,"line":2408},[34,42536,42537],{"class":40},"        p3",[34,42539,153],{"class":87},[34,42541,31474],{"class":63},[34,42543,35835],{"class":40},[34,42545,31474],{"class":63},[34,42547,42548],{"class":40},".p3_2(",[34,42550,31474],{"class":63},[34,42552,35835],{"class":40},[34,42554,31474],{"class":63},[34,42556,42557],{"class":40},".p3_1(x))))\n",[34,42559,42560,42563,42565,42567,42569,42571,42574,42576],{"class":36,"line":2413},[34,42561,42562],{"class":40},"        p4",[34,42564,153],{"class":87},[34,42566,31474],{"class":63},[34,42568,35835],{"class":40},[34,42570,31474],{"class":63},[34,42572,42573],{"class":40},".p4_2(",[34,42575,31474],{"class":63},[34,42577,42578],{"class":40},".p4_1(x)))\n",[34,42580,42581],{"class":36,"line":2418},[34,42582,42583],{"class":205},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[34,42585,42586,42588,42591,42593,42595,42597],{"class":36,"line":2432},[34,42587,15405],{"class":87},[34,42589,42590],{"class":40}," torch.cat((p1,p2,p3,p4),",[34,42592,33336],{"class":5869},[34,42594,153],{"class":87},[34,42596,1013],{"class":63},[34,42598,807],{"class":40},[34,42600,42601],{"class":36,"line":2437},[34,42602,3053],{"emptyLinePlaceholder":726},[34,42604,42605],{"class":36,"line":3230},[34,42606,3053],{"emptyLinePlaceholder":726},[34,42608,42609],{"class":36,"line":3244},[34,42610,42611],{"class":205},"# 搭建GoogLeNet网络\n",[34,42613,42614,42616,42619,42621,42623,42625,42627],{"class":36,"line":3252},[34,42615,15347],{"class":87},[34,42617,42618],{"class":149}," GoogLeNet",[34,42620,801],{"class":40},[34,42622,31429],{"class":149},[34,42624,1353],{"class":40},[34,42626,31434],{"class":149},[34,42628,31437],{"class":40},[34,42630,42631],{"class":36,"line":3257},[34,42632,42633],{"class":205},"    # 必须把Inception导入到里边\n",[34,42635,42636,42638,42640],{"class":36,"line":3263},[34,42637,31452],{"class":87},[34,42639,31455],{"class":63},[34,42641,42642],{"class":40},"(self,Inception):\n",[34,42644,42645,42647,42650,42652,42654,42656],{"class":36,"line":3269},[34,42646,31468],{"class":63},[34,42648,42649],{"class":40},"(GoogLeNet,",[34,42651,31474],{"class":63},[34,42653,31477],{"class":40},[34,42655,31480],{"class":63},[34,42657,2629],{"class":40},[34,42659,42660,42662,42665,42667],{"class":36,"line":3274},[34,42661,31496],{"class":63},[34,42663,42664],{"class":40},".b1",[34,42666,153],{"class":87},[34,42668,38660],{"class":40},[34,42670,42671,42673,42675,42677,42679,42681,42683,42685,42687,42689,42691,42693,42695,42697,42699,42701,42703,42705,42707,42709,42711],{"class":36,"line":8601},[34,42672,38665],{"class":40},[34,42674,31507],{"class":5869},[34,42676,153],{"class":87},[34,42678,1013],{"class":63},[34,42680,1173],{"class":40},[34,42682,31516],{"class":5869},[34,42684,153],{"class":87},[34,42686,999],{"class":63},[34,42688,1173],{"class":40},[34,42690,31525],{"class":5869},[34,42692,153],{"class":87},[34,42694,1164],{"class":63},[34,42696,1173],{"class":40},[34,42698,31580],{"class":5869},[34,42700,153],{"class":87},[34,42702,875],{"class":63},[34,42704,1173],{"class":40},[34,42706,31534],{"class":5869},[34,42708,153],{"class":87},[34,42710,869],{"class":63},[34,42712,38698],{"class":40},[34,42714,42715],{"class":36,"line":8625},[34,42716,38703],{"class":40},[34,42718,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739,42741,42743],{"class":36,"line":8630},[34,42720,38748],{"class":40},[34,42722,31525],{"class":5869},[34,42724,153],{"class":87},[34,42726,869],{"class":63},[34,42728,1173],{"class":40},[34,42730,31580],{"class":5869},[34,42732,153],{"class":87},[34,42734,875],{"class":63},[34,42736,1173],{"class":40},[34,42738,31534],{"class":5869},[34,42740,153],{"class":87},[34,42742,1013],{"class":63},[34,42744,807],{"class":40},[34,42746,42747],{"class":36,"line":8636},[34,42748,38777],{"class":40},[34,42750,42751,42753,42756,42758],{"class":36,"line":8663},[34,42752,31496],{"class":63},[34,42754,42755],{"class":40},".b2",[34,42757,153],{"class":87},[34,42759,38660],{"class":40},[34,42761,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780,42782,42784,42786],{"class":36,"line":8668},[34,42763,38665],{"class":40},[34,42765,31507],{"class":5869},[34,42767,153],{"class":87},[34,42769,999],{"class":63},[34,42771,1173],{"class":40},[34,42773,31516],{"class":5869},[34,42775,153],{"class":87},[34,42777,999],{"class":63},[34,42779,1173],{"class":40},[34,42781,31525],{"class":5869},[34,42783,153],{"class":87},[34,42785,1013],{"class":63},[34,42787,38698],{"class":40},[34,42789,42790],{"class":36,"line":8674},[34,42791,38703],{"class":40},[34,42793,42794,42796,42798,42800,42802,42804,42806,42808,42811,42813,42815,42817,42819,42821,42823,42825,42827],{"class":36,"line":8686},[34,42795,38665],{"class":40},[34,42797,31507],{"class":5869},[34,42799,153],{"class":87},[34,42801,999],{"class":63},[34,42803,1173],{"class":40},[34,42805,31516],{"class":5869},[34,42807,153],{"class":87},[34,42809,42810],{"class":63},"192",[34,42812,1173],{"class":40},[34,42814,31525],{"class":5869},[34,42816,153],{"class":87},[34,42818,869],{"class":63},[34,42820,1173],{"class":40},[34,42822,31534],{"class":5869},[34,42824,153],{"class":87},[34,42826,1013],{"class":63},[34,42828,38698],{"class":40},[34,42830,42831],{"class":36,"line":8698},[34,42832,38703],{"class":40},[34,42834,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859],{"class":36,"line":8710},[34,42836,38748],{"class":40},[34,42838,31525],{"class":5869},[34,42840,153],{"class":87},[34,42842,869],{"class":63},[34,42844,1173],{"class":40},[34,42846,31580],{"class":5869},[34,42848,153],{"class":87},[34,42850,875],{"class":63},[34,42852,1173],{"class":40},[34,42854,31534],{"class":5869},[34,42856,153],{"class":87},[34,42858,1013],{"class":63},[34,42860,807],{"class":40},[34,42862,42863],{"class":36,"line":10369},[34,42864,38777],{"class":40},[34,42866,42867,42869,42872,42874],{"class":36,"line":10394},[34,42868,31496],{"class":63},[34,42870,42871],{"class":40},".b3",[34,42873,153],{"class":87},[34,42875,38660],{"class":40},[34,42877,42878,42881,42883,42885,42887,42890,42892,42894,42896,42899,42901,42903,42905,42908,42910],{"class":36,"line":10417},[34,42879,42880],{"class":40},"            Inception(",[34,42882,42810],{"class":63},[34,42884,1173],{"class":40},[34,42886,999],{"class":63},[34,42888,42889],{"class":40},",(",[34,42891,1005],{"class":63},[34,42893,1173],{"class":40},[34,42895,32721],{"class":63},[34,42897,42898],{"class":40},"),(",[34,42900,1396],{"class":63},[34,42902,1173],{"class":40},[34,42904,993],{"class":63},[34,42906,42907],{"class":40},"),",[34,42909,993],{"class":63},[34,42911,38698],{"class":40},[34,42913,42914,42916,42918,42920,42922,42924,42926,42928,42930,42932,42934,42936,42938,42940,42942],{"class":36,"line":10441},[34,42915,42880],{"class":40},[34,42917,35521],{"class":63},[34,42919,1173],{"class":40},[34,42921,32721],{"class":63},[34,42923,42889],{"class":40},[34,42925,32721],{"class":63},[34,42927,1173],{"class":40},[34,42929,42810],{"class":63},[34,42931,42898],{"class":40},[34,42933,993],{"class":63},[34,42935,1173],{"class":40},[34,42937,1005],{"class":63},[34,42939,42907],{"class":40},[34,42941,999],{"class":63},[34,42943,38698],{"class":40},[34,42945,42946,42948,42950,42952,42954,42956,42958,42960,42962,42964,42966,42968,42970],{"class":36,"line":10446},[34,42947,38748],{"class":40},[34,42949,31525],{"class":5869},[34,42951,153],{"class":87},[34,42953,869],{"class":63},[34,42955,1173],{"class":40},[34,42957,31580],{"class":5869},[34,42959,153],{"class":87},[34,42961,875],{"class":63},[34,42963,1173],{"class":40},[34,42965,31534],{"class":5869},[34,42967,153],{"class":87},[34,42969,1013],{"class":63},[34,42971,807],{"class":40},[34,42973,42974],{"class":36,"line":10451},[34,42975,38777],{"class":40},[34,42977,42978,42980,42983,42985],{"class":36,"line":10456},[34,42979,31496],{"class":63},[34,42981,42982],{"class":40},".b4",[34,42984,153],{"class":87},[34,42986,38660],{"class":40},[34,42988,42989,42991,42994,42996,42998,43000,43002,43004,43007,43009,43011,43013,43015,43017,43019],{"class":36,"line":10465},[34,42990,42880],{"class":40},[34,42992,42993],{"class":63},"480",[34,42995,1173],{"class":40},[34,42997,42810],{"class":63},[34,42999,42889],{"class":40},[34,43001,1005],{"class":63},[34,43003,1173],{"class":40},[34,43005,43006],{"class":63},"208",[34,43008,42898],{"class":40},[34,43010,1396],{"class":63},[34,43012,1173],{"class":40},[34,43014,1402],{"class":63},[34,43016,42907],{"class":40},[34,43018,999],{"class":63},[34,43020,38698],{"class":40},[34,43022,43023,43025,43027,43029,43031,43033,43035,43037,43039,43041,43043,43045,43047,43049,43051],{"class":36,"line":10470},[34,43024,42880],{"class":40},[34,43026,39108],{"class":63},[34,43028,1173],{"class":40},[34,43030,21700],{"class":63},[34,43032,42889],{"class":40},[34,43034,1413],{"class":63},[34,43036,1173],{"class":40},[34,43038,32152],{"class":63},[34,43040,42898],{"class":40},[34,43042,84],{"class":63},[34,43044,1173],{"class":40},[34,43046,999],{"class":63},[34,43048,42907],{"class":40},[34,43050,999],{"class":63},[34,43052,38698],{"class":40},[34,43054,43055,43057,43059,43061,43063,43065,43067,43069,43071,43073,43075,43077,43079,43081,43083],{"class":36,"line":10476},[34,43056,42880],{"class":40},[34,43058,39108],{"class":63},[34,43060,1173],{"class":40},[34,43062,32721],{"class":63},[34,43064,42889],{"class":40},[34,43066,32721],{"class":63},[34,43068,1173],{"class":40},[34,43070,35521],{"class":63},[34,43072,42898],{"class":40},[34,43074,84],{"class":63},[34,43076,1173],{"class":40},[34,43078,999],{"class":63},[34,43080,42907],{"class":40},[34,43082,999],{"class":63},[34,43084,38698],{"class":40},[34,43086,43087,43089,43091,43093,43095,43097,43099,43101,43104,43106,43108,43110,43112,43114,43116],{"class":36,"line":10497},[34,43088,42880],{"class":40},[34,43090,39108],{"class":63},[34,43092,1173],{"class":40},[34,43094,1413],{"class":63},[34,43096,42889],{"class":40},[34,43098,32721],{"class":63},[34,43100,1173],{"class":40},[34,43102,43103],{"class":63},"288",[34,43105,42898],{"class":40},[34,43107,993],{"class":63},[34,43109,1173],{"class":40},[34,43111,999],{"class":63},[34,43113,42907],{"class":40},[34,43115,999],{"class":63},[34,43117,38698],{"class":40},[34,43119,43120,43122,43125,43127,43129,43131,43133,43135,43138,43140,43142,43144,43146,43148,43150],{"class":36,"line":10503},[34,43121,42880],{"class":40},[34,43123,43124],{"class":63},"528",[34,43126,1173],{"class":40},[34,43128,35521],{"class":63},[34,43130,42889],{"class":40},[34,43132,21700],{"class":63},[34,43134,1173],{"class":40},[34,43136,43137],{"class":63},"320",[34,43139,42898],{"class":40},[34,43141,993],{"class":63},[34,43143,1173],{"class":40},[34,43145,32721],{"class":63},[34,43147,42907],{"class":40},[34,43149,32721],{"class":63},[34,43151,38698],{"class":40},[34,43153,43154,43156,43158,43160,43162,43164,43166,43168,43170,43172,43174,43176,43178],{"class":36,"line":10517},[34,43155,38748],{"class":40},[34,43157,31525],{"class":5869},[34,43159,153],{"class":87},[34,43161,869],{"class":63},[34,43163,1173],{"class":40},[34,43165,31580],{"class":5869},[34,43167,153],{"class":87},[34,43169,875],{"class":63},[34,43171,1173],{"class":40},[34,43173,31534],{"class":5869},[34,43175,153],{"class":87},[34,43177,1013],{"class":63},[34,43179,807],{"class":40},[34,43181,43182],{"class":36,"line":10523},[34,43183,38777],{"class":40},[34,43185,43186,43188,43191,43193],{"class":36,"line":10550},[34,43187,31496],{"class":63},[34,43189,43190],{"class":40},".b5",[34,43192,153],{"class":87},[34,43194,38660],{"class":40},[34,43196,43197,43199,43202,43204,43206,43208,43210,43212,43214,43216,43218,43220,43222,43224,43226],{"class":36,"line":10559},[34,43198,42880],{"class":40},[34,43200,43201],{"class":63},"832",[34,43203,1173],{"class":40},[34,43205,35521],{"class":63},[34,43207,42889],{"class":40},[34,43209,21700],{"class":63},[34,43211,1173],{"class":40},[34,43213,43137],{"class":63},[34,43215,42898],{"class":40},[34,43217,993],{"class":63},[34,43219,1173],{"class":40},[34,43221,32721],{"class":63},[34,43223,42907],{"class":40},[34,43225,32721],{"class":63},[34,43227,38698],{"class":40},[34,43229,43230,43232,43234,43236,43238,43240,43242,43244,43246,43248,43250,43252,43254,43256,43258],{"class":36,"line":10565},[34,43231,42880],{"class":40},[34,43233,43201],{"class":63},[34,43235,1173],{"class":40},[34,43237,35591],{"class":63},[34,43239,42889],{"class":40},[34,43241,42810],{"class":63},[34,43243,1173],{"class":40},[34,43245,35591],{"class":63},[34,43247,42898],{"class":40},[34,43249,1402],{"class":63},[34,43251,1173],{"class":40},[34,43253,32721],{"class":63},[34,43255,42907],{"class":40},[34,43257,32721],{"class":63},[34,43259,38698],{"class":40},[34,43261,43262,43265,43267,43269,43271],{"class":36,"line":10573},[34,43263,43264],{"class":40},"            nn.AdaptiveAvgPool2d((",[34,43266,1013],{"class":63},[34,43268,1173],{"class":40},[34,43270,1013],{"class":63},[34,43272,43273],{"class":40},")),\n",[34,43275,43276],{"class":36,"line":10578},[34,43277,39441],{"class":40},[34,43279,43280,43282,43285,43287,43289],{"class":36,"line":17256},[34,43281,39446],{"class":40},[34,43283,43284],{"class":63},"1024",[34,43286,1173],{"class":40},[34,43288,1241],{"class":63},[34,43290,807],{"class":40},[34,43292,43293],{"class":36,"line":17262},[34,43294,38777],{"class":40},[34,43296,43297],{"class":36,"line":17285},[34,43298,43299],{"class":205},"        # 对模型参数初始化\n",[34,43301,43302,43304,43306,43308,43310],{"class":36,"line":17291},[34,43303,4056],{"class":87},[34,43305,39519],{"class":40},[34,43307,26695],{"class":87},[34,43309,39524],{"class":63},[34,43311,39527],{"class":40},[34,43313,43314,43316,43318],{"class":36,"line":17314},[34,43315,5295],{"class":87},[34,43317,39539],{"class":63},[34,43319,39542],{"class":40},[34,43321,43322,43324,43327,43329,43332,43334,43336,43338,43340],{"class":36,"line":17328},[34,43323,39552],{"class":40},[34,43325,43326],{"class":5869},"mode",[34,43328,153],{"class":87},[34,43330,43331],{"class":156},"'fan_out'",[34,43333,1173],{"class":40},[34,43335,39555],{"class":5869},[34,43337,153],{"class":87},[34,43339,39560],{"class":156},[34,43341,807],{"class":40},[34,43343,43344],{"class":36,"line":17348},[34,43345,43346],{"class":205},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[34,43348,43349],{"class":36,"line":17354},[34,43350,43351],{"class":205},"                # ② mode = 'fan_out'决定使用的fan值：\n",[34,43353,43354],{"class":36,"line":17365},[34,43355,43356],{"class":205},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[34,43358,43359],{"class":36,"line":17388},[34,43360,43361],{"class":205},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[34,43363,43364],{"class":36,"line":17410},[34,43365,43366],{"class":205},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[34,43368,43369],{"class":36,"line":17415},[34,43370,43371],{"class":205},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[34,43373,43374,43376,43378,43380,43382,43384],{"class":36,"line":17421},[34,43375,39572],{"class":87},[34,43377,39575],{"class":40},[34,43379,39578],{"class":87},[34,43381,39581],{"class":87},[34,43383,39584],{"class":63},[34,43385,4392],{"class":40},[34,43387,43388,43390,43392],{"class":36,"line":17435},[34,43389,39596],{"class":40},[34,43391,987],{"class":63},[34,43393,807],{"class":40},[34,43395,43396,43399,43401],{"class":36,"line":17448},[34,43397,43398],{"class":87},"                elif",[34,43400,39539],{"class":63},[34,43402,39615],{"class":40},[34,43404,43405,43408,43410,43412,43414],{"class":36,"line":17453},[34,43406,43407],{"class":40},"                    nn.init.normal_(m.weight,",[34,43409,987],{"class":63},[34,43411,1173],{"class":40},[34,43413,39637],{"class":63},[34,43415,807],{"class":40},[34,43417,43418,43421,43423,43425,43427,43429],{"class":36,"line":17467},[34,43419,43420],{"class":87},"                    if",[34,43422,39575],{"class":40},[34,43424,39578],{"class":87},[34,43426,39581],{"class":87},[34,43428,39584],{"class":63},[34,43430,4392],{"class":40},[34,43432,43433,43436,43438],{"class":36,"line":17472},[34,43434,43435],{"class":40},"                        nn.init.constant_(m.bias,",[34,43437,987],{"class":63},[34,43439,807],{"class":40},[34,43441,43442],{"class":36,"line":17478},[34,43443,35816],{"class":205},[34,43445,43446,43448,43450],{"class":36,"line":17483},[34,43447,31452],{"class":87},[34,43449,31744],{"class":149},[34,43451,31747],{"class":40},[34,43453,43454,43456,43458,43460],{"class":36,"line":17497},[34,43455,31752],{"class":40},[34,43457,153],{"class":87},[34,43459,31474],{"class":63},[34,43461,43462],{"class":40},".b1(x)\n",[34,43464,43465,43467,43469,43471],{"class":36,"line":17502},[34,43466,31752],{"class":40},[34,43468,153],{"class":87},[34,43470,31474],{"class":63},[34,43472,43473],{"class":40},".b2(x)\n",[34,43475,43476,43478,43480,43482],{"class":36,"line":17507},[34,43477,31752],{"class":40},[34,43479,153],{"class":87},[34,43481,31474],{"class":63},[34,43483,43484],{"class":40},".b3(x)\n",[34,43486,43487,43489,43491,43493],{"class":36,"line":17521},[34,43488,31752],{"class":40},[34,43490,153],{"class":87},[34,43492,31474],{"class":63},[34,43494,43495],{"class":40},".b4(x)\n",[34,43497,43498,43500,43502,43504],{"class":36,"line":17533},[34,43499,31752],{"class":40},[34,43501,153],{"class":87},[34,43503,31474],{"class":63},[34,43505,43506],{"class":40},".b5(x)\n",[34,43508,43509,43511],{"class":36,"line":17538},[34,43510,15405],{"class":87},[34,43512,31860],{"class":40},[34,43514,43515],{"class":36,"line":17551},[34,43516,3053],{"emptyLinePlaceholder":726},[34,43518,43519],{"class":36,"line":17556},[34,43520,43521],{"class":205},"# 模型展示\n",[34,43523,43524,43526,43528,43530,43532],{"class":36,"line":17561},[34,43525,2191],{"class":87},[34,43527,31871],{"class":63},[34,43529,3602],{"class":87},[34,43531,31876],{"class":156},[34,43533,4392],{"class":40},[34,43535,43536,43538,43540,43542,43544,43546,43548,43550,43552],{"class":36,"line":17566},[34,43537,31888],{"class":40},[34,43539,153],{"class":87},[34,43541,31102],{"class":40},[34,43543,31895],{"class":156},[34,43545,2358],{"class":87},[34,43547,31900],{"class":40},[34,43549,2355],{"class":87},[34,43551,31127],{"class":156},[34,43553,807],{"class":40},[34,43555,43556,43558,43560],{"class":36,"line":17579},[34,43557,31940],{"class":40},[34,43559,153],{"class":87},[34,43561,43562],{"class":40},"GoogLeNet(Inception).to(device)\n",[34,43564,43565,43567,43569,43571,43573,43575,43577,43579],{"class":36,"line":17584},[34,43566,31950],{"class":63},[34,43568,31953],{"class":40},[34,43570,1013],{"class":63},[34,43572,1173],{"class":40},[34,43574,32152],{"class":63},[34,43576,1173],{"class":40},[34,43578,32152],{"class":63},[34,43580,31966],{"class":40},[752,43582,43583],{"start":51},[755,43584,39834],{},[24,43586,43588],{"className":31029,"code":43587,"language":31031,"meta":29,"style":29},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[31,43589,43590,43596,43602,43612,43618,43628,43638,43648,43658,43668,43672,43683,43693,43697,43701,43705,43713,43725,43735,43751,43761,43793,43807,43817,43827,43831,43841,43855,43865,43875,43885,43891,43895,43899,43903,43907,43911,43919,43939,43943,43947,43951,43955,43959,43975,43979,43983,43991,43995,43999,44007,44011,44015,44019,44027,44031,44035,44039,44043,44051,44055,44063,44067,44075,44079,44087,44091,44099,44103,44107,44115,44119,44123,44127,44139,44163,44177,44181,44185,44189,44197,44201,44209,44213,44221,44225,44233,44237,44245,44249,44257,44261,44273,44277,44285,44289,44297,44301,44305,44309,44313,44321,44325,44341,44345,44353,44357,44361,44365,44369,44373,44377,44381,44397,44401,44413,44417,44429,44433,44445,44449,44457,44461,44469,44473,44477,44481,44487,44491,44499,44503,44519,44523,44531,44535,44551,44563,44567,44579,44583,44587,44595,44599,44603,44611,44615,44623,44627,44635,44639,44643,44685,44727,44731,44735,44751,44755,44771,44775,44779,44787,44791,44795,44807,44845,44849,44853,44861,44865,44879,44889,44895,44901,44907,44913,44917,44921,44927,44931,44935,44943,44947,44965,44969,44973,44977,44993,44997,45001,45005,45009,45013,45033,45053,45057,45061,45065,45073,45081,45085,45101,45121,45141,45145,45149,45157,45165,45169,45173,45177,45189,45193,45203,45211,45228],{"__ignoreMap":29},[34,43591,43592,43594],{"class":36,"line":37},[34,43593,31043],{"class":87},[34,43595,32473],{"class":40},[34,43597,43598,43600],{"class":36,"line":51},[34,43599,31043],{"class":87},[34,43601,32480],{"class":40},[34,43603,43604,43606,43608,43610],{"class":36,"line":60},[34,43605,31043],{"class":87},[34,43607,32491],{"class":40},[34,43609,32034],{"class":87},[34,43611,32496],{"class":40},[34,43613,43614,43616],{"class":36,"line":76},[34,43615,31043],{"class":87},[34,43617,31046],{"class":40},[34,43619,43620,43622,43624,43626],{"class":36,"line":93},[34,43621,31388],{"class":87},[34,43623,32066],{"class":40},[34,43625,31043],{"class":87},[34,43627,32513],{"class":40},[34,43629,43630,43632,43634,43636],{"class":36,"line":99},[34,43631,31388],{"class":87},[34,43633,32019],{"class":40},[34,43635,31043],{"class":87},[34,43637,32024],{"class":40},[34,43639,43640,43642,43644,43646],{"class":36,"line":353},[34,43641,31388],{"class":87},[34,43643,32049],{"class":40},[34,43645,31043],{"class":87},[34,43647,32054],{"class":40},[34,43649,43650,43652,43654,43656],{"class":36,"line":359},[34,43651,31043],{"class":87},[34,43653,32066],{"class":40},[34,43655,32034],{"class":87},[34,43657,32071],{"class":40},[34,43659,43660,43662,43664,43666],{"class":36,"line":579},[34,43661,31043],{"class":87},[34,43663,32083],{"class":40},[34,43665,32034],{"class":87},[34,43667,32088],{"class":40},[34,43669,43670],{"class":36,"line":589},[34,43671,32558],{"class":205},[34,43673,43674,43676,43678,43680],{"class":36,"line":601},[34,43675,31388],{"class":87},[34,43677,32565],{"class":40},[34,43679,31043],{"class":87},[34,43681,43682],{"class":40}," GoogLeNet, Inception\n",[34,43684,43685,43687,43689,43691],{"class":36,"line":613},[34,43686,31388],{"class":87},[34,43688,31391],{"class":40},[34,43690,31043],{"class":87},[34,43692,31396],{"class":40},[34,43694,43695],{"class":36,"line":618},[34,43696,3053],{"emptyLinePlaceholder":726},[34,43698,43699],{"class":36,"line":628},[34,43700,3053],{"emptyLinePlaceholder":726},[34,43702,43703],{"class":36,"line":640},[34,43704,32593],{"class":205},[34,43706,43707,43709,43711],{"class":36,"line":2301},[34,43708,32598],{"class":87},[34,43710,32601],{"class":149},[34,43712,32604],{"class":40},[34,43714,43715,43717,43719,43721,43723],{"class":36,"line":2307},[34,43716,32609],{"class":40},[34,43718,153],{"class":87},[34,43720,32106],{"class":40},[34,43722,32114],{"class":156},[34,43724,32117],{"class":40},[34,43726,43727,43729,43731,43733],{"class":36,"line":2328},[34,43728,32622],{"class":5869},[34,43730,153],{"class":87},[34,43732,32127],{"class":63},[34,43734,32117],{"class":40},[34,43736,43737,43739,43741,43743,43745,43747,43749],{"class":36,"line":2333},[34,43738,32633],{"class":5869},[34,43740,153],{"class":87},[34,43742,32144],{"class":40},[34,43744,32147],{"class":5869},[34,43746,153],{"class":87},[34,43748,36100],{"class":63},[34,43750,32155],{"class":40},[34,43752,43753,43755,43757,43759],{"class":36,"line":2347},[34,43754,32650],{"class":5869},[34,43756,153],{"class":87},[34,43758,32127],{"class":63},[34,43760,807],{"class":40},[34,43762,43763,43765,43767,43769,43771,43773,43775,43777,43779,43781,43783,43785,43787,43789,43791],{"class":36,"line":2352},[34,43764,32661],{"class":40},[34,43766,153],{"class":87},[34,43768,32666],{"class":40},[34,43770,32669],{"class":63},[34,43772,801],{"class":40},[34,43774,32674],{"class":63},[34,43776,1250],{"class":87},[34,43778,8011],{"class":63},[34,43780,32681],{"class":40},[34,43782,32669],{"class":63},[34,43784,801],{"class":40},[34,43786,32688],{"class":63},[34,43788,1250],{"class":87},[34,43790,8011],{"class":63},[34,43792,32695],{"class":40},[34,43794,43795,43797,43799,43801,43803,43805],{"class":36,"line":2381},[34,43796,32700],{"class":40},[34,43798,153],{"class":87},[34,43800,32705],{"class":40},[34,43802,32188],{"class":5869},[34,43804,153],{"class":87},[34,43806,32193],{"class":40},[34,43808,43809,43811,43813,43815],{"class":36,"line":2386},[34,43810,32716],{"class":5869},[34,43812,153],{"class":87},[34,43814,993],{"class":63},[34,43816,32117],{"class":40},[34,43818,43819,43821,43823,43825],{"class":36,"line":2403},[34,43820,32728],{"class":5869},[34,43822,153],{"class":87},[34,43824,32127],{"class":63},[34,43826,32117],{"class":40},[34,43828,43829],{"class":36,"line":2408},[34,43830,32739],{"class":205},[34,43832,43833,43835,43837,43839],{"class":36,"line":2413},[34,43834,32744],{"class":5869},[34,43836,153],{"class":87},[34,43838,1190],{"class":63},[34,43840,807],{"class":40},[34,43842,43843,43845,43847,43849,43851,43853],{"class":36,"line":2418},[34,43844,32755],{"class":40},[34,43846,153],{"class":87},[34,43848,32185],{"class":40},[34,43850,32188],{"class":5869},[34,43852,153],{"class":87},[34,43854,32766],{"class":40},[34,43856,43857,43859,43861,43863],{"class":36,"line":2432},[34,43858,32771],{"class":5869},[34,43860,153],{"class":87},[34,43862,993],{"class":63},[34,43864,32117],{"class":40},[34,43866,43867,43869,43871,43873],{"class":36,"line":2437},[34,43868,32782],{"class":5869},[34,43870,153],{"class":87},[34,43872,32127],{"class":63},[34,43874,32117],{"class":40},[34,43876,43877,43879,43881,43883],{"class":36,"line":3230},[34,43878,32793],{"class":5869},[34,43880,153],{"class":87},[34,43882,1190],{"class":63},[34,43884,807],{"class":40},[34,43886,43887,43889],{"class":36,"line":3244},[34,43888,4743],{"class":87},[34,43890,32806],{"class":40},[34,43892,43893],{"class":36,"line":3252},[34,43894,3053],{"emptyLinePlaceholder":726},[34,43896,43897],{"class":36,"line":3257},[34,43898,32815],{"class":205},[34,43900,43901],{"class":36,"line":3263},[34,43902,32820],{"class":205},[34,43904,43905],{"class":36,"line":3269},[34,43906,3053],{"emptyLinePlaceholder":726},[34,43908,43909],{"class":36,"line":3274},[34,43910,32829],{"class":205},[34,43912,43913,43915,43917],{"class":36,"line":8601},[34,43914,32598],{"class":87},[34,43916,32836],{"class":149},[34,43918,32839],{"class":40},[34,43920,43921,43923,43925,43927,43929,43931,43933,43935,43937],{"class":36,"line":8625},[34,43922,31888],{"class":40},[34,43924,153],{"class":87},[34,43926,31102],{"class":40},[34,43928,31895],{"class":156},[34,43930,2358],{"class":87},[34,43932,31900],{"class":40},[34,43934,2355],{"class":87},[34,43936,32858],{"class":156},[34,43938,807],{"class":40},[34,43940,43941],{"class":36,"line":8630},[34,43942,3053],{"emptyLinePlaceholder":726},[34,43944,43945],{"class":36,"line":8636},[34,43946,3053],{"emptyLinePlaceholder":726},[34,43948,43949],{"class":36,"line":8663},[34,43950,32873],{"class":205},[34,43952,43953],{"class":36,"line":8668},[34,43954,32878],{"class":205},[34,43956,43957],{"class":36,"line":8674},[34,43958,32883],{"class":205},[34,43960,43961,43963,43965,43967,43969,43971,43973],{"class":36,"line":8686},[34,43962,32888],{"class":40},[34,43964,153],{"class":87},[34,43966,32893],{"class":40},[34,43968,32896],{"class":5869},[34,43970,153],{"class":87},[34,43972,32901],{"class":63},[34,43974,807],{"class":40},[34,43976,43977],{"class":36,"line":8698},[34,43978,3053],{"emptyLinePlaceholder":726},[34,43980,43981],{"class":36,"line":8710},[34,43982,32912],{"class":205},[34,43984,43985,43987,43989],{"class":36,"line":10369},[34,43986,32917],{"class":40},[34,43988,153],{"class":87},[34,43990,32922],{"class":40},[34,43992,43993],{"class":36,"line":10394},[34,43994,3053],{"emptyLinePlaceholder":726},[34,43996,43997],{"class":36,"line":10417},[34,43998,32931],{"class":205},[34,44000,44001,44003,44005],{"class":36,"line":10441},[34,44002,31940],{"class":40},[34,44004,153],{"class":87},[34,44006,32940],{"class":40},[34,44008,44009],{"class":36,"line":10446},[34,44010,32945],{"class":205},[34,44012,44013],{"class":36,"line":10451},[34,44014,32950],{"class":205},[34,44016,44017],{"class":36,"line":10456},[34,44018,32955],{"class":205},[34,44020,44021,44023,44025],{"class":36,"line":10465},[34,44022,32960],{"class":40},[34,44024,153],{"class":87},[34,44026,32965],{"class":40},[34,44028,44029],{"class":36,"line":10470},[34,44030,3053],{"emptyLinePlaceholder":726},[34,44032,44033],{"class":36,"line":10476},[34,44034,3053],{"emptyLinePlaceholder":726},[34,44036,44037],{"class":36,"line":10497},[34,44038,32978],{"class":205},[34,44040,44041],{"class":36,"line":10503},[34,44042,32983],{"class":205},[34,44044,44045,44047,44049],{"class":36,"line":10517},[34,44046,32988],{"class":40},[34,44048,153],{"class":87},[34,44050,32993],{"class":63},[34,44052,44053],{"class":36,"line":10523},[34,44054,32998],{"class":205},[34,44056,44057,44059,44061],{"class":36,"line":10550},[34,44058,33003],{"class":40},[34,44060,153],{"class":87},[34,44062,33008],{"class":40},[34,44064,44065],{"class":36,"line":10559},[34,44066,33013],{"class":205},[34,44068,44069,44071,44073],{"class":36,"line":10565},[34,44070,33018],{"class":40},[34,44072,153],{"class":87},[34,44074,33008],{"class":40},[34,44076,44077],{"class":36,"line":10573},[34,44078,33027],{"class":205},[34,44080,44081,44083,44085],{"class":36,"line":10578},[34,44082,33032],{"class":40},[34,44084,153],{"class":87},[34,44086,33008],{"class":40},[34,44088,44089],{"class":36,"line":17256},[34,44090,33041],{"class":205},[34,44092,44093,44095,44097],{"class":36,"line":17262},[34,44094,33046],{"class":40},[34,44096,153],{"class":87},[34,44098,33008],{"class":40},[34,44100,44101],{"class":36,"line":17285},[34,44102,3053],{"emptyLinePlaceholder":726},[34,44104,44105],{"class":36,"line":17291},[34,44106,33059],{"class":205},[34,44108,44109,44111,44113],{"class":36,"line":17314},[34,44110,33064],{"class":40},[34,44112,153],{"class":87},[34,44114,33069],{"class":40},[34,44116,44117],{"class":36,"line":17328},[34,44118,3053],{"emptyLinePlaceholder":726},[34,44120,44121],{"class":36,"line":17348},[34,44122,3053],{"emptyLinePlaceholder":726},[34,44124,44125],{"class":36,"line":17354},[34,44126,33082],{"class":205},[34,44128,44129,44131,44133,44135,44137],{"class":36,"line":17365},[34,44130,3854],{"class":87},[34,44132,33089],{"class":40},[34,44134,26695],{"class":87},[34,44136,33094],{"class":63},[34,44138,33097],{"class":40},[34,44140,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161],{"class":36,"line":17388},[34,44142,33102],{"class":63},[34,44144,801],{"class":40},[34,44146,33107],{"class":156},[34,44148,33110],{"class":63},[34,44150,1379],{"class":156},[34,44152,33110],{"class":63},[34,44154,1046],{"class":156},[34,44156,33119],{"class":40},[34,44158,1327],{"class":87},[34,44160,1013],{"class":63},[34,44162,31148],{"class":40},[34,44164,44165,44167,44169,44171,44173,44175],{"class":36,"line":17410},[34,44166,33102],{"class":63},[34,44168,801],{"class":40},[34,44170,33134],{"class":156},[34,44172,1250],{"class":87},[34,44174,1241],{"class":63},[34,44176,807],{"class":40},[34,44178,44179],{"class":36,"line":17415},[34,44180,3053],{"emptyLinePlaceholder":726},[34,44182,44183],{"class":36,"line":17421},[34,44184,33149],{"class":205},[34,44186,44187],{"class":36,"line":17435},[34,44188,33154],{"class":205},[34,44190,44191,44193,44195],{"class":36,"line":17448},[34,44192,33159],{"class":40},[34,44194,153],{"class":87},[34,44196,32993],{"class":63},[34,44198,44199],{"class":36,"line":17453},[34,44200,33168],{"class":205},[34,44202,44203,44205,44207],{"class":36,"line":17467},[34,44204,33173],{"class":40},[34,44206,153],{"class":87},[34,44208,3738],{"class":63},[34,44210,44211],{"class":36,"line":17472},[34,44212,33182],{"class":205},[34,44214,44215,44217,44219],{"class":36,"line":17478},[34,44216,33187],{"class":40},[34,44218,153],{"class":87},[34,44220,32993],{"class":63},[34,44222,44223],{"class":36,"line":17483},[34,44224,33196],{"class":205},[34,44226,44227,44229,44231],{"class":36,"line":17497},[34,44228,33201],{"class":40},[34,44230,153],{"class":87},[34,44232,3738],{"class":63},[34,44234,44235],{"class":36,"line":17502},[34,44236,33210],{"class":205},[34,44238,44239,44241,44243],{"class":36,"line":17507},[34,44240,33215],{"class":40},[34,44242,153],{"class":87},[34,44244,3738],{"class":63},[34,44246,44247],{"class":36,"line":17521},[34,44248,33224],{"class":205},[34,44250,44251,44253,44255],{"class":36,"line":17533},[34,44252,33229],{"class":40},[34,44254,153],{"class":87},[34,44256,3738],{"class":63},[34,44258,44259],{"class":36,"line":17538},[34,44260,33238],{"class":205},[34,44262,44263,44265,44267,44269,44271],{"class":36,"line":17551},[34,44264,4056],{"class":87},[34,44266,32252],{"class":40},[34,44268,26695],{"class":87},[34,44270,32257],{"class":63},[34,44272,33251],{"class":40},[34,44274,44275],{"class":36,"line":17556},[34,44276,33256],{"class":205},[34,44278,44279,44281,44283],{"class":36,"line":17561},[34,44280,33261],{"class":40},[34,44282,153],{"class":87},[34,44284,33266],{"class":40},[34,44286,44287],{"class":36,"line":17566},[34,44288,33271],{"class":205},[34,44290,44291,44293,44295],{"class":36,"line":17579},[34,44292,33276],{"class":40},[34,44294,153],{"class":87},[34,44296,33281],{"class":40},[34,44298,44299],{"class":36,"line":17584},[34,44300,33287],{"class":205},[34,44302,44303],{"class":36,"line":33284},[34,44304,33293],{"class":40},[34,44306,44307],{"class":36,"line":33290},[34,44308,33299],{"class":205},[34,44310,44311],{"class":36,"line":33296},[34,44312,33305],{"class":205},[34,44314,44315,44317,44319],{"class":36,"line":33302},[34,44316,33311],{"class":40},[34,44318,153],{"class":87},[34,44320,33316],{"class":40},[34,44322,44323],{"class":36,"line":33308},[34,44324,33322],{"class":205},[34,44326,44327,44329,44331,44333,44335,44337,44339],{"class":36,"line":33319},[34,44328,33328],{"class":40},[34,44330,153],{"class":87},[34,44332,33333],{"class":40},[34,44334,33336],{"class":5869},[34,44336,153],{"class":87},[34,44338,1013],{"class":63},[34,44340,807],{"class":40},[34,44342,44343],{"class":36,"line":33325},[34,44344,33348],{"class":205},[34,44346,44347,44349,44351],{"class":36,"line":33345},[34,44348,33354],{"class":40},[34,44350,153],{"class":87},[34,44352,33359],{"class":40},[34,44354,44355],{"class":36,"line":33351},[34,44356,33365],{"class":205},[34,44358,44359],{"class":36,"line":33362},[34,44360,33371],{"class":40},[34,44362,44363],{"class":36,"line":33368},[34,44364,33377],{"class":205},[34,44366,44367],{"class":36,"line":33374},[34,44368,33383],{"class":40},[34,44370,44371],{"class":36,"line":33380},[34,44372,33389],{"class":205},[34,44374,44375],{"class":36,"line":33386},[34,44376,33395],{"class":40},[34,44378,44379],{"class":36,"line":33392},[34,44380,33401],{"class":205},[34,44382,44383,44385,44387,44389,44391,44393,44395],{"class":36,"line":33398},[34,44384,33407],{"class":40},[34,44386,10130],{"class":87},[34,44388,33412],{"class":40},[34,44390,1250],{"class":87},[34,44392,33417],{"class":40},[34,44394,987],{"class":63},[34,44396,807],{"class":40},[34,44398,44399],{"class":36,"line":33404},[34,44400,33427],{"class":205},[34,44402,44403,44405,44407,44409,44411],{"class":36,"line":33424},[34,44404,33433],{"class":40},[34,44406,10130],{"class":87},[34,44408,33438],{"class":40},[34,44410,3602],{"class":87},[34,44412,33443],{"class":40},[34,44414,44415],{"class":36,"line":33430},[34,44416,33449],{"class":205},[34,44418,44419,44421,44423,44425,44427],{"class":36,"line":33446},[34,44420,33455],{"class":40},[34,44422,10130],{"class":87},[34,44424,33417],{"class":40},[34,44426,987],{"class":63},[34,44428,807],{"class":40},[34,44430,44431],{"class":36,"line":33452},[34,44432,33469],{"class":205},[34,44434,44435,44437,44439,44441,44443],{"class":36,"line":33466},[34,44436,4056],{"class":87},[34,44438,33477],{"class":40},[34,44440,26695],{"class":87},[34,44442,32257],{"class":63},[34,44444,33484],{"class":40},[34,44446,44447],{"class":36,"line":33472},[34,44448,33490],{"class":205},[34,44450,44451,44453,44455],{"class":36,"line":33487},[34,44452,33261],{"class":40},[34,44454,153],{"class":87},[34,44456,33266],{"class":40},[34,44458,44459],{"class":36,"line":33493},[34,44460,33505],{"class":205},[34,44462,44463,44465,44467],{"class":36,"line":33502},[34,44464,33276],{"class":40},[34,44466,153],{"class":87},[34,44468,33281],{"class":40},[34,44470,44471],{"class":36,"line":33508},[34,44472,33520],{"class":205},[34,44474,44475],{"class":36,"line":33517},[34,44476,33526],{"class":40},[34,44478,44479],{"class":36,"line":33523},[34,44480,37007],{"class":205},[34,44482,44483,44485],{"class":36,"line":33529},[34,44484,33532],{"class":87},[34,44486,33535],{"class":40},[34,44488,44489],{"class":36,"line":33538},[34,44490,33541],{"class":205},[34,44492,44493,44495,44497],{"class":36,"line":33544},[34,44494,37022],{"class":40},[34,44496,153],{"class":87},[34,44498,33316],{"class":40},[34,44500,44501],{"class":36,"line":33555},[34,44502,33558],{"class":205},[34,44504,44505,44507,44509,44511,44513,44515,44517],{"class":36,"line":33561},[34,44506,37035],{"class":40},[34,44508,153],{"class":87},[34,44510,33333],{"class":40},[34,44512,33336],{"class":5869},[34,44514,153],{"class":87},[34,44516,1013],{"class":63},[34,44518,807],{"class":40},[34,44520,44521],{"class":36,"line":33580},[34,44522,33583],{"class":205},[34,44524,44525,44527,44529],{"class":36,"line":33586},[34,44526,37056],{"class":40},[34,44528,153],{"class":87},[34,44530,33359],{"class":40},[34,44532,44533],{"class":36,"line":33597},[34,44534,33600],{"class":205},[34,44536,44537,44539,44541,44543,44545,44547,44549],{"class":36,"line":33603},[34,44538,37069],{"class":40},[34,44540,10130],{"class":87},[34,44542,37074],{"class":40},[34,44544,1250],{"class":87},[34,44546,33417],{"class":40},[34,44548,987],{"class":63},[34,44550,807],{"class":40},[34,44552,44553,44555,44557,44559,44561],{"class":36,"line":33623},[34,44554,37087],{"class":40},[34,44556,10130],{"class":87},[34,44558,33438],{"class":40},[34,44560,3602],{"class":87},[34,44562,33443],{"class":40},[34,44564,44565],{"class":36,"line":33639},[34,44566,37100],{"class":205},[34,44568,44569,44571,44573,44575,44577],{"class":36,"line":33645},[34,44570,37105],{"class":40},[34,44572,10130],{"class":87},[34,44574,33417],{"class":40},[34,44576,987],{"class":63},[34,44578,807],{"class":40},[34,44580,44581],{"class":36,"line":33659},[34,44582,33662],{"class":205},[34,44584,44585],{"class":36,"line":33665},[34,44586,33668],{"class":205},[34,44588,44589,44591,44593],{"class":36,"line":33671},[34,44590,33674],{"class":40},[34,44592,1379],{"class":87},[34,44594,33679],{"class":40},[34,44596,44597],{"class":36,"line":33682},[34,44598,33685],{"class":205},[34,44600,44601],{"class":36,"line":33688},[34,44602,33691],{"class":205},[34,44604,44605,44607,44609],{"class":36,"line":33694},[34,44606,33697],{"class":40},[34,44608,1379],{"class":87},[34,44610,33679],{"class":40},[34,44612,44613],{"class":36,"line":33704},[34,44614,33707],{"class":205},[34,44616,44617,44619,44621],{"class":36,"line":33710},[34,44618,33713],{"class":40},[34,44620,1379],{"class":87},[34,44622,33718],{"class":40},[34,44624,44625],{"class":36,"line":33721},[34,44626,33724],{"class":205},[34,44628,44629,44631,44633],{"class":36,"line":33727},[34,44630,33730],{"class":40},[34,44632,1379],{"class":87},[34,44634,33718],{"class":40},[34,44636,44637],{"class":36,"line":33737},[34,44638,3053],{"emptyLinePlaceholder":726},[34,44640,44641],{"class":36,"line":33742},[34,44642,33745],{"class":205},[34,44644,44645,44647,44649,44651,44653,44655,44657,44659,44661,44663,44665,44667,44669,44671,44673,44675,44677,44679,44681,44683],{"class":36,"line":33748},[34,44646,33102],{"class":63},[34,44648,801],{"class":40},[34,44650,4245],{"class":156},[34,44652,33110],{"class":63},[34,44654,33759],{"class":156},[34,44656,1690],{"class":63},[34,44658,33764],{"class":87},[34,44660,1739],{"class":63},[34,44662,33769],{"class":156},[34,44664,1690],{"class":63},[34,44666,33764],{"class":87},[34,44668,1739],{"class":63},[34,44670,4245],{"class":156},[34,44672,33780],{"class":40},[34,44674,1327],{"class":87},[34,44676,1013],{"class":63},[34,44678,33787],{"class":40},[34,44680,1327],{"class":87},[34,44682,1013],{"class":63},[34,44684,33794],{"class":40},[34,44686,44687,44689,44691,44693,44695,44697,44699,44701,44703,44705,44707,44709,44711,44713,44715,44717,44719,44721,44723,44725],{"class":36,"line":33797},[34,44688,33102],{"class":63},[34,44690,801],{"class":40},[34,44692,4245],{"class":156},[34,44694,33110],{"class":63},[34,44696,33808],{"class":156},[34,44698,1690],{"class":63},[34,44700,33764],{"class":87},[34,44702,1739],{"class":63},[34,44704,33817],{"class":156},[34,44706,1690],{"class":63},[34,44708,33764],{"class":87},[34,44710,1739],{"class":63},[34,44712,4245],{"class":156},[34,44714,33828],{"class":40},[34,44716,1327],{"class":87},[34,44718,1013],{"class":63},[34,44720,33835],{"class":40},[34,44722,1327],{"class":87},[34,44724,1013],{"class":63},[34,44726,33794],{"class":40},[34,44728,44729],{"class":36,"line":33844},[34,44730,3053],{"emptyLinePlaceholder":726},[34,44732,44733],{"class":36,"line":33849},[34,44734,33852],{"class":205},[34,44736,44737,44739,44741,44743,44745,44747,44749],{"class":36,"line":33855},[34,44738,3150],{"class":87},[34,44740,33860],{"class":40},[34,44742,1327],{"class":87},[34,44744,1013],{"class":63},[34,44746,1733],{"class":40},[34,44748,1753],{"class":87},[34,44750,33871],{"class":40},[34,44752,44753],{"class":36,"line":33874},[34,44754,33877],{"class":205},[34,44756,44757,44759,44761,44763,44765,44767,44769],{"class":36,"line":33880},[34,44758,33883],{"class":40},[34,44760,840],{"class":63},[34,44762,153],{"class":87},[34,44764,33890],{"class":40},[34,44766,1327],{"class":87},[34,44768,1013],{"class":63},[34,44770,33897],{"class":40},[34,44772,44773],{"class":36,"line":33900},[34,44774,33903],{"class":205},[34,44776,44777],{"class":36,"line":33906},[34,44778,33909],{"class":205},[34,44780,44781,44783,44785],{"class":36,"line":33912},[34,44782,33915],{"class":40},[34,44784,153],{"class":87},[34,44786,32965],{"class":40},[34,44788,44789],{"class":36,"line":33922},[34,44790,3053],{"emptyLinePlaceholder":726},[34,44792,44793],{"class":36,"line":33927},[34,44794,33930],{"class":205},[34,44796,44797,44799,44801,44803,44805],{"class":36,"line":33933},[34,44798,33936],{"class":40},[34,44800,153],{"class":87},[34,44802,33941],{"class":40},[34,44804,1327],{"class":87},[34,44806,33946],{"class":40},[34,44808,44809,44811,44813,44815,44817,44819,44821,44823,44825,44827,44829,44831,44833,44835,44837,44839,44841,44843],{"class":36,"line":33949},[34,44810,33102],{"class":63},[34,44812,801],{"class":40},[34,44814,33956],{"class":156},[34,44816,1690],{"class":63},[34,44818,33961],{"class":87},[34,44820,1739],{"class":63},[34,44822,1339],{"class":156},[34,44824,1690],{"class":63},[34,44826,33961],{"class":87},[34,44828,1739],{"class":63},[34,44830,33974],{"class":156},[34,44832,33977],{"class":40},[34,44834,33980],{"class":87},[34,44836,1701],{"class":63},[34,44838,33985],{"class":40},[34,44840,1123],{"class":87},[34,44842,1701],{"class":63},[34,44844,31148],{"class":40},[34,44846,44847],{"class":36,"line":33994},[34,44848,37384],{"class":205},[34,44850,44851],{"class":36,"line":34000},[34,44852,37389],{"class":205},[34,44854,44855,44857,44859],{"class":36,"line":34006},[34,44856,37394],{"class":40},[34,44858,34018],{"class":156},[34,44860,807],{"class":40},[34,44862,44863],{"class":36,"line":34012},[34,44864,34038],{"class":205},[34,44866,44867,44869,44871,44873,44875,44877],{"class":36,"line":34023},[34,44868,34044],{"class":40},[34,44870,153],{"class":87},[34,44872,34049],{"class":40},[34,44874,34052],{"class":5869},[34,44876,153],{"class":87},[34,44878,2206],{"class":40},[34,44880,44881,44883,44885,44887],{"class":36,"line":34029},[34,44882,34062],{"class":156},[34,44884,1653],{"class":40},[34,44886,34067],{"class":63},[34,44888,34070],{"class":40},[34,44890,44891,44893],{"class":36,"line":34035},[34,44892,34076],{"class":156},[34,44894,34079],{"class":40},[34,44896,44897,44899],{"class":36,"line":34041},[34,44898,34085],{"class":156},[34,44900,34088],{"class":40},[34,44902,44903,44905],{"class":36,"line":34059},[34,44904,34094],{"class":156},[34,44906,34097],{"class":40},[34,44908,44909,44911],{"class":36,"line":34073},[34,44910,34103],{"class":156},[34,44912,34106],{"class":40},[34,44914,44915],{"class":36,"line":34082},[34,44916,34112],{"class":40},[34,44918,44919],{"class":36,"line":34091},[34,44920,34118],{"class":205},[34,44922,44923,44925],{"class":36,"line":34100},[34,44924,4743],{"class":87},[34,44926,34126],{"class":40},[34,44928,44929],{"class":36,"line":34109},[34,44930,3053],{"emptyLinePlaceholder":726},[34,44932,44933],{"class":36,"line":34115},[34,44934,34137],{"class":205},[34,44936,44937,44939,44941],{"class":36,"line":34121},[34,44938,32598],{"class":87},[34,44940,34145],{"class":149},[34,44942,34148],{"class":40},[34,44944,44945],{"class":36,"line":34129},[34,44946,34154],{"class":205},[34,44948,44949,44951,44953,44955,44957,44959,44961,44963],{"class":36,"line":34134},[34,44950,34160],{"class":40},[34,44952,32344],{"class":5869},[34,44954,153],{"class":87},[34,44956,801],{"class":40},[34,44958,1293],{"class":63},[34,44960,1173],{"class":40},[34,44962,1088],{"class":63},[34,44964,31148],{"class":40},[34,44966,44967],{"class":36,"line":34140},[34,44968,34180],{"class":205},[34,44970,44971],{"class":36,"line":34151},[34,44972,34186],{"class":205},[34,44974,44975],{"class":36,"line":34157},[34,44976,34192],{"class":205},[34,44978,44979,44981,44983,44985,44987,44989,44991],{"class":36,"line":34177},[34,44980,32378],{"class":40},[34,44982,1013],{"class":63},[34,44984,1173],{"class":40},[34,44986,875],{"class":63},[34,44988,1173],{"class":40},[34,44990,1013],{"class":63},[34,44992,807],{"class":40},[34,44994,44995],{"class":36,"line":34183},[34,44996,34215],{"class":205},[34,44998,44999],{"class":36,"line":34189},[34,45000,34221],{"class":205},[34,45002,45003],{"class":36,"line":34195},[34,45004,34227],{"class":205},[34,45006,45007],{"class":36,"line":34212},[34,45008,34233],{"class":205},[34,45010,45011],{"class":36,"line":34218},[34,45012,34239],{"class":205},[34,45014,45015,45017,45019,45021,45023,45025,45027,45029,45031],{"class":36,"line":34224},[34,45016,34245],{"class":40},[34,45018,34248],{"class":156},[34,45020,34251],{"class":40},[34,45022,34254],{"class":156},[34,45024,1173],{"class":40},[34,45026,34259],{"class":5869},[34,45028,153],{"class":87},[34,45030,34264],{"class":156},[34,45032,807],{"class":40},[34,45034,45035,45037,45039,45041,45043,45045,45047,45049,45051],{"class":36,"line":34230},[34,45036,34245],{"class":40},[34,45038,34248],{"class":156},[34,45040,34276],{"class":40},[34,45042,34279],{"class":156},[34,45044,1173],{"class":40},[34,45046,34259],{"class":5869},[34,45048,153],{"class":87},[34,45050,34288],{"class":156},[34,45052,807],{"class":40},[34,45054,45055],{"class":36,"line":34236},[34,45056,34296],{"class":205},[34,45058,45059],{"class":36,"line":34242},[34,45060,34302],{"class":40},[34,45062,45063],{"class":36,"line":34269},[34,45064,34308],{"class":205},[34,45066,45067,45069,45071],{"class":36,"line":34293},[34,45068,34314],{"class":40},[34,45070,34317],{"class":156},[34,45072,807],{"class":40},[34,45074,45075,45077,45079],{"class":36,"line":34299},[34,45076,34325],{"class":40},[34,45078,34328],{"class":156},[34,45080,807],{"class":40},[34,45082,45083],{"class":36,"line":34305},[34,45084,34336],{"class":205},[34,45086,45087,45089,45091,45093,45095,45097,45099],{"class":36,"line":34311},[34,45088,32378],{"class":40},[34,45090,1013],{"class":63},[34,45092,1173],{"class":40},[34,45094,875],{"class":63},[34,45096,1173],{"class":40},[34,45098,875],{"class":63},[34,45100,807],{"class":40},[34,45102,45103,45105,45107,45109,45111,45113,45115,45117,45119],{"class":36,"line":34322},[34,45104,34245],{"class":40},[34,45106,34248],{"class":156},[34,45108,34363],{"class":40},[34,45110,34254],{"class":156},[34,45112,1173],{"class":40},[34,45114,34259],{"class":5869},[34,45116,153],{"class":87},[34,45118,34374],{"class":156},[34,45120,807],{"class":40},[34,45122,45123,45125,45127,45129,45131,45133,45135,45137,45139],{"class":36,"line":34333},[34,45124,34245],{"class":40},[34,45126,34248],{"class":156},[34,45128,34386],{"class":40},[34,45130,34279],{"class":156},[34,45132,1173],{"class":40},[34,45134,34259],{"class":5869},[34,45136,153],{"class":87},[34,45138,34397],{"class":156},[34,45140,807],{"class":40},[34,45142,45143],{"class":36,"line":34339},[34,45144,34405],{"class":205},[34,45146,45147],{"class":36,"line":34356},[34,45148,34302],{"class":40},[34,45150,45151,45153,45155],{"class":36,"line":34379},[34,45152,34314],{"class":40},[34,45154,34248],{"class":156},[34,45156,807],{"class":40},[34,45158,45159,45161,45163],{"class":36,"line":34402},[34,45160,34325],{"class":40},[34,45162,34427],{"class":156},[34,45164,807],{"class":40},[34,45166,45167],{"class":36,"line":34408},[34,45168,34435],{"class":40},[34,45170,45171],{"class":36,"line":34413},[34,45172,3053],{"emptyLinePlaceholder":726},[34,45174,45175],{"class":36,"line":34422},[34,45176,34446],{"class":205},[34,45178,45179,45181,45183,45185,45187],{"class":36,"line":34432},[34,45180,2191],{"class":87},[34,45182,31871],{"class":63},[34,45184,3602],{"class":87},[34,45186,31876],{"class":156},[34,45188,4392],{"class":40},[34,45190,45191],{"class":36,"line":34438},[34,45192,34465],{"class":205},[34,45194,45195,45198,45200],{"class":36,"line":34443},[34,45196,45197],{"class":40},"    GoogLeNet",[34,45199,153],{"class":87},[34,45201,45202],{"class":40},"GoogLeNet(Inception)\n",[34,45204,45205,45207,45209],{"class":36,"line":34449},[34,45206,34482],{"class":40},[34,45208,153],{"class":87},[34,45210,34487],{"class":40},[34,45212,45213,45215,45217,45220,45222,45224,45226],{"class":36,"line":34462},[34,45214,34044],{"class":40},[34,45216,153],{"class":87},[34,45218,45219],{"class":40},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[34,45221,34500],{"class":5869},[34,45223,153],{"class":87},[34,45225,1744],{"class":63},[34,45227,807],{"class":40},[34,45229,45230],{"class":36,"line":34468},[34,45231,34512],{"class":40},[752,45233,45234],{"start":60},[755,45235,41225],{},[24,45237,45239],{"className":31029,"code":45238,"language":31031,"meta":29,"style":29},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[31,45240,45241,45247,45257,45267,45271,45281,45292,45296,45300,45304,45312,45328,45338,45354,45364,45378,45382,45392,45402,45412,45418,45422,45426,45434,45438,45454,45462,45466,45470,45478,45486,45490,45494,45498,45502,45508,45512,45522,45530,45538,45542,45546,45550,45558,45562,45578,45582,45586,45590,45602,45606,45618,45622,45626,45638,45642,45652,45656,45660,45672,45676,45684,45688,45692,45700,45704,45712,45716,45720,45724,45728,45732,45748,45756,45760,45764,45812,45818,45822,45832,45840,45848,45852,45856,45860,45864,45872,45876,45892,45896,45904,45912],{"__ignoreMap":29},[34,45242,45243,45245],{"class":36,"line":37},[34,45244,31043],{"class":87},[34,45246,31046],{"class":40},[34,45248,45249,45251,45253,45255],{"class":36,"line":51},[34,45250,31043],{"class":87},[34,45252,32066],{"class":40},[34,45254,32034],{"class":87},[34,45256,32071],{"class":40},[34,45258,45259,45261,45263,45265],{"class":36,"line":60},[34,45260,31388],{"class":87},[34,45262,32049],{"class":40},[34,45264,31043],{"class":87},[34,45266,32054],{"class":40},[34,45268,45269],{"class":36,"line":76},[34,45270,34573],{"class":205},[34,45272,45273,45275,45277,45279],{"class":36,"line":93},[34,45274,31388],{"class":87},[34,45276,32019],{"class":40},[34,45278,31043],{"class":87},[34,45280,32024],{"class":40},[34,45282,45283,45285,45287,45289],{"class":36,"line":99},[34,45284,31388],{"class":87},[34,45286,32565],{"class":40},[34,45288,31043],{"class":87},[34,45290,45291],{"class":40}," GoogLeNet,Inception\n",[34,45293,45294],{"class":36,"line":353},[34,45295,3053],{"emptyLinePlaceholder":726},[34,45297,45298],{"class":36,"line":359},[34,45299,3053],{"emptyLinePlaceholder":726},[34,45301,45302],{"class":36,"line":579},[34,45303,34602],{"class":205},[34,45305,45306,45308,45310],{"class":36,"line":589},[34,45307,32598],{"class":87},[34,45309,34609],{"class":149},[34,45311,32604],{"class":40},[34,45313,45314,45316,45318,45320,45322,45324,45326],{"class":36,"line":601},[34,45315,34616],{"class":40},[34,45317,153],{"class":87},[34,45319,32106],{"class":40},[34,45321,32109],{"class":5869},[34,45323,153],{"class":87},[34,45325,32114],{"class":156},[34,45327,32117],{"class":40},[34,45329,45330,45332,45334,45336],{"class":36,"line":613},[34,45331,34633],{"class":5869},[34,45333,153],{"class":87},[34,45335,34638],{"class":63},[34,45337,32117],{"class":40},[34,45339,45340,45342,45344,45346,45348,45350,45352],{"class":36,"line":618},[34,45341,34645],{"class":5869},[34,45343,153],{"class":87},[34,45345,32144],{"class":40},[34,45347,32147],{"class":5869},[34,45349,153],{"class":87},[34,45351,36100],{"class":63},[34,45353,32155],{"class":40},[34,45355,45356,45358,45360,45362],{"class":36,"line":628},[34,45357,34662],{"class":5869},[34,45359,153],{"class":87},[34,45361,32127],{"class":63},[34,45363,807],{"class":40},[34,45365,45366,45368,45370,45372,45374,45376],{"class":36,"line":640},[34,45367,34673],{"class":40},[34,45369,153],{"class":87},[34,45371,32185],{"class":40},[34,45373,32188],{"class":5869},[34,45375,153],{"class":87},[34,45377,34684],{"class":40},[34,45379,45380],{"class":36,"line":2301},[34,45381,34689],{"class":205},[34,45383,45384,45386,45388,45390],{"class":36,"line":2307},[34,45385,34694],{"class":5869},[34,45387,153],{"class":87},[34,45389,1013],{"class":63},[34,45391,32117],{"class":40},[34,45393,45394,45396,45398,45400],{"class":36,"line":2328},[34,45395,34705],{"class":5869},[34,45397,153],{"class":87},[34,45399,32127],{"class":63},[34,45401,32117],{"class":40},[34,45403,45404,45406,45408,45410],{"class":36,"line":2333},[34,45405,34716],{"class":5869},[34,45407,153],{"class":87},[34,45409,987],{"class":63},[34,45411,807],{"class":40},[34,45413,45414,45416],{"class":36,"line":2347},[34,45415,4743],{"class":87},[34,45417,34729],{"class":40},[34,45419,45420],{"class":36,"line":2352},[34,45421,3053],{"emptyLinePlaceholder":726},[34,45423,45424],{"class":36,"line":2381},[34,45425,34738],{"class":205},[34,45427,45428,45430,45432],{"class":36,"line":2386},[34,45429,32598],{"class":87},[34,45431,34745],{"class":149},[34,45433,34748],{"class":40},[34,45435,45436],{"class":36,"line":2403},[34,45437,34753],{"class":205},[34,45439,45440,45442,45444,45446,45448,45450,45452],{"class":36,"line":2408},[34,45441,31888],{"class":40},[34,45443,153],{"class":87},[34,45445,31895],{"class":156},[34,45447,2358],{"class":87},[34,45449,31900],{"class":40},[34,45451,2355],{"class":87},[34,45453,34770],{"class":156},[34,45455,45456,45458,45460],{"class":36,"line":2413},[34,45457,31940],{"class":40},[34,45459,153],{"class":87},[34,45461,32940],{"class":40},[34,45463,45464],{"class":36,"line":2418},[34,45465,3053],{"emptyLinePlaceholder":726},[34,45467,45468],{"class":36,"line":2432},[34,45469,34787],{"class":205},[34,45471,45472,45474,45476],{"class":36,"line":2437},[34,45473,34792],{"class":40},[34,45475,153],{"class":87},[34,45477,32993],{"class":63},[34,45479,45480,45482,45484],{"class":36,"line":3230},[34,45481,34801],{"class":40},[34,45483,153],{"class":87},[34,45485,3738],{"class":63},[34,45487,45488],{"class":36,"line":3244},[34,45489,3053],{"emptyLinePlaceholder":726},[34,45491,45492],{"class":36,"line":3252},[34,45493,34814],{"class":205},[34,45495,45496],{"class":36,"line":3257},[34,45497,34819],{"class":205},[34,45499,45500],{"class":36,"line":3263},[34,45501,34824],{"class":205},[34,45503,45504,45506],{"class":36,"line":3269},[34,45505,34829],{"class":87},[34,45507,33535],{"class":40},[34,45509,45510],{"class":36,"line":3274},[34,45511,34836],{"class":205},[34,45513,45514,45516,45518,45520],{"class":36,"line":8601},[34,45515,4056],{"class":87},[34,45517,34843],{"class":40},[34,45519,26695],{"class":87},[34,45521,34848],{"class":40},[34,45523,45524,45526,45528],{"class":36,"line":8625},[34,45525,34853],{"class":40},[34,45527,153],{"class":87},[34,45529,34858],{"class":40},[34,45531,45532,45534,45536],{"class":36,"line":8630},[34,45533,34863],{"class":40},[34,45535,153],{"class":87},[34,45537,34868],{"class":40},[34,45539,45540],{"class":36,"line":8636},[34,45541,34873],{"class":205},[34,45543,45544],{"class":36,"line":8663},[34,45545,33526],{"class":40},[34,45547,45548],{"class":36,"line":8668},[34,45549,34882],{"class":205},[34,45551,45552,45554,45556],{"class":36,"line":8674},[34,45553,33311],{"class":40},[34,45555,153],{"class":87},[34,45557,34891],{"class":40},[34,45559,45560],{"class":36,"line":8686},[34,45561,34896],{"class":205},[34,45563,45564,45566,45568,45570,45572,45574,45576],{"class":36,"line":8698},[34,45565,33328],{"class":40},[34,45567,153],{"class":87},[34,45569,33333],{"class":40},[34,45571,33336],{"class":5869},[34,45573,153],{"class":87},[34,45575,1013],{"class":63},[34,45577,807],{"class":40},[34,45579,45580],{"class":36,"line":8710},[34,45581,34917],{"class":205},[34,45583,45584],{"class":36,"line":10369},[34,45585,34922],{"class":205},[34,45587,45588],{"class":36,"line":10394},[34,45589,34927],{"class":205},[34,45591,45592,45594,45596,45598,45600],{"class":36,"line":10417},[34,45593,34932],{"class":40},[34,45595,10130],{"class":87},[34,45597,33438],{"class":40},[34,45599,3602],{"class":87},[34,45601,34941],{"class":40},[34,45603,45604],{"class":36,"line":10441},[34,45605,34946],{"class":205},[34,45607,45608,45610,45612,45614,45616],{"class":36,"line":10446},[34,45609,34951],{"class":40},[34,45611,10130],{"class":87},[34,45613,34956],{"class":40},[34,45615,987],{"class":63},[34,45617,807],{"class":40},[34,45619,45620],{"class":36,"line":10451},[34,45621,3053],{"emptyLinePlaceholder":726},[34,45623,45624],{"class":36,"line":10456},[34,45625,34969],{"class":205},[34,45627,45628,45630,45632,45634,45636],{"class":36,"line":10465},[34,45629,34974],{"class":40},[34,45631,153],{"class":87},[34,45633,34979],{"class":40},[34,45635,1379],{"class":87},[34,45637,34984],{"class":40},[34,45639,45640],{"class":36,"line":10470},[34,45641,34989],{"class":205},[34,45643,45644,45646,45648,45650],{"class":36,"line":10476},[34,45645,33102],{"class":63},[34,45647,801],{"class":40},[34,45649,34998],{"class":156},[34,45651,35001],{"class":40},[34,45653,45654],{"class":36,"line":10497},[34,45655,3053],{"emptyLinePlaceholder":726},[34,45657,45658],{"class":36,"line":10503},[34,45659,35010],{"class":205},[34,45661,45662,45664,45666,45668,45670],{"class":36,"line":10517},[34,45663,2191],{"class":87},[34,45665,31871],{"class":63},[34,45667,3602],{"class":87},[34,45669,31876],{"class":156},[34,45671,4392],{"class":40},[34,45673,45674],{"class":36,"line":10523},[34,45675,35027],{"class":205},[34,45677,45678,45680,45682],{"class":36,"line":10550},[34,45679,31940],{"class":40},[34,45681,153],{"class":87},[34,45683,45202],{"class":40},[34,45685,45686],{"class":36,"line":10559},[34,45687,35040],{"class":205},[34,45689,45690],{"class":36,"line":10565},[34,45691,35045],{"class":205},[34,45693,45694,45696,45698],{"class":36,"line":10573},[34,45695,35050],{"class":40},[34,45697,35053],{"class":156},[34,45699,31148],{"class":40},[34,45701,45702],{"class":36,"line":10578},[34,45703,35060],{"class":205},[34,45705,45706,45708,45710],{"class":36,"line":17256},[34,45707,34673],{"class":40},[34,45709,153],{"class":87},[34,45711,35069],{"class":40},[34,45713,45714],{"class":36,"line":17262},[34,45715,35074],{"class":205},[34,45717,45718],{"class":36,"line":17285},[34,45719,35079],{"class":40},[34,45721,45722],{"class":36,"line":17291},[34,45723,3053],{"emptyLinePlaceholder":726},[34,45725,45726],{"class":36,"line":17314},[34,45727,35088],{"class":205},[34,45729,45730],{"class":36,"line":17328},[34,45731,35093],{"class":205},[34,45733,45734,45736,45738,45740,45742,45744,45746],{"class":36,"line":17348},[34,45735,31888],{"class":40},[34,45737,153],{"class":87},[34,45739,31895],{"class":156},[34,45741,2358],{"class":87},[34,45743,31900],{"class":40},[34,45745,2355],{"class":87},[34,45747,34770],{"class":156},[34,45749,45750,45752,45754],{"class":36,"line":17354},[34,45751,31940],{"class":40},[34,45753,153],{"class":87},[34,45755,32940],{"class":40},[34,45757,45758],{"class":36,"line":17365},[34,45759,35122],{"class":205},[34,45761,45762],{"class":36,"line":17388},[34,45763,35127],{"class":205},[34,45765,45766,45768,45770,45772,45774,45776,45778,45780,45782,45784,45786,45788,45790,45792,45794,45796,45798,45800,45802,45804,45806,45808,45810],{"class":36,"line":17410},[34,45767,35132],{"class":40},[34,45769,153],{"class":87},[34,45771,1684],{"class":40},[34,45773,35139],{"class":156},[34,45775,1173],{"class":40},[34,45777,35144],{"class":156},[34,45779,1173],{"class":40},[34,45781,35149],{"class":156},[34,45783,1173],{"class":40},[34,45785,35154],{"class":156},[34,45787,1173],{"class":40},[34,45789,35159],{"class":156},[34,45791,1173],{"class":40},[34,45793,35164],{"class":156},[34,45795,1173],{"class":40},[34,45797,35169],{"class":156},[34,45799,1173],{"class":40},[34,45801,35174],{"class":156},[34,45803,1173],{"class":40},[34,45805,35179],{"class":156},[34,45807,1173],{"class":40},[34,45809,35184],{"class":156},[34,45811,33897],{"class":40},[34,45813,45814,45816],{"class":36,"line":17415},[34,45815,34829],{"class":87},[34,45817,33535],{"class":40},[34,45819,45820],{"class":36,"line":17421},[34,45821,35197],{"class":205},[34,45823,45824,45826,45828,45830],{"class":36,"line":17435},[34,45825,4056],{"class":87},[34,45827,35204],{"class":40},[34,45829,26695],{"class":87},[34,45831,34848],{"class":40},[34,45833,45834,45836,45838],{"class":36,"line":17448},[34,45835,33261],{"class":40},[34,45837,153],{"class":87},[34,45839,33266],{"class":40},[34,45841,45842,45844,45846],{"class":36,"line":17453},[34,45843,33276],{"class":40},[34,45845,153],{"class":87},[34,45847,33281],{"class":40},[34,45849,45850],{"class":36,"line":17467},[34,45851,3053],{"emptyLinePlaceholder":726},[34,45853,45854],{"class":36,"line":17472},[34,45855,35233],{"class":205},[34,45857,45858],{"class":36,"line":17478},[34,45859,33526],{"class":40},[34,45861,45862],{"class":36,"line":17483},[34,45863,35242],{"class":205},[34,45865,45866,45868,45870],{"class":36,"line":17497},[34,45867,33311],{"class":40},[34,45869,153],{"class":87},[34,45871,33316],{"class":40},[34,45873,45874],{"class":36,"line":17502},[34,45875,35255],{"class":205},[34,45877,45878,45880,45882,45884,45886,45888,45890],{"class":36,"line":17507},[34,45879,33328],{"class":40},[34,45881,153],{"class":87},[34,45883,33333],{"class":40},[34,45885,33336],{"class":5869},[34,45887,153],{"class":87},[34,45889,1013],{"class":63},[34,45891,807],{"class":40},[34,45893,45894],{"class":36,"line":17521},[34,45895,35276],{"class":205},[34,45897,45898,45900,45902],{"class":36,"line":17533},[34,45899,35281],{"class":40},[34,45901,153],{"class":87},[34,45903,35286],{"class":40},[34,45905,45906,45908,45910],{"class":36,"line":17538},[34,45907,35291],{"class":40},[34,45909,153],{"class":87},[34,45911,35296],{"class":40},[34,45913,45914,45916,45918,45920,45922,45924,45926,45928],{"class":36,"line":17551},[34,45915,35301],{"class":63},[34,45917,801],{"class":40},[34,45919,35306],{"class":156},[34,45921,35309],{"class":40},[34,45923,35312],{"class":156},[34,45925,1173],{"class":40},[34,45927,35317],{"class":156},[34,45929,35320],{"class":40},[19,45931,45933],{"id":45932},"_24训练自己的数据集","2.4.训练自己的数据集",[108,45935,45936],{},"猫狗分类任务",[108,45938,45939],{},"划分数据集和验证集",[24,45941,45943],{"className":31029,"code":45942,"language":31031,"meta":29,"style":29},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[31,45944,45945,45950,45957,45962,45973,45980,45984,45994,46008,46017,46021,46026,46036,46056,46060,46065,46075,46086,46099,46103,46108,46117,46127,46138,46142,46147,46157,46161,46166,46171,46176,46181,46186,46190,46200,46227,46240,46252,46279,46284,46289,46303,46308,46320,46335,46350,46358,46362,46367,46373,46385,46398,46403,46408,46413,46463,46469,46473],{"__ignoreMap":29},[34,45946,45947],{"class":36,"line":37},[34,45948,45949],{"class":205},"# 创建脚本，用于划分数据集和验证集\n",[34,45951,45952,45954],{"class":36,"line":51},[34,45953,31043],{"class":87},[34,45955,45956],{"class":40}," os\n",[34,45958,45959],{"class":36,"line":60},[34,45960,45961],{"class":205},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[34,45963,45964,45966,45969,45971],{"class":36,"line":76},[34,45965,31388],{"class":87},[34,45967,45968],{"class":40}," shutil ",[34,45970,31043],{"class":87},[34,45972,32473],{"class":40},[34,45974,45975,45977],{"class":36,"line":93},[34,45976,31043],{"class":87},[34,45978,45979],{"class":40}," random\n",[34,45981,45982],{"class":36,"line":99},[34,45983,3053],{"emptyLinePlaceholder":726},[34,45985,45986,45988,45991],{"class":36,"line":353},[34,45987,32598],{"class":87},[34,45989,45990],{"class":149}," mkfile",[34,45992,45993],{"class":40},"(file):\n",[34,45995,45996,45998,46000,46003,46006],{"class":36,"line":359},[34,45997,3754],{"class":87},[34,45999,39581],{"class":87},[34,46001,46002],{"class":40}," os.path.exists(",[34,46004,46005],{"class":5869},"file",[34,46007,31437],{"class":40},[34,46009,46010,46013,46015],{"class":36,"line":579},[34,46011,46012],{"class":40},"        os.makedirs(",[34,46014,46005],{"class":5869},[34,46016,807],{"class":40},[34,46018,46019],{"class":36,"line":589},[34,46020,3053],{"emptyLinePlaceholder":726},[34,46022,46023],{"class":36,"line":601},[34,46024,46025],{"class":205},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[34,46027,46028,46031,46033],{"class":36,"line":613},[34,46029,46030],{"class":40},"file_path",[34,46032,153],{"class":87},[34,46034,46035],{"class":156},"'data_cat_dog'\n",[34,46037,46038,46041,46043,46046,46048,46051,46053],{"class":36,"line":618},[34,46039,46040],{"class":40},"flower_class",[34,46042,153],{"class":87},[34,46044,46045],{"class":40},"[cla ",[34,46047,3678],{"class":87},[34,46049,46050],{"class":40}," cla ",[34,46052,26695],{"class":87},[34,46054,46055],{"class":40}," os.listdir(file_path)]\n",[34,46057,46058],{"class":36,"line":628},[34,46059,3053],{"emptyLinePlaceholder":726},[34,46061,46062],{"class":36,"line":640},[34,46063,46064],{"class":205},"# 创建训练集train文件夹\n",[34,46066,46067,46070,46073],{"class":36,"line":2301},[34,46068,46069],{"class":40},"mkfile(",[34,46071,46072],{"class":156},"'data\u002Ftrain'",[34,46074,807],{"class":40},[34,46076,46077,46079,46081,46083],{"class":36,"line":2307},[34,46078,3678],{"class":87},[34,46080,46050],{"class":40},[34,46082,26695],{"class":87},[34,46084,46085],{"class":40}," flower_class:\n",[34,46087,46088,46091,46094,46096],{"class":36,"line":2328},[34,46089,46090],{"class":40},"    mkfile(",[34,46092,46093],{"class":156},"'data\u002Ftrain\u002F'",[34,46095,1276],{"class":87},[34,46097,46098],{"class":40},"cla)\n",[34,46100,46101],{"class":36,"line":2333},[34,46102,3053],{"emptyLinePlaceholder":726},[34,46104,46105],{"class":36,"line":2347},[34,46106,46107],{"class":205},"# 创建验证集val文件夹\n",[34,46109,46110,46112,46115],{"class":36,"line":2352},[34,46111,46069],{"class":40},[34,46113,46114],{"class":156},"'data\u002Ftest'",[34,46116,807],{"class":40},[34,46118,46119,46121,46123,46125],{"class":36,"line":2381},[34,46120,3678],{"class":87},[34,46122,46050],{"class":40},[34,46124,26695],{"class":87},[34,46126,46085],{"class":40},[34,46128,46129,46131,46134,46136],{"class":36,"line":2386},[34,46130,46090],{"class":40},[34,46132,46133],{"class":156},"'data\u002Ftest\u002F'",[34,46135,1276],{"class":87},[34,46137,46098],{"class":40},[34,46139,46140],{"class":36,"line":2403},[34,46141,3053],{"emptyLinePlaceholder":726},[34,46143,46144],{"class":36,"line":2408},[34,46145,46146],{"class":205},"# 划分比例，训练集：测试集=9：1\n",[34,46148,46149,46152,46154],{"class":36,"line":2413},[34,46150,46151],{"class":40},"split_rate",[34,46153,153],{"class":87},[34,46155,46156],{"class":63},"0.1\n",[34,46158,46159],{"class":36,"line":2418},[34,46160,3053],{"emptyLinePlaceholder":726},[34,46162,46163],{"class":36,"line":2432},[34,46164,46165],{"class":205},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[34,46167,46168],{"class":36,"line":2437},[34,46169,46170],{"class":205},"# cla_path：当前类别的原始图片路径\n",[34,46172,46173],{"class":36,"line":3230},[34,46174,46175],{"class":205},"# images：当前类别下所有图片的文件名列表\n",[34,46177,46178],{"class":36,"line":3244},[34,46179,46180],{"class":205},"# num：该类别图片总数\n",[34,46182,46183],{"class":36,"line":3252},[34,46184,46185],{"class":205},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[34,46187,46188],{"class":36,"line":3257},[34,46189,3053],{"emptyLinePlaceholder":726},[34,46191,46192,46194,46196,46198],{"class":36,"line":3263},[34,46193,3678],{"class":87},[34,46195,46050],{"class":40},[34,46197,26695],{"class":87},[34,46199,46085],{"class":40},[34,46201,46202,46205,46207,46210,46212,46215,46218,46220,46222,46224],{"class":36,"line":3269},[34,46203,46204],{"class":40},"    cla_path ",[34,46206,153],{"class":87},[34,46208,46209],{"class":40}," file_path ",[34,46211,1276],{"class":87},[34,46213,46214],{"class":156}," '\u002F'",[34,46216,46217],{"class":87}," +",[34,46219,46050],{"class":40},[34,46221,1276],{"class":87},[34,46223,46214],{"class":156},[34,46225,46226],{"class":205},"  # 某一类别的子目录\n",[34,46228,46229,46232,46234,46237],{"class":36,"line":3274},[34,46230,46231],{"class":40},"    images ",[34,46233,153],{"class":87},[34,46235,46236],{"class":40}," os.listdir(cla_path)  ",[34,46238,46239],{"class":205},"# iamges 列表存储了该目录下所有图像的名称\n",[34,46241,46242,46245,46247,46249],{"class":36,"line":8601},[34,46243,46244],{"class":40},"    num ",[34,46246,153],{"class":87},[34,46248,7984],{"class":63},[34,46250,46251],{"class":40},"(images)\n",[34,46253,46254,46257,46259,46262,46264,46266,46268,46271,46273,46276],{"class":36,"line":8625},[34,46255,46256],{"class":40},"    eval_index ",[34,46258,153],{"class":87},[34,46260,46261],{"class":40}," random.sample(images, ",[34,46263,1288],{"class":5869},[34,46265,153],{"class":87},[34,46267,804],{"class":63},[34,46269,46270],{"class":40},"(num ",[34,46272,1250],{"class":87},[34,46274,46275],{"class":40}," split_rate))  ",[34,46277,46278],{"class":205},"# 从images列表中随机抽取 k 个图像名称\n",[34,46280,46281],{"class":36,"line":8630},[34,46282,46283],{"class":205},"    # 遍历该类别下的所有图片\n",[34,46285,46286],{"class":36,"line":8636},[34,46287,46288],{"class":205},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[34,46290,46291,46293,46296,46298,46300],{"class":36,"line":8663},[34,46292,3854],{"class":87},[34,46294,46295],{"class":40}," index, image ",[34,46297,26695],{"class":87},[34,46299,32257],{"class":63},[34,46301,46302],{"class":40},"(images):\n",[34,46304,46305],{"class":36,"line":8668},[34,46306,46307],{"class":205},"        # eval_index 中保存验证集val的图像名称\n",[34,46309,46310,46312,46315,46317],{"class":36,"line":8674},[34,46311,3150],{"class":87},[34,46313,46314],{"class":40}," image ",[34,46316,26695],{"class":87},[34,46318,46319],{"class":40}," eval_index:\n",[34,46321,46322,46325,46327,46330,46332],{"class":36,"line":8686},[34,46323,46324],{"class":40},"            image_path ",[34,46326,153],{"class":87},[34,46328,46329],{"class":40}," cla_path ",[34,46331,1276],{"class":87},[34,46333,46334],{"class":40}," image\n",[34,46336,46337,46340,46342,46345,46347],{"class":36,"line":8698},[34,46338,46339],{"class":40},"            new_path ",[34,46341,153],{"class":87},[34,46343,46344],{"class":156}," 'data\u002Ftest\u002F'",[34,46346,46217],{"class":87},[34,46348,46349],{"class":40}," cla\n",[34,46351,46352,46355],{"class":36,"line":8710},[34,46353,46354],{"class":40},"            copy(image_path, new_path)  ",[34,46356,46357],{"class":205},"# 将选中的图像复制到新路径\n",[34,46359,46360],{"class":36,"line":10369},[34,46361,3053],{"emptyLinePlaceholder":726},[34,46363,46364],{"class":36,"line":10394},[34,46365,46366],{"class":205},"        # 其余的图像保存在训练集train中\n",[34,46368,46369,46371],{"class":36,"line":10417},[34,46370,3187],{"class":87},[34,46372,4392],{"class":40},[34,46374,46375,46377,46379,46381,46383],{"class":36,"line":10441},[34,46376,46324],{"class":40},[34,46378,153],{"class":87},[34,46380,46329],{"class":40},[34,46382,1276],{"class":87},[34,46384,46334],{"class":40},[34,46386,46387,46389,46391,46394,46396],{"class":36,"line":10446},[34,46388,46339],{"class":40},[34,46390,153],{"class":87},[34,46392,46393],{"class":156}," 'data\u002Ftrain\u002F'",[34,46395,46217],{"class":87},[34,46397,46349],{"class":40},[34,46399,46400],{"class":36,"line":10451},[34,46401,46402],{"class":40},"            copy(image_path, new_path)\n",[34,46404,46405],{"class":36,"line":10456},[34,46406,46407],{"class":205},"            # 打印进度条信息\n",[34,46409,46410],{"class":36,"line":10465},[34,46411,46412],{"class":205},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[34,46414,46415,46417,46419,46421,46424,46426,46428,46431,46433,46435,46437,46440,46443,46445,46447,46450,46453,46455,46457,46460],{"class":36,"line":10470},[34,46416,33102],{"class":63},[34,46418,801],{"class":40},[34,46420,1046],{"class":156},[34,46422,46423],{"class":63},"\\r",[34,46425,1684],{"class":156},[34,46427,33110],{"class":63},[34,46429,46430],{"class":156},"] processing [",[34,46432,33110],{"class":63},[34,46434,1379],{"class":156},[34,46436,33110],{"class":63},[34,46438,46439],{"class":156},"]\"",[34,46441,46442],{"class":40},".format(cla, index ",[34,46444,1276],{"class":87},[34,46446,25771],{"class":63},[34,46448,46449],{"class":40},", num), ",[34,46451,46452],{"class":5869},"end",[34,46454,153],{"class":87},[34,46456,8305],{"class":156},[34,46458,46459],{"class":40},")  ",[34,46461,46462],{"class":205},"# processing bar\n",[34,46464,46465,46467],{"class":36,"line":10476},[34,46466,31950],{"class":63},[34,46468,2629],{"class":40},[34,46470,46471],{"class":36,"line":10497},[34,46472,3053],{"emptyLinePlaceholder":726},[34,46474,46475,46477,46479,46482],{"class":36,"line":10503},[34,46476,31066],{"class":63},[34,46478,801],{"class":40},[34,46480,46481],{"class":156},"\"processing done!\"",[34,46483,807],{"class":40},[108,46485,46486],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22650,46488,46490],{"id":46489},"_242模型代码","2.4.2.模型代码",[108,46492,46493],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[24,46495,46497],{"className":31029,"code":46496,"language":31031,"meta":29,"style":29},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[31,46498,46499,46505,46515,46525,46529,46545,46553,46567,46577,46581,46611,46615,46649,46695,46699,46733,46779,46783,46787,46821,46851,46855,46863,46877,46899,46921,46939,46943,46957,46961,46965,46981,46985,46993,47007,47017,47061,47065,47093,47097,47107,47135,47139,47175,47179,47207,47211,47221,47253,47285,47313,47317,47327,47359,47391,47423,47455,47487,47515,47519,47529,47561,47593,47605,47609,47621,47625,47629,47641,47649,47669,47673,47677,47681,47685,47689,47693,47707,47715,47723,47735,47749,47757,47761,47769,47779,47789,47799,47809,47819,47825,47829,47833,47845,47865,47873],{"__ignoreMap":29},[34,46500,46501,46503],{"class":36,"line":37},[34,46502,31043],{"class":87},[34,46504,31046],{"class":40},[34,46506,46507,46509,46511,46513],{"class":36,"line":51},[34,46508,31388],{"class":87},[34,46510,31391],{"class":40},[34,46512,31043],{"class":87},[34,46514,31396],{"class":40},[34,46516,46517,46519,46521,46523],{"class":36,"line":60},[34,46518,31388],{"class":87},[34,46520,31408],{"class":40},[34,46522,31043],{"class":87},[34,46524,31413],{"class":40},[34,46526,46527],{"class":36,"line":76},[34,46528,3053],{"emptyLinePlaceholder":726},[34,46530,46531,46533,46535,46537,46539,46541,46543],{"class":36,"line":93},[34,46532,15347],{"class":87},[34,46534,42144],{"class":149},[34,46536,801],{"class":40},[34,46538,31429],{"class":149},[34,46540,1353],{"class":40},[34,46542,31434],{"class":149},[34,46544,31437],{"class":40},[34,46546,46547,46549,46551],{"class":36,"line":99},[34,46548,31452],{"class":87},[34,46550,31455],{"class":63},[34,46552,42163],{"class":40},[34,46554,46555,46557,46559,46561,46563,46565],{"class":36,"line":353},[34,46556,31468],{"class":63},[34,46558,42170],{"class":40},[34,46560,31474],{"class":63},[34,46562,31477],{"class":40},[34,46564,31480],{"class":63},[34,46566,2629],{"class":40},[34,46568,46569,46571,46573,46575],{"class":36,"line":359},[34,46570,31496],{"class":63},[34,46572,35422],{"class":40},[34,46574,153],{"class":87},[34,46576,35427],{"class":40},[34,46578,46579],{"class":36,"line":579},[34,46580,42193],{"class":205},[34,46582,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609],{"class":36,"line":589},[34,46584,31496],{"class":63},[34,46586,42200],{"class":40},[34,46588,153],{"class":87},[34,46590,31504],{"class":40},[34,46592,31507],{"class":5869},[34,46594,153],{"class":87},[34,46596,42211],{"class":40},[34,46598,31516],{"class":5869},[34,46600,153],{"class":87},[34,46602,42218],{"class":40},[34,46604,31525],{"class":5869},[34,46606,153],{"class":87},[34,46608,1013],{"class":63},[34,46610,807],{"class":40},[34,46612,46613],{"class":36,"line":601},[34,46614,42231],{"class":205},[34,46616,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647],{"class":36,"line":613},[34,46618,31496],{"class":63},[34,46620,42238],{"class":40},[34,46622,153],{"class":87},[34,46624,31504],{"class":40},[34,46626,31507],{"class":5869},[34,46628,153],{"class":87},[34,46630,42211],{"class":40},[34,46632,31516],{"class":5869},[34,46634,153],{"class":87},[34,46636,42255],{"class":40},[34,46638,987],{"class":63},[34,46640,42260],{"class":40},[34,46642,31525],{"class":5869},[34,46644,153],{"class":87},[34,46646,1013],{"class":63},[34,46648,807],{"class":40},[34,46650,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693],{"class":36,"line":618},[34,46652,31496],{"class":63},[34,46654,42275],{"class":40},[34,46656,153],{"class":87},[34,46658,31504],{"class":40},[34,46660,31507],{"class":5869},[34,46662,153],{"class":87},[34,46664,42255],{"class":40},[34,46666,987],{"class":63},[34,46668,42260],{"class":40},[34,46670,31516],{"class":5869},[34,46672,153],{"class":87},[34,46674,42255],{"class":40},[34,46676,1013],{"class":63},[34,46678,42260],{"class":40},[34,46680,31525],{"class":5869},[34,46682,153],{"class":87},[34,46684,869],{"class":63},[34,46686,1173],{"class":40},[34,46688,31534],{"class":5869},[34,46690,153],{"class":87},[34,46692,1013],{"class":63},[34,46694,807],{"class":40},[34,46696,46697],{"class":36,"line":628},[34,46698,42320],{"class":205},[34,46700,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731],{"class":36,"line":640},[34,46702,31496],{"class":63},[34,46704,42327],{"class":40},[34,46706,153],{"class":87},[34,46708,31504],{"class":40},[34,46710,31507],{"class":5869},[34,46712,153],{"class":87},[34,46714,42211],{"class":40},[34,46716,31516],{"class":5869},[34,46718,153],{"class":87},[34,46720,42344],{"class":40},[34,46722,987],{"class":63},[34,46724,42260],{"class":40},[34,46726,31525],{"class":5869},[34,46728,153],{"class":87},[34,46730,1013],{"class":63},[34,46732,807],{"class":40},[34,46734,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777],{"class":36,"line":2301},[34,46736,31496],{"class":63},[34,46738,42363],{"class":40},[34,46740,153],{"class":87},[34,46742,31504],{"class":40},[34,46744,31507],{"class":5869},[34,46746,153],{"class":87},[34,46748,42344],{"class":40},[34,46750,987],{"class":63},[34,46752,42260],{"class":40},[34,46754,31516],{"class":5869},[34,46756,153],{"class":87},[34,46758,42344],{"class":40},[34,46760,1013],{"class":63},[34,46762,42260],{"class":40},[34,46764,31525],{"class":5869},[34,46766,153],{"class":87},[34,46768,1114],{"class":63},[34,46770,1173],{"class":40},[34,46772,31534],{"class":5869},[34,46774,153],{"class":87},[34,46776,875],{"class":63},[34,46778,807],{"class":40},[34,46780,46781],{"class":36,"line":2307},[34,46782,42408],{"class":205},[34,46784,46785],{"class":36,"line":2328},[34,46786,42413],{"class":205},[34,46788,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819],{"class":36,"line":2333},[34,46790,31496],{"class":63},[34,46792,42420],{"class":40},[34,46794,153],{"class":87},[34,46796,35480],{"class":40},[34,46798,31525],{"class":5869},[34,46800,153],{"class":87},[34,46802,869],{"class":63},[34,46804,1173],{"class":40},[34,46806,31580],{"class":5869},[34,46808,153],{"class":87},[34,46810,1013],{"class":63},[34,46812,1173],{"class":40},[34,46814,31534],{"class":5869},[34,46816,153],{"class":87},[34,46818,1013],{"class":63},[34,46820,807],{"class":40},[34,46822,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849],{"class":36,"line":2347},[34,46824,31496],{"class":63},[34,46826,42455],{"class":40},[34,46828,153],{"class":87},[34,46830,31504],{"class":40},[34,46832,31507],{"class":5869},[34,46834,153],{"class":87},[34,46836,42211],{"class":40},[34,46838,31516],{"class":5869},[34,46840,153],{"class":87},[34,46842,42472],{"class":40},[34,46844,31525],{"class":5869},[34,46846,153],{"class":87},[34,46848,1013],{"class":63},[34,46850,807],{"class":40},[34,46852,46853],{"class":36,"line":2352},[34,46854,3053],{"emptyLinePlaceholder":726},[34,46856,46857,46859,46861],{"class":36,"line":2381},[34,46858,31452],{"class":87},[34,46860,31744],{"class":149},[34,46862,31747],{"class":40},[34,46864,46865,46867,46869,46871,46873,46875],{"class":36,"line":2386},[34,46866,42497],{"class":40},[34,46868,153],{"class":87},[34,46870,31474],{"class":63},[34,46872,35835],{"class":40},[34,46874,31474],{"class":63},[34,46876,42508],{"class":40},[34,46878,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897],{"class":36,"line":2403},[34,46880,7738],{"class":40},[34,46882,153],{"class":87},[34,46884,31474],{"class":63},[34,46886,35835],{"class":40},[34,46888,31474],{"class":63},[34,46890,42523],{"class":40},[34,46892,31474],{"class":63},[34,46894,35835],{"class":40},[34,46896,31474],{"class":63},[34,46898,42532],{"class":40},[34,46900,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919],{"class":36,"line":2408},[34,46902,42537],{"class":40},[34,46904,153],{"class":87},[34,46906,31474],{"class":63},[34,46908,35835],{"class":40},[34,46910,31474],{"class":63},[34,46912,42548],{"class":40},[34,46914,31474],{"class":63},[34,46916,35835],{"class":40},[34,46918,31474],{"class":63},[34,46920,42557],{"class":40},[34,46922,46923,46925,46927,46929,46931,46933,46935,46937],{"class":36,"line":2413},[34,46924,42562],{"class":40},[34,46926,153],{"class":87},[34,46928,31474],{"class":63},[34,46930,35835],{"class":40},[34,46932,31474],{"class":63},[34,46934,42573],{"class":40},[34,46936,31474],{"class":63},[34,46938,42578],{"class":40},[34,46940,46941],{"class":36,"line":2418},[34,46942,42583],{"class":205},[34,46944,46945,46947,46949,46951,46953,46955],{"class":36,"line":2432},[34,46946,15405],{"class":87},[34,46948,42590],{"class":40},[34,46950,33336],{"class":5869},[34,46952,153],{"class":87},[34,46954,1013],{"class":63},[34,46956,807],{"class":40},[34,46958,46959],{"class":36,"line":2437},[34,46960,3053],{"emptyLinePlaceholder":726},[34,46962,46963],{"class":36,"line":3230},[34,46964,42611],{"class":205},[34,46966,46967,46969,46971,46973,46975,46977,46979],{"class":36,"line":3244},[34,46968,15347],{"class":87},[34,46970,42618],{"class":149},[34,46972,801],{"class":40},[34,46974,31429],{"class":149},[34,46976,1353],{"class":40},[34,46978,31434],{"class":149},[34,46980,31437],{"class":40},[34,46982,46983],{"class":36,"line":3252},[34,46984,42633],{"class":205},[34,46986,46987,46989,46991],{"class":36,"line":3257},[34,46988,31452],{"class":87},[34,46990,31455],{"class":63},[34,46992,42642],{"class":40},[34,46994,46995,46997,46999,47001,47003,47005],{"class":36,"line":3263},[34,46996,31468],{"class":63},[34,46998,42649],{"class":40},[34,47000,31474],{"class":63},[34,47002,31477],{"class":40},[34,47004,31480],{"class":63},[34,47006,2629],{"class":40},[34,47008,47009,47011,47013,47015],{"class":36,"line":3269},[34,47010,31496],{"class":63},[34,47012,42664],{"class":40},[34,47014,153],{"class":87},[34,47016,38660],{"class":40},[34,47018,47019,47021,47023,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059],{"class":36,"line":3274},[34,47020,38665],{"class":40},[34,47022,31507],{"class":5869},[34,47024,153],{"class":87},[34,47026,869],{"class":63},[34,47028,1173],{"class":40},[34,47030,31516],{"class":5869},[34,47032,153],{"class":87},[34,47034,999],{"class":63},[34,47036,1173],{"class":40},[34,47038,31525],{"class":5869},[34,47040,153],{"class":87},[34,47042,1164],{"class":63},[34,47044,1173],{"class":40},[34,47046,31580],{"class":5869},[34,47048,153],{"class":87},[34,47050,875],{"class":63},[34,47052,1173],{"class":40},[34,47054,31534],{"class":5869},[34,47056,153],{"class":87},[34,47058,869],{"class":63},[34,47060,38698],{"class":40},[34,47062,47063],{"class":36,"line":8601},[34,47064,38703],{"class":40},[34,47066,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091],{"class":36,"line":8625},[34,47068,38748],{"class":40},[34,47070,31525],{"class":5869},[34,47072,153],{"class":87},[34,47074,869],{"class":63},[34,47076,1173],{"class":40},[34,47078,31580],{"class":5869},[34,47080,153],{"class":87},[34,47082,875],{"class":63},[34,47084,1173],{"class":40},[34,47086,31534],{"class":5869},[34,47088,153],{"class":87},[34,47090,1013],{"class":63},[34,47092,807],{"class":40},[34,47094,47095],{"class":36,"line":8630},[34,47096,38777],{"class":40},[34,47098,47099,47101,47103,47105],{"class":36,"line":8636},[34,47100,31496],{"class":63},[34,47102,42755],{"class":40},[34,47104,153],{"class":87},[34,47106,38660],{"class":40},[34,47108,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133],{"class":36,"line":8663},[34,47110,38665],{"class":40},[34,47112,31507],{"class":5869},[34,47114,153],{"class":87},[34,47116,999],{"class":63},[34,47118,1173],{"class":40},[34,47120,31516],{"class":5869},[34,47122,153],{"class":87},[34,47124,999],{"class":63},[34,47126,1173],{"class":40},[34,47128,31525],{"class":5869},[34,47130,153],{"class":87},[34,47132,1013],{"class":63},[34,47134,38698],{"class":40},[34,47136,47137],{"class":36,"line":8668},[34,47138,38703],{"class":40},[34,47140,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167,47169,47171,47173],{"class":36,"line":8674},[34,47142,38665],{"class":40},[34,47144,31507],{"class":5869},[34,47146,153],{"class":87},[34,47148,999],{"class":63},[34,47150,1173],{"class":40},[34,47152,31516],{"class":5869},[34,47154,153],{"class":87},[34,47156,42810],{"class":63},[34,47158,1173],{"class":40},[34,47160,31525],{"class":5869},[34,47162,153],{"class":87},[34,47164,869],{"class":63},[34,47166,1173],{"class":40},[34,47168,31534],{"class":5869},[34,47170,153],{"class":87},[34,47172,1013],{"class":63},[34,47174,38698],{"class":40},[34,47176,47177],{"class":36,"line":8686},[34,47178,38703],{"class":40},[34,47180,47181,47183,47185,47187,47189,47191,47193,47195,47197,47199,47201,47203,47205],{"class":36,"line":8698},[34,47182,38748],{"class":40},[34,47184,31525],{"class":5869},[34,47186,153],{"class":87},[34,47188,869],{"class":63},[34,47190,1173],{"class":40},[34,47192,31580],{"class":5869},[34,47194,153],{"class":87},[34,47196,875],{"class":63},[34,47198,1173],{"class":40},[34,47200,31534],{"class":5869},[34,47202,153],{"class":87},[34,47204,1013],{"class":63},[34,47206,807],{"class":40},[34,47208,47209],{"class":36,"line":8710},[34,47210,38777],{"class":40},[34,47212,47213,47215,47217,47219],{"class":36,"line":10369},[34,47214,31496],{"class":63},[34,47216,42871],{"class":40},[34,47218,153],{"class":87},[34,47220,38660],{"class":40},[34,47222,47223,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243,47245,47247,47249,47251],{"class":36,"line":10394},[34,47224,42880],{"class":40},[34,47226,42810],{"class":63},[34,47228,1173],{"class":40},[34,47230,999],{"class":63},[34,47232,42889],{"class":40},[34,47234,1005],{"class":63},[34,47236,1173],{"class":40},[34,47238,32721],{"class":63},[34,47240,42898],{"class":40},[34,47242,1396],{"class":63},[34,47244,1173],{"class":40},[34,47246,993],{"class":63},[34,47248,42907],{"class":40},[34,47250,993],{"class":63},[34,47252,38698],{"class":40},[34,47254,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273,47275,47277,47279,47281,47283],{"class":36,"line":10417},[34,47256,42880],{"class":40},[34,47258,35521],{"class":63},[34,47260,1173],{"class":40},[34,47262,32721],{"class":63},[34,47264,42889],{"class":40},[34,47266,32721],{"class":63},[34,47268,1173],{"class":40},[34,47270,42810],{"class":63},[34,47272,42898],{"class":40},[34,47274,993],{"class":63},[34,47276,1173],{"class":40},[34,47278,1005],{"class":63},[34,47280,42907],{"class":40},[34,47282,999],{"class":63},[34,47284,38698],{"class":40},[34,47286,47287,47289,47291,47293,47295,47297,47299,47301,47303,47305,47307,47309,47311],{"class":36,"line":10441},[34,47288,38748],{"class":40},[34,47290,31525],{"class":5869},[34,47292,153],{"class":87},[34,47294,869],{"class":63},[34,47296,1173],{"class":40},[34,47298,31580],{"class":5869},[34,47300,153],{"class":87},[34,47302,875],{"class":63},[34,47304,1173],{"class":40},[34,47306,31534],{"class":5869},[34,47308,153],{"class":87},[34,47310,1013],{"class":63},[34,47312,807],{"class":40},[34,47314,47315],{"class":36,"line":10446},[34,47316,38777],{"class":40},[34,47318,47319,47321,47323,47325],{"class":36,"line":10451},[34,47320,31496],{"class":63},[34,47322,42982],{"class":40},[34,47324,153],{"class":87},[34,47326,38660],{"class":40},[34,47328,47329,47331,47333,47335,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355,47357],{"class":36,"line":10456},[34,47330,42880],{"class":40},[34,47332,42993],{"class":63},[34,47334,1173],{"class":40},[34,47336,42810],{"class":63},[34,47338,42889],{"class":40},[34,47340,1005],{"class":63},[34,47342,1173],{"class":40},[34,47344,43006],{"class":63},[34,47346,42898],{"class":40},[34,47348,1396],{"class":63},[34,47350,1173],{"class":40},[34,47352,1402],{"class":63},[34,47354,42907],{"class":40},[34,47356,999],{"class":63},[34,47358,38698],{"class":40},[34,47360,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383,47385,47387,47389],{"class":36,"line":10465},[34,47362,42880],{"class":40},[34,47364,39108],{"class":63},[34,47366,1173],{"class":40},[34,47368,21700],{"class":63},[34,47370,42889],{"class":40},[34,47372,1413],{"class":63},[34,47374,1173],{"class":40},[34,47376,32152],{"class":63},[34,47378,42898],{"class":40},[34,47380,84],{"class":63},[34,47382,1173],{"class":40},[34,47384,999],{"class":63},[34,47386,42907],{"class":40},[34,47388,999],{"class":63},[34,47390,38698],{"class":40},[34,47392,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415,47417,47419,47421],{"class":36,"line":10470},[34,47394,42880],{"class":40},[34,47396,39108],{"class":63},[34,47398,1173],{"class":40},[34,47400,32721],{"class":63},[34,47402,42889],{"class":40},[34,47404,32721],{"class":63},[34,47406,1173],{"class":40},[34,47408,35521],{"class":63},[34,47410,42898],{"class":40},[34,47412,84],{"class":63},[34,47414,1173],{"class":40},[34,47416,999],{"class":63},[34,47418,42907],{"class":40},[34,47420,999],{"class":63},[34,47422,38698],{"class":40},[34,47424,47425,47427,47429,47431,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451,47453],{"class":36,"line":10476},[34,47426,42880],{"class":40},[34,47428,39108],{"class":63},[34,47430,1173],{"class":40},[34,47432,1413],{"class":63},[34,47434,42889],{"class":40},[34,47436,32721],{"class":63},[34,47438,1173],{"class":40},[34,47440,43103],{"class":63},[34,47442,42898],{"class":40},[34,47444,993],{"class":63},[34,47446,1173],{"class":40},[34,47448,999],{"class":63},[34,47450,42907],{"class":40},[34,47452,999],{"class":63},[34,47454,38698],{"class":40},[34,47456,47457,47459,47461,47463,47465,47467,47469,47471,47473,47475,47477,47479,47481,47483,47485],{"class":36,"line":10497},[34,47458,42880],{"class":40},[34,47460,43124],{"class":63},[34,47462,1173],{"class":40},[34,47464,35521],{"class":63},[34,47466,42889],{"class":40},[34,47468,21700],{"class":63},[34,47470,1173],{"class":40},[34,47472,43137],{"class":63},[34,47474,42898],{"class":40},[34,47476,993],{"class":63},[34,47478,1173],{"class":40},[34,47480,32721],{"class":63},[34,47482,42907],{"class":40},[34,47484,32721],{"class":63},[34,47486,38698],{"class":40},[34,47488,47489,47491,47493,47495,47497,47499,47501,47503,47505,47507,47509,47511,47513],{"class":36,"line":10503},[34,47490,38748],{"class":40},[34,47492,31525],{"class":5869},[34,47494,153],{"class":87},[34,47496,869],{"class":63},[34,47498,1173],{"class":40},[34,47500,31580],{"class":5869},[34,47502,153],{"class":87},[34,47504,875],{"class":63},[34,47506,1173],{"class":40},[34,47508,31534],{"class":5869},[34,47510,153],{"class":87},[34,47512,1013],{"class":63},[34,47514,807],{"class":40},[34,47516,47517],{"class":36,"line":10517},[34,47518,38777],{"class":40},[34,47520,47521,47523,47525,47527],{"class":36,"line":10523},[34,47522,31496],{"class":63},[34,47524,43190],{"class":40},[34,47526,153],{"class":87},[34,47528,38660],{"class":40},[34,47530,47531,47533,47535,47537,47539,47541,47543,47545,47547,47549,47551,47553,47555,47557,47559],{"class":36,"line":10550},[34,47532,42880],{"class":40},[34,47534,43201],{"class":63},[34,47536,1173],{"class":40},[34,47538,35521],{"class":63},[34,47540,42889],{"class":40},[34,47542,21700],{"class":63},[34,47544,1173],{"class":40},[34,47546,43137],{"class":63},[34,47548,42898],{"class":40},[34,47550,993],{"class":63},[34,47552,1173],{"class":40},[34,47554,32721],{"class":63},[34,47556,42907],{"class":40},[34,47558,32721],{"class":63},[34,47560,38698],{"class":40},[34,47562,47563,47565,47567,47569,47571,47573,47575,47577,47579,47581,47583,47585,47587,47589,47591],{"class":36,"line":10559},[34,47564,42880],{"class":40},[34,47566,43201],{"class":63},[34,47568,1173],{"class":40},[34,47570,35591],{"class":63},[34,47572,42889],{"class":40},[34,47574,42810],{"class":63},[34,47576,1173],{"class":40},[34,47578,35591],{"class":63},[34,47580,42898],{"class":40},[34,47582,1402],{"class":63},[34,47584,1173],{"class":40},[34,47586,32721],{"class":63},[34,47588,42907],{"class":40},[34,47590,32721],{"class":63},[34,47592,38698],{"class":40},[34,47594,47595,47597,47599,47601,47603],{"class":36,"line":10565},[34,47596,43264],{"class":40},[34,47598,1013],{"class":63},[34,47600,1173],{"class":40},[34,47602,1013],{"class":63},[34,47604,43273],{"class":40},[34,47606,47607],{"class":36,"line":10573},[34,47608,39441],{"class":40},[34,47610,47611,47613,47615,47617,47619],{"class":36,"line":10578},[34,47612,39446],{"class":40},[34,47614,43284],{"class":63},[34,47616,1173],{"class":40},[34,47618,875],{"class":63},[34,47620,807],{"class":40},[34,47622,47623],{"class":36,"line":17256},[34,47624,38777],{"class":40},[34,47626,47627],{"class":36,"line":17262},[34,47628,43299],{"class":205},[34,47630,47631,47633,47635,47637,47639],{"class":36,"line":17285},[34,47632,4056],{"class":87},[34,47634,39519],{"class":40},[34,47636,26695],{"class":87},[34,47638,39524],{"class":63},[34,47640,39527],{"class":40},[34,47642,47643,47645,47647],{"class":36,"line":17291},[34,47644,5295],{"class":87},[34,47646,39539],{"class":63},[34,47648,39542],{"class":40},[34,47650,47651,47653,47655,47657,47659,47661,47663,47665,47667],{"class":36,"line":17314},[34,47652,39552],{"class":40},[34,47654,43326],{"class":5869},[34,47656,153],{"class":87},[34,47658,43331],{"class":156},[34,47660,1173],{"class":40},[34,47662,39555],{"class":5869},[34,47664,153],{"class":87},[34,47666,39560],{"class":156},[34,47668,807],{"class":40},[34,47670,47671],{"class":36,"line":17328},[34,47672,43346],{"class":205},[34,47674,47675],{"class":36,"line":17348},[34,47676,43351],{"class":205},[34,47678,47679],{"class":36,"line":17354},[34,47680,43356],{"class":205},[34,47682,47683],{"class":36,"line":17365},[34,47684,43361],{"class":205},[34,47686,47687],{"class":36,"line":17388},[34,47688,43366],{"class":205},[34,47690,47691],{"class":36,"line":17410},[34,47692,43371],{"class":205},[34,47694,47695,47697,47699,47701,47703,47705],{"class":36,"line":17415},[34,47696,39572],{"class":87},[34,47698,39575],{"class":40},[34,47700,39578],{"class":87},[34,47702,39581],{"class":87},[34,47704,39584],{"class":63},[34,47706,4392],{"class":40},[34,47708,47709,47711,47713],{"class":36,"line":17421},[34,47710,39596],{"class":40},[34,47712,987],{"class":63},[34,47714,807],{"class":40},[34,47716,47717,47719,47721],{"class":36,"line":17435},[34,47718,43398],{"class":87},[34,47720,39539],{"class":63},[34,47722,39615],{"class":40},[34,47724,47725,47727,47729,47731,47733],{"class":36,"line":17448},[34,47726,43407],{"class":40},[34,47728,987],{"class":63},[34,47730,1173],{"class":40},[34,47732,39637],{"class":63},[34,47734,807],{"class":40},[34,47736,47737,47739,47741,47743,47745,47747],{"class":36,"line":17453},[34,47738,43420],{"class":87},[34,47740,39575],{"class":40},[34,47742,39578],{"class":87},[34,47744,39581],{"class":87},[34,47746,39584],{"class":63},[34,47748,4392],{"class":40},[34,47750,47751,47753,47755],{"class":36,"line":17467},[34,47752,43435],{"class":40},[34,47754,987],{"class":63},[34,47756,807],{"class":40},[34,47758,47759],{"class":36,"line":17472},[34,47760,35816],{"class":205},[34,47762,47763,47765,47767],{"class":36,"line":17478},[34,47764,31452],{"class":87},[34,47766,31744],{"class":149},[34,47768,31747],{"class":40},[34,47770,47771,47773,47775,47777],{"class":36,"line":17483},[34,47772,31752],{"class":40},[34,47774,153],{"class":87},[34,47776,31474],{"class":63},[34,47778,43462],{"class":40},[34,47780,47781,47783,47785,47787],{"class":36,"line":17497},[34,47782,31752],{"class":40},[34,47784,153],{"class":87},[34,47786,31474],{"class":63},[34,47788,43473],{"class":40},[34,47790,47791,47793,47795,47797],{"class":36,"line":17502},[34,47792,31752],{"class":40},[34,47794,153],{"class":87},[34,47796,31474],{"class":63},[34,47798,43484],{"class":40},[34,47800,47801,47803,47805,47807],{"class":36,"line":17507},[34,47802,31752],{"class":40},[34,47804,153],{"class":87},[34,47806,31474],{"class":63},[34,47808,43495],{"class":40},[34,47810,47811,47813,47815,47817],{"class":36,"line":17521},[34,47812,31752],{"class":40},[34,47814,153],{"class":87},[34,47816,31474],{"class":63},[34,47818,43506],{"class":40},[34,47820,47821,47823],{"class":36,"line":17533},[34,47822,15405],{"class":87},[34,47824,31860],{"class":40},[34,47826,47827],{"class":36,"line":17538},[34,47828,3053],{"emptyLinePlaceholder":726},[34,47830,47831],{"class":36,"line":17551},[34,47832,43521],{"class":205},[34,47834,47835,47837,47839,47841,47843],{"class":36,"line":17556},[34,47836,2191],{"class":87},[34,47838,31871],{"class":63},[34,47840,3602],{"class":87},[34,47842,31876],{"class":156},[34,47844,4392],{"class":40},[34,47846,47847,47849,47851,47853,47855,47857,47859,47861,47863],{"class":36,"line":17561},[34,47848,31888],{"class":40},[34,47850,153],{"class":87},[34,47852,31102],{"class":40},[34,47854,31895],{"class":156},[34,47856,2358],{"class":87},[34,47858,31900],{"class":40},[34,47860,2355],{"class":87},[34,47862,31127],{"class":156},[34,47864,807],{"class":40},[34,47866,47867,47869,47871],{"class":36,"line":17566},[34,47868,31940],{"class":40},[34,47870,153],{"class":87},[34,47872,43562],{"class":40},[34,47874,47875,47877,47879,47881,47883,47885,47887,47889],{"class":36,"line":17579},[34,47876,31950],{"class":63},[34,47878,31953],{"class":40},[34,47880,1013],{"class":63},[34,47882,1173],{"class":40},[34,47884,32152],{"class":63},[34,47886,1173],{"class":40},[34,47888,32152],{"class":63},[34,47890,31966],{"class":40},[22650,47892,47894],{"id":47893},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[108,47896,47897],{},"计算图片的均值与方差，用于训练中归一化处理操作",[24,47899,47901],{"className":31029,"code":47900,"language":31031,"meta":29,"style":29},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[31,47902,47903,47908,47921,47926,47932,47937,47947,47951,47956,47966,47970,47975,47985,48002,48006,48011,48023,48035,48066,48075,48085,48095,48099,48104,48119,48123,48128,48133,48138,48148,48153,48178,48182,48187,48202,48206,48219,48223,48228,48233,48238,48243,48248,48258,48268,48291,48299,48307,48315,48319,48331,48335,48340,48344,48348,48355,48375,48399,48406,48420,48425,48430,48434,48448,48452,48464],{"__ignoreMap":29},[34,47904,47905],{"class":36,"line":37},[34,47906,47907],{"class":205},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[34,47909,47910,47912,47915,47918],{"class":36,"line":51},[34,47911,31388],{"class":87},[34,47913,47914],{"class":63}," PIL",[34,47916,47917],{"class":87}," import",[34,47919,47920],{"class":40}," Image\n",[34,47922,47923],{"class":36,"line":60},[34,47924,47925],{"class":205},"# os 用来处理文件夹和文件路径\n",[34,47927,47928,47930],{"class":36,"line":76},[34,47929,31043],{"class":87},[34,47931,45956],{"class":40},[34,47933,47934],{"class":36,"line":93},[34,47935,47936],{"class":205},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[34,47938,47939,47941,47943,47945],{"class":36,"line":99},[34,47940,31043],{"class":87},[34,47942,32031],{"class":40},[34,47944,32034],{"class":87},[34,47946,32037],{"class":40},[34,47948,47949],{"class":36,"line":353},[34,47950,3053],{"emptyLinePlaceholder":726},[34,47952,47953],{"class":36,"line":359},[34,47954,47955],{"class":205},"# 文件夹路径，包含所有图片文件\n",[34,47957,47958,47961,47963],{"class":36,"line":579},[34,47959,47960],{"class":40},"folder_path ",[34,47962,153],{"class":87},[34,47964,47965],{"class":156}," 'data_cat_dog'\n",[34,47967,47968],{"class":36,"line":589},[34,47969,3053],{"emptyLinePlaceholder":726},[34,47971,47972],{"class":36,"line":601},[34,47973,47974],{"class":205},"# 初始化累积变量\n",[34,47976,47977,47980,47982],{"class":36,"line":613},[34,47978,47979],{"class":40},"total_pixels ",[34,47981,153],{"class":87},[34,47983,47984],{"class":63}," 0\n",[34,47986,47987,47990,47992,47995,47997,47999],{"class":36,"line":618},[34,47988,47989],{"class":40},"sum_normalized_pixel_values ",[34,47991,153],{"class":87},[34,47993,47994],{"class":40}," np.zeros(",[34,47996,869],{"class":63},[34,47998,46459],{"class":40},[34,48000,48001],{"class":205},"# 如果是RGB图像，需要三个通道的均值和方差\n",[34,48003,48004],{"class":36,"line":628},[34,48005,3053],{"emptyLinePlaceholder":726},[34,48007,48008],{"class":36,"line":640},[34,48009,48010],{"class":205},"# 遍历文件夹中的图片文件\n",[34,48012,48013,48015,48018,48020],{"class":36,"line":2301},[34,48014,3678],{"class":87},[34,48016,48017],{"class":40}," root, dirs, files ",[34,48019,26695],{"class":87},[34,48021,48022],{"class":40}," os.walk(folder_path):\n",[34,48024,48025,48027,48030,48032],{"class":36,"line":2307},[34,48026,3854],{"class":87},[34,48028,48029],{"class":40}," filename ",[34,48031,26695],{"class":87},[34,48033,48034],{"class":40}," files:\n",[34,48036,48037,48039,48042,48045,48047,48050,48052,48055,48057,48060,48063],{"class":36,"line":2328},[34,48038,3150],{"class":87},[34,48040,48041],{"class":40}," filename.endswith((",[34,48043,48044],{"class":156},"'.jpg'",[34,48046,13088],{"class":40},[34,48048,48049],{"class":156},"'.jpeg'",[34,48051,13088],{"class":40},[34,48053,48054],{"class":156},"'.png'",[34,48056,13088],{"class":40},[34,48058,48059],{"class":156},"'.bmp'",[34,48061,48062],{"class":40},")):  ",[34,48064,48065],{"class":205},"# 可根据实际情况添加其他格式\n",[34,48067,48068,48070,48072],{"class":36,"line":2333},[34,48069,46324],{"class":40},[34,48071,153],{"class":87},[34,48073,48074],{"class":40}," os.path.join(root, filename)\n",[34,48076,48077,48080,48082],{"class":36,"line":2347},[34,48078,48079],{"class":40},"            image ",[34,48081,153],{"class":87},[34,48083,48084],{"class":40}," Image.open(image_path)\n",[34,48086,48087,48090,48092],{"class":36,"line":2352},[34,48088,48089],{"class":40},"            image_array ",[34,48091,153],{"class":87},[34,48093,48094],{"class":40}," np.array(image)\n",[34,48096,48097],{"class":36,"line":2381},[34,48098,3053],{"emptyLinePlaceholder":726},[34,48100,48101],{"class":36,"line":2386},[34,48102,48103],{"class":205},"            # 归一化像素值到0-1之间\n",[34,48105,48106,48109,48111,48114,48116],{"class":36,"line":2403},[34,48107,48108],{"class":40},"            normalized_image_array ",[34,48110,153],{"class":87},[34,48112,48113],{"class":40}," image_array ",[34,48115,1379],{"class":87},[34,48117,48118],{"class":63}," 255.0\n",[34,48120,48121],{"class":36,"line":2408},[34,48122,3053],{"emptyLinePlaceholder":726},[34,48124,48125],{"class":36,"line":2413},[34,48126,48127],{"class":205},"            # print(image_path)\n",[34,48129,48130],{"class":36,"line":2418},[34,48131,48132],{"class":205},"            # print(normalized_image_array.shape)\n",[34,48134,48135],{"class":36,"line":2432},[34,48136,48137],{"class":205},"            # 累积归一化后的像素值和像素数量\n",[34,48139,48140,48143,48145],{"class":36,"line":2437},[34,48141,48142],{"class":40},"            total_pixels ",[34,48144,10130],{"class":87},[34,48146,48147],{"class":40}," normalized_image_array.size\n",[34,48149,48150],{"class":36,"line":3230},[34,48151,48152],{"class":205},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[34,48154,48155,48158,48160,48163,48166,48168,48170,48172,48174,48176],{"class":36,"line":3244},[34,48156,48157],{"class":40},"            sum_normalized_pixel_values ",[34,48159,10130],{"class":87},[34,48161,48162],{"class":40}," np.sum(normalized_image_array, ",[34,48164,48165],{"class":5869},"axis",[34,48167,153],{"class":87},[34,48169,801],{"class":40},[34,48171,987],{"class":63},[34,48173,13088],{"class":40},[34,48175,1013],{"class":63},[34,48177,31148],{"class":40},[34,48179,48180],{"class":36,"line":3252},[34,48181,3053],{"emptyLinePlaceholder":726},[34,48183,48184],{"class":36,"line":3257},[34,48185,48186],{"class":205},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[34,48188,48189,48192,48194,48197,48199],{"class":36,"line":3263},[34,48190,48191],{"class":40},"mean ",[34,48193,153],{"class":87},[34,48195,48196],{"class":40}," sum_normalized_pixel_values ",[34,48198,1379],{"class":87},[34,48200,48201],{"class":40}," total_pixels\n",[34,48203,48204],{"class":36,"line":3269},[34,48205,3053],{"emptyLinePlaceholder":726},[34,48207,48208,48211,48213,48215,48217],{"class":36,"line":3274},[34,48209,48210],{"class":40},"sum_squared_diff ",[34,48212,153],{"class":87},[34,48214,47994],{"class":40},[34,48216,869],{"class":63},[34,48218,807],{"class":40},[34,48220,48221],{"class":36,"line":8601},[34,48222,3053],{"emptyLinePlaceholder":726},[34,48224,48225],{"class":36,"line":8625},[34,48226,48227],{"class":205},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[34,48229,48230],{"class":36,"line":8630},[34,48231,48232],{"class":205},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[34,48234,48235],{"class":36,"line":8636},[34,48236,48237],{"class":205},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[34,48239,48240],{"class":36,"line":8663},[34,48241,48242],{"class":205},"# Image.open(image_path)：打开图片\n",[34,48244,48245],{"class":36,"line":8668},[34,48246,48247],{"class":205},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[34,48249,48250,48252,48254,48256],{"class":36,"line":8674},[34,48251,3678],{"class":87},[34,48253,48017],{"class":40},[34,48255,26695],{"class":87},[34,48257,48022],{"class":40},[34,48259,48260,48262,48264,48266],{"class":36,"line":8686},[34,48261,3854],{"class":87},[34,48263,48029],{"class":40},[34,48265,26695],{"class":87},[34,48267,48034],{"class":40},[34,48269,48270,48272,48274,48276,48278,48280,48282,48284,48286,48288],{"class":36,"line":8698},[34,48271,3150],{"class":87},[34,48273,48041],{"class":40},[34,48275,48044],{"class":156},[34,48277,13088],{"class":40},[34,48279,48049],{"class":156},[34,48281,13088],{"class":40},[34,48283,48054],{"class":156},[34,48285,13088],{"class":40},[34,48287,48059],{"class":156},[34,48289,48290],{"class":40},")):\n",[34,48292,48293,48295,48297],{"class":36,"line":8710},[34,48294,46324],{"class":40},[34,48296,153],{"class":87},[34,48298,48074],{"class":40},[34,48300,48301,48303,48305],{"class":36,"line":10369},[34,48302,48079],{"class":40},[34,48304,153],{"class":87},[34,48306,48084],{"class":40},[34,48308,48309,48311,48313],{"class":36,"line":10394},[34,48310,48089],{"class":40},[34,48312,153],{"class":87},[34,48314,48094],{"class":40},[34,48316,48317],{"class":36,"line":10417},[34,48318,48103],{"class":205},[34,48320,48321,48323,48325,48327,48329],{"class":36,"line":10441},[34,48322,48108],{"class":40},[34,48324,153],{"class":87},[34,48326,48113],{"class":40},[34,48328,1379],{"class":87},[34,48330,48118],{"class":63},[34,48332,48333],{"class":36,"line":10446},[34,48334,48132],{"class":205},[34,48336,48337],{"class":36,"line":10451},[34,48338,48339],{"class":205},"            # print(mean.shape)\n",[34,48341,48342],{"class":36,"line":10456},[34,48343,48127],{"class":205},[34,48345,48346],{"class":36,"line":10465},[34,48347,3053],{"emptyLinePlaceholder":726},[34,48349,48350,48353],{"class":36,"line":10470},[34,48351,48352],{"class":87},"            try",[34,48354,4392],{"class":40},[34,48356,48357,48360,48362,48365,48367,48370,48372],{"class":36,"line":10476},[34,48358,48359],{"class":40},"                diff ",[34,48361,153],{"class":87},[34,48363,48364],{"class":40}," (normalized_image_array ",[34,48366,1327],{"class":87},[34,48368,48369],{"class":40}," mean) ",[34,48371,11314],{"class":87},[34,48373,48374],{"class":63}," 2\n",[34,48376,48377,48380,48382,48385,48387,48389,48391,48393,48395,48397],{"class":36,"line":10497},[34,48378,48379],{"class":40},"                sum_squared_diff ",[34,48381,10130],{"class":87},[34,48383,48384],{"class":40}," np.sum(diff, ",[34,48386,48165],{"class":5869},[34,48388,153],{"class":87},[34,48390,801],{"class":40},[34,48392,987],{"class":63},[34,48394,13088],{"class":40},[34,48396,1013],{"class":63},[34,48398,31148],{"class":40},[34,48400,48401,48404],{"class":36,"line":10503},[34,48402,48403],{"class":87},"            except",[34,48405,4392],{"class":40},[34,48407,48408,48411,48413,48415,48418],{"class":36,"line":10517},[34,48409,48410],{"class":63},"                print",[34,48412,801],{"class":40},[34,48414,851],{"class":87},[34,48416,48417],{"class":156},"\"捕获到自定义异常\"",[34,48419,807],{"class":40},[34,48421,48422],{"class":36,"line":10523},[34,48423,48424],{"class":205},"            # diff = (normalized_image_array - mean) ** 2\n",[34,48426,48427],{"class":36,"line":10550},[34,48428,48429],{"class":205},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[34,48431,48432],{"class":36,"line":10559},[34,48433,3053],{"emptyLinePlaceholder":726},[34,48435,48436,48439,48441,48444,48446],{"class":36,"line":10565},[34,48437,48438],{"class":40},"variance ",[34,48440,153],{"class":87},[34,48442,48443],{"class":40}," sum_squared_diff ",[34,48445,1379],{"class":87},[34,48447,48201],{"class":40},[34,48449,48450],{"class":36,"line":10573},[34,48451,3053],{"emptyLinePlaceholder":726},[34,48453,48454,48456,48458,48461],{"class":36,"line":10578},[34,48455,31066],{"class":63},[34,48457,801],{"class":40},[34,48459,48460],{"class":156},"\"Mean:\"",[34,48462,48463],{"class":40},", mean)\n",[34,48465,48466,48468,48470,48473],{"class":36,"line":17256},[34,48467,31066],{"class":63},[34,48469,801],{"class":40},[34,48471,48472],{"class":156},"\"Variance:\"",[34,48474,48475],{"class":40},", variance)\n",[24,48477,48479],{"className":31029,"code":48478,"language":31031,"meta":29,"style":29},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[31,48480,48481,48487,48493,48503,48509,48519,48533,48543,48553,48563,48567,48577,48587,48591,48595,48603,48608,48613,48632,48636,48641,48646,48651,48656,48697,48702,48712,48717,48730,48735,48740,48745,48750,48755,48759,48764,48769,48791,48795,48827,48841,48851,48861,48865,48875,48889,48899,48909,48919,48925,48929,48933,48937,48941,48945,48953,48973,48977,48981,48985,48989,49005,49009,49013,49021,49025,49029,49037,49041,49045,49049,49057,49061,49065,49069,49077,49081,49089,49093,49101,49105,49113,49117,49125,49129,49133,49141,49145,49149,49161,49185,49199,49203,49207,49211,49219,49223,49231,49235,49243,49247,49255,49259,49267,49271,49279,49283,49295,49299,49307,49311,49319,49323,49327,49331,49335,49343,49347,49363,49367,49375,49379,49383,49387,49391,49395,49399,49403,49419,49423,49435,49439,49451,49455,49467,49471,49479,49483,49491,49495,49499,49503,49509,49513,49521,49525,49541,49545,49553,49557,49573,49585,49589,49601,49605,49609,49617,49621,49625,49633,49637,49645,49649,49657,49661,49665,49707,49749,49753,49757,49773,49777,49793,49797,49801,49809,49813,49817,49829,49867,49871,49875,49883,49887,49901,49911,49917,49923,49929,49935,49939,49943,49949,49953,49957,49965,49969,49987,49991,49995,49999,50015,50019,50023,50027,50031,50035,50055,50075,50079,50083,50087,50095,50103,50107,50123,50143,50163,50167,50172,50181,50190,50195,50200,50205,50218,50223,50232,50241,50258],{"__ignoreMap":29},[34,48482,48483,48485],{"class":36,"line":37},[34,48484,31043],{"class":87},[34,48486,32473],{"class":40},[34,48488,48489,48491],{"class":36,"line":51},[34,48490,31043],{"class":87},[34,48492,32480],{"class":40},[34,48494,48495,48497,48499,48501],{"class":36,"line":60},[34,48496,31043],{"class":87},[34,48498,32491],{"class":40},[34,48500,32034],{"class":87},[34,48502,32496],{"class":40},[34,48504,48505,48507],{"class":36,"line":76},[34,48506,31043],{"class":87},[34,48508,31046],{"class":40},[34,48510,48511,48513,48515,48517],{"class":36,"line":93},[34,48512,31388],{"class":87},[34,48514,32066],{"class":40},[34,48516,31043],{"class":87},[34,48518,32513],{"class":40},[34,48520,48521,48523,48525,48527,48530],{"class":36,"line":99},[34,48522,31388],{"class":87},[34,48524,32019],{"class":40},[34,48526,31043],{"class":87},[34,48528,48529],{"class":40}," ImageFolder ",[34,48531,48532],{"class":205},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[34,48534,48535,48537,48539,48541],{"class":36,"line":353},[34,48536,31388],{"class":87},[34,48538,32049],{"class":40},[34,48540,31043],{"class":87},[34,48542,32054],{"class":40},[34,48544,48545,48547,48549,48551],{"class":36,"line":359},[34,48546,31043],{"class":87},[34,48548,32066],{"class":40},[34,48550,32034],{"class":87},[34,48552,32071],{"class":40},[34,48554,48555,48557,48559,48561],{"class":36,"line":579},[34,48556,31043],{"class":87},[34,48558,32083],{"class":40},[34,48560,32034],{"class":87},[34,48562,32088],{"class":40},[34,48564,48565],{"class":36,"line":589},[34,48566,32558],{"class":205},[34,48568,48569,48571,48573,48575],{"class":36,"line":601},[34,48570,31388],{"class":87},[34,48572,32565],{"class":40},[34,48574,31043],{"class":87},[34,48576,43682],{"class":40},[34,48578,48579,48581,48583,48585],{"class":36,"line":613},[34,48580,31388],{"class":87},[34,48582,31391],{"class":40},[34,48584,31043],{"class":87},[34,48586,31396],{"class":40},[34,48588,48589],{"class":36,"line":618},[34,48590,3053],{"emptyLinePlaceholder":726},[34,48592,48593],{"class":36,"line":628},[34,48594,32593],{"class":205},[34,48596,48597,48599,48601],{"class":36,"line":640},[34,48598,32598],{"class":87},[34,48600,32601],{"class":149},[34,48602,32604],{"class":40},[34,48604,48605],{"class":36,"line":2301},[34,48606,48607],{"class":205},"    # 导入自己的数据集，并进行数据处理\n",[34,48609,48610],{"class":36,"line":2307},[34,48611,48612],{"class":205},"    # 定义数据集的路径\n",[34,48614,48615,48618,48620,48622,48624,48626,48630],{"class":36,"line":2328},[34,48616,48617],{"class":63},"    ROOT_PATH",[34,48619,153],{"class":87},[34,48621,1465],{"class":87},[34,48623,1046],{"class":156},[34,48625,1353],{"class":63},[34,48627,48629],{"class":48628},"sA_wV","\u002Fdata\u002Ftrain",[34,48631,25786],{"class":156},[34,48633,48634],{"class":36,"line":2333},[34,48635,3053],{"emptyLinePlaceholder":726},[34,48637,48638],{"class":36,"line":2347},[34,48639,48640],{"class":205},"    # 定义归一化方法\n",[34,48642,48643],{"class":36,"line":2352},[34,48644,48645],{"class":205},"    # 这里需要先计算一下数据集的均值和方差\n",[34,48647,48648],{"class":36,"line":2381},[34,48649,48650],{"class":205},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[34,48652,48653],{"class":36,"line":2386},[34,48654,48655],{"class":205},"    # 第一个参数是均值，第二个参数是方差\n",[34,48657,48658,48661,48663,48666,48669,48671,48674,48676,48679,48682,48685,48687,48690,48692,48695],{"class":36,"line":2403},[34,48659,48660],{"class":40},"    normalize",[34,48662,153],{"class":87},[34,48664,48665],{"class":40},"transforms.Normalize([",[34,48667,48668],{"class":63},"0.162",[34,48670,1173],{"class":40},[34,48672,48673],{"class":63},"0.151",[34,48675,1173],{"class":40},[34,48677,48678],{"class":63},"0.138",[34,48680,48681],{"class":40},"],[",[34,48683,48684],{"class":63},"0.058",[34,48686,1173],{"class":40},[34,48688,48689],{"class":63},"0.052",[34,48691,1173],{"class":40},[34,48693,48694],{"class":63},"0.048",[34,48696,5310],{"class":40},[34,48698,48699],{"class":36,"line":2408},[34,48700,48701],{"class":205},"    # 定义数据集处理方法变量\n",[34,48703,48704,48707,48709],{"class":36,"line":2413},[34,48705,48706],{"class":40},"    train_transform",[34,48708,153],{"class":87},[34,48710,48711],{"class":40},"transforms.Compose([\n",[34,48713,48714],{"class":36,"line":2418},[34,48715,48716],{"class":205},"        # 调整图像大小为224*224\n",[34,48718,48719,48722,48724,48726,48728],{"class":36,"line":2432},[34,48720,48721],{"class":40},"        transforms.Resize((",[34,48723,32152],{"class":63},[34,48725,1173],{"class":40},[34,48727,32152],{"class":63},[34,48729,43273],{"class":40},[34,48731,48732],{"class":36,"line":2437},[34,48733,48734],{"class":205},"        # 将图像转换为张量\n",[34,48736,48737],{"class":36,"line":3230},[34,48738,48739],{"class":40},"        transforms.ToTensor(),\n",[34,48741,48742],{"class":36,"line":3244},[34,48743,48744],{"class":40},"        normalize])\n",[34,48746,48747],{"class":36,"line":3252},[34,48748,48749],{"class":205},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[34,48751,48752],{"class":36,"line":3257},[34,48753,48754],{"class":205},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[34,48756,48757],{"class":36,"line":3263},[34,48758,3053],{"emptyLinePlaceholder":726},[34,48760,48761],{"class":36,"line":3269},[34,48762,48763],{"class":205},"    # 加载数据集\n",[34,48765,48766],{"class":36,"line":3274},[34,48767,48768],{"class":205},"    # 传入数据集路径与处理方法\n",[34,48770,48771,48773,48775,48778,48781,48783,48786,48788],{"class":36,"line":8601},[34,48772,32609],{"class":40},[34,48774,153],{"class":87},[34,48776,48777],{"class":40},"ImageFolder(",[34,48779,48780],{"class":63},"ROOT_PATH",[34,48782,1173],{"class":40},[34,48784,48785],{"class":5869},"transform",[34,48787,153],{"class":87},[34,48789,48790],{"class":40},"train_transform)\n",[34,48792,48793],{"class":36,"line":8625},[34,48794,3053],{"emptyLinePlaceholder":726},[34,48796,48797,48799,48801,48803,48805,48807,48809,48811,48813,48815,48817,48819,48821,48823,48825],{"class":36,"line":8630},[34,48798,32661],{"class":40},[34,48800,153],{"class":87},[34,48802,32666],{"class":40},[34,48804,32669],{"class":63},[34,48806,801],{"class":40},[34,48808,32674],{"class":63},[34,48810,1250],{"class":87},[34,48812,8011],{"class":63},[34,48814,32681],{"class":40},[34,48816,32669],{"class":63},[34,48818,801],{"class":40},[34,48820,32688],{"class":63},[34,48822,1250],{"class":87},[34,48824,8011],{"class":63},[34,48826,32695],{"class":40},[34,48828,48829,48831,48833,48835,48837,48839],{"class":36,"line":8636},[34,48830,32700],{"class":40},[34,48832,153],{"class":87},[34,48834,32705],{"class":40},[34,48836,32188],{"class":5869},[34,48838,153],{"class":87},[34,48840,32193],{"class":40},[34,48842,48843,48845,48847,48849],{"class":36,"line":8663},[34,48844,32716],{"class":5869},[34,48846,153],{"class":87},[34,48848,993],{"class":63},[34,48850,32117],{"class":40},[34,48852,48853,48855,48857,48859],{"class":36,"line":8668},[34,48854,32728],{"class":5869},[34,48856,153],{"class":87},[34,48858,32127],{"class":63},[34,48860,32117],{"class":40},[34,48862,48863],{"class":36,"line":8674},[34,48864,32739],{"class":205},[34,48866,48867,48869,48871,48873],{"class":36,"line":8686},[34,48868,32744],{"class":5869},[34,48870,153],{"class":87},[34,48872,1190],{"class":63},[34,48874,807],{"class":40},[34,48876,48877,48879,48881,48883,48885,48887],{"class":36,"line":8698},[34,48878,32755],{"class":40},[34,48880,153],{"class":87},[34,48882,32185],{"class":40},[34,48884,32188],{"class":5869},[34,48886,153],{"class":87},[34,48888,32766],{"class":40},[34,48890,48891,48893,48895,48897],{"class":36,"line":8710},[34,48892,32771],{"class":5869},[34,48894,153],{"class":87},[34,48896,993],{"class":63},[34,48898,32117],{"class":40},[34,48900,48901,48903,48905,48907],{"class":36,"line":10369},[34,48902,32782],{"class":5869},[34,48904,153],{"class":87},[34,48906,32127],{"class":63},[34,48908,32117],{"class":40},[34,48910,48911,48913,48915,48917],{"class":36,"line":10394},[34,48912,32793],{"class":5869},[34,48914,153],{"class":87},[34,48916,1190],{"class":63},[34,48918,807],{"class":40},[34,48920,48921,48923],{"class":36,"line":10417},[34,48922,4743],{"class":87},[34,48924,32806],{"class":40},[34,48926,48927],{"class":36,"line":10441},[34,48928,3053],{"emptyLinePlaceholder":726},[34,48930,48931],{"class":36,"line":10446},[34,48932,32815],{"class":205},[34,48934,48935],{"class":36,"line":10451},[34,48936,32820],{"class":205},[34,48938,48939],{"class":36,"line":10456},[34,48940,3053],{"emptyLinePlaceholder":726},[34,48942,48943],{"class":36,"line":10465},[34,48944,32829],{"class":205},[34,48946,48947,48949,48951],{"class":36,"line":10470},[34,48948,32598],{"class":87},[34,48950,32836],{"class":149},[34,48952,32839],{"class":40},[34,48954,48955,48957,48959,48961,48963,48965,48967,48969,48971],{"class":36,"line":10476},[34,48956,31888],{"class":40},[34,48958,153],{"class":87},[34,48960,31102],{"class":40},[34,48962,31895],{"class":156},[34,48964,2358],{"class":87},[34,48966,31900],{"class":40},[34,48968,2355],{"class":87},[34,48970,32858],{"class":156},[34,48972,807],{"class":40},[34,48974,48975],{"class":36,"line":10497},[34,48976,3053],{"emptyLinePlaceholder":726},[34,48978,48979],{"class":36,"line":10503},[34,48980,32873],{"class":205},[34,48982,48983],{"class":36,"line":10517},[34,48984,32878],{"class":205},[34,48986,48987],{"class":36,"line":10523},[34,48988,32883],{"class":205},[34,48990,48991,48993,48995,48997,48999,49001,49003],{"class":36,"line":10550},[34,48992,32888],{"class":40},[34,48994,153],{"class":87},[34,48996,32893],{"class":40},[34,48998,32896],{"class":5869},[34,49000,153],{"class":87},[34,49002,32901],{"class":63},[34,49004,807],{"class":40},[34,49006,49007],{"class":36,"line":10559},[34,49008,3053],{"emptyLinePlaceholder":726},[34,49010,49011],{"class":36,"line":10565},[34,49012,32912],{"class":205},[34,49014,49015,49017,49019],{"class":36,"line":10573},[34,49016,32917],{"class":40},[34,49018,153],{"class":87},[34,49020,32922],{"class":40},[34,49022,49023],{"class":36,"line":10578},[34,49024,3053],{"emptyLinePlaceholder":726},[34,49026,49027],{"class":36,"line":17256},[34,49028,32931],{"class":205},[34,49030,49031,49033,49035],{"class":36,"line":17262},[34,49032,31940],{"class":40},[34,49034,153],{"class":87},[34,49036,32940],{"class":40},[34,49038,49039],{"class":36,"line":17285},[34,49040,32945],{"class":205},[34,49042,49043],{"class":36,"line":17291},[34,49044,32950],{"class":205},[34,49046,49047],{"class":36,"line":17314},[34,49048,32955],{"class":205},[34,49050,49051,49053,49055],{"class":36,"line":17328},[34,49052,32960],{"class":40},[34,49054,153],{"class":87},[34,49056,32965],{"class":40},[34,49058,49059],{"class":36,"line":17348},[34,49060,3053],{"emptyLinePlaceholder":726},[34,49062,49063],{"class":36,"line":17354},[34,49064,32978],{"class":205},[34,49066,49067],{"class":36,"line":17365},[34,49068,32983],{"class":205},[34,49070,49071,49073,49075],{"class":36,"line":17388},[34,49072,32988],{"class":40},[34,49074,153],{"class":87},[34,49076,32993],{"class":63},[34,49078,49079],{"class":36,"line":17410},[34,49080,32998],{"class":205},[34,49082,49083,49085,49087],{"class":36,"line":17415},[34,49084,33003],{"class":40},[34,49086,153],{"class":87},[34,49088,33008],{"class":40},[34,49090,49091],{"class":36,"line":17421},[34,49092,33013],{"class":205},[34,49094,49095,49097,49099],{"class":36,"line":17435},[34,49096,33018],{"class":40},[34,49098,153],{"class":87},[34,49100,33008],{"class":40},[34,49102,49103],{"class":36,"line":17448},[34,49104,33027],{"class":205},[34,49106,49107,49109,49111],{"class":36,"line":17453},[34,49108,33032],{"class":40},[34,49110,153],{"class":87},[34,49112,33008],{"class":40},[34,49114,49115],{"class":36,"line":17467},[34,49116,33041],{"class":205},[34,49118,49119,49121,49123],{"class":36,"line":17472},[34,49120,33046],{"class":40},[34,49122,153],{"class":87},[34,49124,33008],{"class":40},[34,49126,49127],{"class":36,"line":17478},[34,49128,3053],{"emptyLinePlaceholder":726},[34,49130,49131],{"class":36,"line":17483},[34,49132,33059],{"class":205},[34,49134,49135,49137,49139],{"class":36,"line":17497},[34,49136,33064],{"class":40},[34,49138,153],{"class":87},[34,49140,33069],{"class":40},[34,49142,49143],{"class":36,"line":17502},[34,49144,3053],{"emptyLinePlaceholder":726},[34,49146,49147],{"class":36,"line":17507},[34,49148,33082],{"class":205},[34,49150,49151,49153,49155,49157,49159],{"class":36,"line":17521},[34,49152,3854],{"class":87},[34,49154,33089],{"class":40},[34,49156,26695],{"class":87},[34,49158,33094],{"class":63},[34,49160,33097],{"class":40},[34,49162,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183],{"class":36,"line":17533},[34,49164,33102],{"class":63},[34,49166,801],{"class":40},[34,49168,33107],{"class":156},[34,49170,33110],{"class":63},[34,49172,1379],{"class":156},[34,49174,33110],{"class":63},[34,49176,1046],{"class":156},[34,49178,33119],{"class":40},[34,49180,1327],{"class":87},[34,49182,1013],{"class":63},[34,49184,31148],{"class":40},[34,49186,49187,49189,49191,49193,49195,49197],{"class":36,"line":17538},[34,49188,33102],{"class":63},[34,49190,801],{"class":40},[34,49192,33134],{"class":156},[34,49194,1250],{"class":87},[34,49196,1241],{"class":63},[34,49198,807],{"class":40},[34,49200,49201],{"class":36,"line":17551},[34,49202,3053],{"emptyLinePlaceholder":726},[34,49204,49205],{"class":36,"line":17556},[34,49206,33149],{"class":205},[34,49208,49209],{"class":36,"line":17561},[34,49210,33154],{"class":205},[34,49212,49213,49215,49217],{"class":36,"line":17566},[34,49214,33159],{"class":40},[34,49216,153],{"class":87},[34,49218,32993],{"class":63},[34,49220,49221],{"class":36,"line":17579},[34,49222,33168],{"class":205},[34,49224,49225,49227,49229],{"class":36,"line":17584},[34,49226,33173],{"class":40},[34,49228,153],{"class":87},[34,49230,3738],{"class":63},[34,49232,49233],{"class":36,"line":33284},[34,49234,33182],{"class":205},[34,49236,49237,49239,49241],{"class":36,"line":33290},[34,49238,33187],{"class":40},[34,49240,153],{"class":87},[34,49242,32993],{"class":63},[34,49244,49245],{"class":36,"line":33296},[34,49246,33196],{"class":205},[34,49248,49249,49251,49253],{"class":36,"line":33302},[34,49250,33201],{"class":40},[34,49252,153],{"class":87},[34,49254,3738],{"class":63},[34,49256,49257],{"class":36,"line":33308},[34,49258,33210],{"class":205},[34,49260,49261,49263,49265],{"class":36,"line":33319},[34,49262,33215],{"class":40},[34,49264,153],{"class":87},[34,49266,3738],{"class":63},[34,49268,49269],{"class":36,"line":33325},[34,49270,33224],{"class":205},[34,49272,49273,49275,49277],{"class":36,"line":33345},[34,49274,33229],{"class":40},[34,49276,153],{"class":87},[34,49278,3738],{"class":63},[34,49280,49281],{"class":36,"line":33351},[34,49282,33238],{"class":205},[34,49284,49285,49287,49289,49291,49293],{"class":36,"line":33362},[34,49286,4056],{"class":87},[34,49288,32252],{"class":40},[34,49290,26695],{"class":87},[34,49292,32257],{"class":63},[34,49294,33251],{"class":40},[34,49296,49297],{"class":36,"line":33368},[34,49298,33256],{"class":205},[34,49300,49301,49303,49305],{"class":36,"line":33374},[34,49302,33261],{"class":40},[34,49304,153],{"class":87},[34,49306,33266],{"class":40},[34,49308,49309],{"class":36,"line":33380},[34,49310,33271],{"class":205},[34,49312,49313,49315,49317],{"class":36,"line":33386},[34,49314,33276],{"class":40},[34,49316,153],{"class":87},[34,49318,33281],{"class":40},[34,49320,49321],{"class":36,"line":33392},[34,49322,33287],{"class":205},[34,49324,49325],{"class":36,"line":33398},[34,49326,33293],{"class":40},[34,49328,49329],{"class":36,"line":33404},[34,49330,33299],{"class":205},[34,49332,49333],{"class":36,"line":33424},[34,49334,33305],{"class":205},[34,49336,49337,49339,49341],{"class":36,"line":33430},[34,49338,33311],{"class":40},[34,49340,153],{"class":87},[34,49342,33316],{"class":40},[34,49344,49345],{"class":36,"line":33446},[34,49346,33322],{"class":205},[34,49348,49349,49351,49353,49355,49357,49359,49361],{"class":36,"line":33452},[34,49350,33328],{"class":40},[34,49352,153],{"class":87},[34,49354,33333],{"class":40},[34,49356,33336],{"class":5869},[34,49358,153],{"class":87},[34,49360,1013],{"class":63},[34,49362,807],{"class":40},[34,49364,49365],{"class":36,"line":33466},[34,49366,33348],{"class":205},[34,49368,49369,49371,49373],{"class":36,"line":33472},[34,49370,33354],{"class":40},[34,49372,153],{"class":87},[34,49374,33359],{"class":40},[34,49376,49377],{"class":36,"line":33487},[34,49378,33365],{"class":205},[34,49380,49381],{"class":36,"line":33493},[34,49382,33371],{"class":40},[34,49384,49385],{"class":36,"line":33502},[34,49386,33377],{"class":205},[34,49388,49389],{"class":36,"line":33508},[34,49390,33383],{"class":40},[34,49392,49393],{"class":36,"line":33517},[34,49394,33389],{"class":205},[34,49396,49397],{"class":36,"line":33523},[34,49398,33395],{"class":40},[34,49400,49401],{"class":36,"line":33529},[34,49402,33401],{"class":205},[34,49404,49405,49407,49409,49411,49413,49415,49417],{"class":36,"line":33538},[34,49406,33407],{"class":40},[34,49408,10130],{"class":87},[34,49410,33412],{"class":40},[34,49412,1250],{"class":87},[34,49414,33417],{"class":40},[34,49416,987],{"class":63},[34,49418,807],{"class":40},[34,49420,49421],{"class":36,"line":33544},[34,49422,33427],{"class":205},[34,49424,49425,49427,49429,49431,49433],{"class":36,"line":33555},[34,49426,33433],{"class":40},[34,49428,10130],{"class":87},[34,49430,33438],{"class":40},[34,49432,3602],{"class":87},[34,49434,33443],{"class":40},[34,49436,49437],{"class":36,"line":33561},[34,49438,33449],{"class":205},[34,49440,49441,49443,49445,49447,49449],{"class":36,"line":33580},[34,49442,33455],{"class":40},[34,49444,10130],{"class":87},[34,49446,33417],{"class":40},[34,49448,987],{"class":63},[34,49450,807],{"class":40},[34,49452,49453],{"class":36,"line":33586},[34,49454,33469],{"class":205},[34,49456,49457,49459,49461,49463,49465],{"class":36,"line":33597},[34,49458,4056],{"class":87},[34,49460,33477],{"class":40},[34,49462,26695],{"class":87},[34,49464,32257],{"class":63},[34,49466,33484],{"class":40},[34,49468,49469],{"class":36,"line":33603},[34,49470,33490],{"class":205},[34,49472,49473,49475,49477],{"class":36,"line":33623},[34,49474,33261],{"class":40},[34,49476,153],{"class":87},[34,49478,33266],{"class":40},[34,49480,49481],{"class":36,"line":33639},[34,49482,33505],{"class":205},[34,49484,49485,49487,49489],{"class":36,"line":33645},[34,49486,33276],{"class":40},[34,49488,153],{"class":87},[34,49490,33281],{"class":40},[34,49492,49493],{"class":36,"line":33659},[34,49494,33520],{"class":205},[34,49496,49497],{"class":36,"line":33665},[34,49498,33526],{"class":40},[34,49500,49501],{"class":36,"line":33671},[34,49502,37007],{"class":205},[34,49504,49505,49507],{"class":36,"line":33682},[34,49506,33532],{"class":87},[34,49508,33535],{"class":40},[34,49510,49511],{"class":36,"line":33688},[34,49512,33541],{"class":205},[34,49514,49515,49517,49519],{"class":36,"line":33694},[34,49516,37022],{"class":40},[34,49518,153],{"class":87},[34,49520,33316],{"class":40},[34,49522,49523],{"class":36,"line":33704},[34,49524,33558],{"class":205},[34,49526,49527,49529,49531,49533,49535,49537,49539],{"class":36,"line":33710},[34,49528,37035],{"class":40},[34,49530,153],{"class":87},[34,49532,33333],{"class":40},[34,49534,33336],{"class":5869},[34,49536,153],{"class":87},[34,49538,1013],{"class":63},[34,49540,807],{"class":40},[34,49542,49543],{"class":36,"line":33721},[34,49544,33583],{"class":205},[34,49546,49547,49549,49551],{"class":36,"line":33727},[34,49548,37056],{"class":40},[34,49550,153],{"class":87},[34,49552,33359],{"class":40},[34,49554,49555],{"class":36,"line":33737},[34,49556,33600],{"class":205},[34,49558,49559,49561,49563,49565,49567,49569,49571],{"class":36,"line":33742},[34,49560,37069],{"class":40},[34,49562,10130],{"class":87},[34,49564,37074],{"class":40},[34,49566,1250],{"class":87},[34,49568,33417],{"class":40},[34,49570,987],{"class":63},[34,49572,807],{"class":40},[34,49574,49575,49577,49579,49581,49583],{"class":36,"line":33748},[34,49576,37087],{"class":40},[34,49578,10130],{"class":87},[34,49580,33438],{"class":40},[34,49582,3602],{"class":87},[34,49584,33443],{"class":40},[34,49586,49587],{"class":36,"line":33797},[34,49588,37100],{"class":205},[34,49590,49591,49593,49595,49597,49599],{"class":36,"line":33844},[34,49592,37105],{"class":40},[34,49594,10130],{"class":87},[34,49596,33417],{"class":40},[34,49598,987],{"class":63},[34,49600,807],{"class":40},[34,49602,49603],{"class":36,"line":33849},[34,49604,33662],{"class":205},[34,49606,49607],{"class":36,"line":33855},[34,49608,33668],{"class":205},[34,49610,49611,49613,49615],{"class":36,"line":33874},[34,49612,33674],{"class":40},[34,49614,1379],{"class":87},[34,49616,33679],{"class":40},[34,49618,49619],{"class":36,"line":33880},[34,49620,33685],{"class":205},[34,49622,49623],{"class":36,"line":33900},[34,49624,33691],{"class":205},[34,49626,49627,49629,49631],{"class":36,"line":33906},[34,49628,33697],{"class":40},[34,49630,1379],{"class":87},[34,49632,33679],{"class":40},[34,49634,49635],{"class":36,"line":33912},[34,49636,33707],{"class":205},[34,49638,49639,49641,49643],{"class":36,"line":33922},[34,49640,33713],{"class":40},[34,49642,1379],{"class":87},[34,49644,33718],{"class":40},[34,49646,49647],{"class":36,"line":33927},[34,49648,33724],{"class":205},[34,49650,49651,49653,49655],{"class":36,"line":33933},[34,49652,33730],{"class":40},[34,49654,1379],{"class":87},[34,49656,33718],{"class":40},[34,49658,49659],{"class":36,"line":33949},[34,49660,3053],{"emptyLinePlaceholder":726},[34,49662,49663],{"class":36,"line":33994},[34,49664,33745],{"class":205},[34,49666,49667,49669,49671,49673,49675,49677,49679,49681,49683,49685,49687,49689,49691,49693,49695,49697,49699,49701,49703,49705],{"class":36,"line":34000},[34,49668,33102],{"class":63},[34,49670,801],{"class":40},[34,49672,4245],{"class":156},[34,49674,33110],{"class":63},[34,49676,33759],{"class":156},[34,49678,1690],{"class":63},[34,49680,33764],{"class":87},[34,49682,1739],{"class":63},[34,49684,33769],{"class":156},[34,49686,1690],{"class":63},[34,49688,33764],{"class":87},[34,49690,1739],{"class":63},[34,49692,4245],{"class":156},[34,49694,33780],{"class":40},[34,49696,1327],{"class":87},[34,49698,1013],{"class":63},[34,49700,33787],{"class":40},[34,49702,1327],{"class":87},[34,49704,1013],{"class":63},[34,49706,33794],{"class":40},[34,49708,49709,49711,49713,49715,49717,49719,49721,49723,49725,49727,49729,49731,49733,49735,49737,49739,49741,49743,49745,49747],{"class":36,"line":34006},[34,49710,33102],{"class":63},[34,49712,801],{"class":40},[34,49714,4245],{"class":156},[34,49716,33110],{"class":63},[34,49718,33808],{"class":156},[34,49720,1690],{"class":63},[34,49722,33764],{"class":87},[34,49724,1739],{"class":63},[34,49726,33817],{"class":156},[34,49728,1690],{"class":63},[34,49730,33764],{"class":87},[34,49732,1739],{"class":63},[34,49734,4245],{"class":156},[34,49736,33828],{"class":40},[34,49738,1327],{"class":87},[34,49740,1013],{"class":63},[34,49742,33835],{"class":40},[34,49744,1327],{"class":87},[34,49746,1013],{"class":63},[34,49748,33794],{"class":40},[34,49750,49751],{"class":36,"line":34012},[34,49752,3053],{"emptyLinePlaceholder":726},[34,49754,49755],{"class":36,"line":34023},[34,49756,33852],{"class":205},[34,49758,49759,49761,49763,49765,49767,49769,49771],{"class":36,"line":34029},[34,49760,3150],{"class":87},[34,49762,33860],{"class":40},[34,49764,1327],{"class":87},[34,49766,1013],{"class":63},[34,49768,1733],{"class":40},[34,49770,1753],{"class":87},[34,49772,33871],{"class":40},[34,49774,49775],{"class":36,"line":34035},[34,49776,33877],{"class":205},[34,49778,49779,49781,49783,49785,49787,49789,49791],{"class":36,"line":34041},[34,49780,33883],{"class":40},[34,49782,840],{"class":63},[34,49784,153],{"class":87},[34,49786,33890],{"class":40},[34,49788,1327],{"class":87},[34,49790,1013],{"class":63},[34,49792,33897],{"class":40},[34,49794,49795],{"class":36,"line":34059},[34,49796,33903],{"class":205},[34,49798,49799],{"class":36,"line":34073},[34,49800,33909],{"class":205},[34,49802,49803,49805,49807],{"class":36,"line":34082},[34,49804,33915],{"class":40},[34,49806,153],{"class":87},[34,49808,32965],{"class":40},[34,49810,49811],{"class":36,"line":34091},[34,49812,3053],{"emptyLinePlaceholder":726},[34,49814,49815],{"class":36,"line":34100},[34,49816,33930],{"class":205},[34,49818,49819,49821,49823,49825,49827],{"class":36,"line":34109},[34,49820,33936],{"class":40},[34,49822,153],{"class":87},[34,49824,33941],{"class":40},[34,49826,1327],{"class":87},[34,49828,33946],{"class":40},[34,49830,49831,49833,49835,49837,49839,49841,49843,49845,49847,49849,49851,49853,49855,49857,49859,49861,49863,49865],{"class":36,"line":34115},[34,49832,33102],{"class":63},[34,49834,801],{"class":40},[34,49836,33956],{"class":156},[34,49838,1690],{"class":63},[34,49840,33961],{"class":87},[34,49842,1739],{"class":63},[34,49844,1339],{"class":156},[34,49846,1690],{"class":63},[34,49848,33961],{"class":87},[34,49850,1739],{"class":63},[34,49852,33974],{"class":156},[34,49854,33977],{"class":40},[34,49856,33980],{"class":87},[34,49858,1701],{"class":63},[34,49860,33985],{"class":40},[34,49862,1123],{"class":87},[34,49864,1701],{"class":63},[34,49866,31148],{"class":40},[34,49868,49869],{"class":36,"line":34121},[34,49870,37384],{"class":205},[34,49872,49873],{"class":36,"line":34129},[34,49874,37389],{"class":205},[34,49876,49877,49879,49881],{"class":36,"line":34134},[34,49878,37394],{"class":40},[34,49880,34018],{"class":156},[34,49882,807],{"class":40},[34,49884,49885],{"class":36,"line":34140},[34,49886,34038],{"class":205},[34,49888,49889,49891,49893,49895,49897,49899],{"class":36,"line":34151},[34,49890,34044],{"class":40},[34,49892,153],{"class":87},[34,49894,34049],{"class":40},[34,49896,34052],{"class":5869},[34,49898,153],{"class":87},[34,49900,2206],{"class":40},[34,49902,49903,49905,49907,49909],{"class":36,"line":34157},[34,49904,34062],{"class":156},[34,49906,1653],{"class":40},[34,49908,34067],{"class":63},[34,49910,34070],{"class":40},[34,49912,49913,49915],{"class":36,"line":34177},[34,49914,34076],{"class":156},[34,49916,34079],{"class":40},[34,49918,49919,49921],{"class":36,"line":34183},[34,49920,34085],{"class":156},[34,49922,34088],{"class":40},[34,49924,49925,49927],{"class":36,"line":34189},[34,49926,34094],{"class":156},[34,49928,34097],{"class":40},[34,49930,49931,49933],{"class":36,"line":34195},[34,49932,34103],{"class":156},[34,49934,34106],{"class":40},[34,49936,49937],{"class":36,"line":34212},[34,49938,34112],{"class":40},[34,49940,49941],{"class":36,"line":34218},[34,49942,34118],{"class":205},[34,49944,49945,49947],{"class":36,"line":34224},[34,49946,4743],{"class":87},[34,49948,34126],{"class":40},[34,49950,49951],{"class":36,"line":34230},[34,49952,3053],{"emptyLinePlaceholder":726},[34,49954,49955],{"class":36,"line":34236},[34,49956,34137],{"class":205},[34,49958,49959,49961,49963],{"class":36,"line":34242},[34,49960,32598],{"class":87},[34,49962,34145],{"class":149},[34,49964,34148],{"class":40},[34,49966,49967],{"class":36,"line":34269},[34,49968,34154],{"class":205},[34,49970,49971,49973,49975,49977,49979,49981,49983,49985],{"class":36,"line":34293},[34,49972,34160],{"class":40},[34,49974,32344],{"class":5869},[34,49976,153],{"class":87},[34,49978,801],{"class":40},[34,49980,1293],{"class":63},[34,49982,1173],{"class":40},[34,49984,1088],{"class":63},[34,49986,31148],{"class":40},[34,49988,49989],{"class":36,"line":34299},[34,49990,34180],{"class":205},[34,49992,49993],{"class":36,"line":34305},[34,49994,34186],{"class":205},[34,49996,49997],{"class":36,"line":34311},[34,49998,34192],{"class":205},[34,50000,50001,50003,50005,50007,50009,50011,50013],{"class":36,"line":34322},[34,50002,32378],{"class":40},[34,50004,1013],{"class":63},[34,50006,1173],{"class":40},[34,50008,875],{"class":63},[34,50010,1173],{"class":40},[34,50012,1013],{"class":63},[34,50014,807],{"class":40},[34,50016,50017],{"class":36,"line":34333},[34,50018,34215],{"class":205},[34,50020,50021],{"class":36,"line":34339},[34,50022,34221],{"class":205},[34,50024,50025],{"class":36,"line":34356},[34,50026,34227],{"class":205},[34,50028,50029],{"class":36,"line":34379},[34,50030,34233],{"class":205},[34,50032,50033],{"class":36,"line":34402},[34,50034,34239],{"class":205},[34,50036,50037,50039,50041,50043,50045,50047,50049,50051,50053],{"class":36,"line":34408},[34,50038,34245],{"class":40},[34,50040,34248],{"class":156},[34,50042,34251],{"class":40},[34,50044,34254],{"class":156},[34,50046,1173],{"class":40},[34,50048,34259],{"class":5869},[34,50050,153],{"class":87},[34,50052,34264],{"class":156},[34,50054,807],{"class":40},[34,50056,50057,50059,50061,50063,50065,50067,50069,50071,50073],{"class":36,"line":34413},[34,50058,34245],{"class":40},[34,50060,34248],{"class":156},[34,50062,34276],{"class":40},[34,50064,34279],{"class":156},[34,50066,1173],{"class":40},[34,50068,34259],{"class":5869},[34,50070,153],{"class":87},[34,50072,34288],{"class":156},[34,50074,807],{"class":40},[34,50076,50077],{"class":36,"line":34422},[34,50078,34296],{"class":205},[34,50080,50081],{"class":36,"line":34432},[34,50082,34302],{"class":40},[34,50084,50085],{"class":36,"line":34438},[34,50086,34308],{"class":205},[34,50088,50089,50091,50093],{"class":36,"line":34443},[34,50090,34314],{"class":40},[34,50092,34317],{"class":156},[34,50094,807],{"class":40},[34,50096,50097,50099,50101],{"class":36,"line":34449},[34,50098,34325],{"class":40},[34,50100,34328],{"class":156},[34,50102,807],{"class":40},[34,50104,50105],{"class":36,"line":34462},[34,50106,34336],{"class":205},[34,50108,50109,50111,50113,50115,50117,50119,50121],{"class":36,"line":34468},[34,50110,32378],{"class":40},[34,50112,1013],{"class":63},[34,50114,1173],{"class":40},[34,50116,875],{"class":63},[34,50118,1173],{"class":40},[34,50120,875],{"class":63},[34,50122,807],{"class":40},[34,50124,50125,50127,50129,50131,50133,50135,50137,50139,50141],{"class":36,"line":34479},[34,50126,34245],{"class":40},[34,50128,34248],{"class":156},[34,50130,34363],{"class":40},[34,50132,34254],{"class":156},[34,50134,1173],{"class":40},[34,50136,34259],{"class":5869},[34,50138,153],{"class":87},[34,50140,34374],{"class":156},[34,50142,807],{"class":40},[34,50144,50145,50147,50149,50151,50153,50155,50157,50159,50161],{"class":36,"line":34490},[34,50146,34245],{"class":40},[34,50148,34248],{"class":156},[34,50150,34386],{"class":40},[34,50152,34279],{"class":156},[34,50154,1173],{"class":40},[34,50156,34259],{"class":5869},[34,50158,153],{"class":87},[34,50160,34397],{"class":156},[34,50162,807],{"class":40},[34,50164,50165],{"class":36,"line":34509},[34,50166,34405],{"class":205},[34,50168,50170],{"class":36,"line":50169},219,[34,50171,34302],{"class":40},[34,50173,50175,50177,50179],{"class":36,"line":50174},220,[34,50176,34314],{"class":40},[34,50178,34248],{"class":156},[34,50180,807],{"class":40},[34,50182,50184,50186,50188],{"class":36,"line":50183},221,[34,50185,34325],{"class":40},[34,50187,34427],{"class":156},[34,50189,807],{"class":40},[34,50191,50193],{"class":36,"line":50192},222,[34,50194,34435],{"class":40},[34,50196,50198],{"class":36,"line":50197},223,[34,50199,3053],{"emptyLinePlaceholder":726},[34,50201,50203],{"class":36,"line":50202},224,[34,50204,34446],{"class":205},[34,50206,50208,50210,50212,50214,50216],{"class":36,"line":50207},225,[34,50209,2191],{"class":87},[34,50211,31871],{"class":63},[34,50213,3602],{"class":87},[34,50215,31876],{"class":156},[34,50217,4392],{"class":40},[34,50219,50221],{"class":36,"line":50220},226,[34,50222,34465],{"class":205},[34,50224,50226,50228,50230],{"class":36,"line":50225},227,[34,50227,45197],{"class":40},[34,50229,153],{"class":87},[34,50231,45202],{"class":40},[34,50233,50235,50237,50239],{"class":36,"line":50234},228,[34,50236,34482],{"class":40},[34,50238,153],{"class":87},[34,50240,34487],{"class":40},[34,50242,50244,50246,50248,50250,50252,50254,50256],{"class":36,"line":50243},229,[34,50245,34044],{"class":40},[34,50247,153],{"class":87},[34,50249,45219],{"class":40},[34,50251,34500],{"class":5869},[34,50253,153],{"class":87},[34,50255,1701],{"class":63},[34,50257,807],{"class":40},[34,50259,50261],{"class":36,"line":50260},230,[34,50262,34512],{"class":40},[22650,50264,50266],{"id":50265},"_242测试代码","2.4.2.测试代码",[108,50268,50269],{},"使用测试集进行测试与推理",[24,50271,50273],{"className":31029,"code":50272,"language":31031,"meta":29,"style":29},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[31,50274,50275,50281,50291,50301,50312,50322,50326,50330,50338,50343,50347,50364,50368,50372,50376,50380,50384,50416,50420,50428,50432,50444,50448,50452,50456,50460,50464,50468,50472,50476,50494,50508,50512,50522,50532,50542,50548,50552,50556,50564,50568,50584,50592,50596,50600,50608,50616,50620,50624,50628,50632,50638,50642,50652,50660,50668,50672,50676,50680,50688,50692,50708,50712,50716,50720,50732,50736,50748,50752,50756,50768,50772,50782,50786,50790,50802,50806,50814,50818,50822,50830,50834,50842,50846,50850,50854,50858,50862,50878,50886,50890,50894,50912,50918,50922,50932,50940,50948,50952,50956,50960,50964,50972,50976,50992,50996,51004,51012],{"__ignoreMap":29},[34,50276,50277,50279],{"class":36,"line":37},[34,50278,31043],{"class":87},[34,50280,31046],{"class":40},[34,50282,50283,50285,50287,50289],{"class":36,"line":51},[34,50284,31043],{"class":87},[34,50286,32066],{"class":40},[34,50288,32034],{"class":87},[34,50290,32071],{"class":40},[34,50292,50293,50295,50297,50299],{"class":36,"line":60},[34,50294,31388],{"class":87},[34,50296,32049],{"class":40},[34,50298,31043],{"class":87},[34,50300,32054],{"class":40},[34,50302,50303,50305,50307,50309],{"class":36,"line":76},[34,50304,31388],{"class":87},[34,50306,32019],{"class":40},[34,50308,31043],{"class":87},[34,50310,50311],{"class":40}," ImageFolder\n",[34,50313,50314,50316,50318,50320],{"class":36,"line":93},[34,50315,31388],{"class":87},[34,50317,32565],{"class":40},[34,50319,31043],{"class":87},[34,50321,45291],{"class":40},[34,50323,50324],{"class":36,"line":99},[34,50325,3053],{"emptyLinePlaceholder":726},[34,50327,50328],{"class":36,"line":353},[34,50329,34602],{"class":205},[34,50331,50332,50334,50336],{"class":36,"line":359},[34,50333,32598],{"class":87},[34,50335,34609],{"class":149},[34,50337,32604],{"class":40},[34,50339,50340],{"class":36,"line":579},[34,50341,50342],{"class":205},"   # 导入自己的数据集，并进行数据处理\n",[34,50344,50345],{"class":36,"line":589},[34,50346,48612],{"class":205},[34,50348,50349,50351,50353,50355,50357,50359,50362],{"class":36,"line":601},[34,50350,48617],{"class":63},[34,50352,153],{"class":87},[34,50354,1465],{"class":87},[34,50356,1046],{"class":156},[34,50358,1353],{"class":63},[34,50360,50361],{"class":48628},"\u002Fdata\u002Ftest",[34,50363,25786],{"class":156},[34,50365,50366],{"class":36,"line":613},[34,50367,3053],{"emptyLinePlaceholder":726},[34,50369,50370],{"class":36,"line":618},[34,50371,48640],{"class":205},[34,50373,50374],{"class":36,"line":628},[34,50375,48645],{"class":205},[34,50377,50378],{"class":36,"line":640},[34,50379,48650],{"class":205},[34,50381,50382],{"class":36,"line":2301},[34,50383,48655],{"class":205},[34,50385,50386,50388,50390,50392,50394,50396,50398,50400,50402,50404,50406,50408,50410,50412,50414],{"class":36,"line":2307},[34,50387,48660],{"class":40},[34,50389,153],{"class":87},[34,50391,48665],{"class":40},[34,50393,48668],{"class":63},[34,50395,1173],{"class":40},[34,50397,48673],{"class":63},[34,50399,1173],{"class":40},[34,50401,48678],{"class":63},[34,50403,48681],{"class":40},[34,50405,48684],{"class":63},[34,50407,1173],{"class":40},[34,50409,48689],{"class":63},[34,50411,1173],{"class":40},[34,50413,48694],{"class":63},[34,50415,5310],{"class":40},[34,50417,50418],{"class":36,"line":2328},[34,50419,48701],{"class":205},[34,50421,50422,50424,50426],{"class":36,"line":2333},[34,50423,48706],{"class":40},[34,50425,153],{"class":87},[34,50427,48711],{"class":40},[34,50429,50430],{"class":36,"line":2347},[34,50431,48716],{"class":205},[34,50433,50434,50436,50438,50440,50442],{"class":36,"line":2352},[34,50435,48721],{"class":40},[34,50437,32152],{"class":63},[34,50439,1173],{"class":40},[34,50441,32152],{"class":63},[34,50443,43273],{"class":40},[34,50445,50446],{"class":36,"line":2381},[34,50447,48734],{"class":205},[34,50449,50450],{"class":36,"line":2386},[34,50451,48739],{"class":40},[34,50453,50454],{"class":36,"line":2403},[34,50455,48744],{"class":40},[34,50457,50458],{"class":36,"line":2408},[34,50459,48749],{"class":205},[34,50461,50462],{"class":36,"line":2413},[34,50463,48754],{"class":205},[34,50465,50466],{"class":36,"line":2418},[34,50467,3053],{"emptyLinePlaceholder":726},[34,50469,50470],{"class":36,"line":2432},[34,50471,48763],{"class":205},[34,50473,50474],{"class":36,"line":2437},[34,50475,48768],{"class":205},[34,50477,50478,50480,50482,50484,50486,50488,50490,50492],{"class":36,"line":3230},[34,50479,34616],{"class":40},[34,50481,153],{"class":87},[34,50483,48777],{"class":40},[34,50485,48780],{"class":63},[34,50487,1173],{"class":40},[34,50489,48785],{"class":5869},[34,50491,153],{"class":87},[34,50493,48790],{"class":40},[34,50495,50496,50498,50500,50502,50504,50506],{"class":36,"line":3244},[34,50497,34673],{"class":40},[34,50499,153],{"class":87},[34,50501,32185],{"class":40},[34,50503,32188],{"class":5869},[34,50505,153],{"class":87},[34,50507,34684],{"class":40},[34,50509,50510],{"class":36,"line":3252},[34,50511,34689],{"class":205},[34,50513,50514,50516,50518,50520],{"class":36,"line":3257},[34,50515,34694],{"class":5869},[34,50517,153],{"class":87},[34,50519,1013],{"class":63},[34,50521,32117],{"class":40},[34,50523,50524,50526,50528,50530],{"class":36,"line":3263},[34,50525,34705],{"class":5869},[34,50527,153],{"class":87},[34,50529,32127],{"class":63},[34,50531,32117],{"class":40},[34,50533,50534,50536,50538,50540],{"class":36,"line":3269},[34,50535,34716],{"class":5869},[34,50537,153],{"class":87},[34,50539,987],{"class":63},[34,50541,807],{"class":40},[34,50543,50544,50546],{"class":36,"line":3274},[34,50545,4743],{"class":87},[34,50547,34729],{"class":40},[34,50549,50550],{"class":36,"line":8601},[34,50551,3053],{"emptyLinePlaceholder":726},[34,50553,50554],{"class":36,"line":8625},[34,50555,34738],{"class":205},[34,50557,50558,50560,50562],{"class":36,"line":8630},[34,50559,32598],{"class":87},[34,50561,34745],{"class":149},[34,50563,34748],{"class":40},[34,50565,50566],{"class":36,"line":8636},[34,50567,34753],{"class":205},[34,50569,50570,50572,50574,50576,50578,50580,50582],{"class":36,"line":8663},[34,50571,31888],{"class":40},[34,50573,153],{"class":87},[34,50575,31895],{"class":156},[34,50577,2358],{"class":87},[34,50579,31900],{"class":40},[34,50581,2355],{"class":87},[34,50583,34770],{"class":156},[34,50585,50586,50588,50590],{"class":36,"line":8668},[34,50587,31940],{"class":40},[34,50589,153],{"class":87},[34,50591,32940],{"class":40},[34,50593,50594],{"class":36,"line":8674},[34,50595,3053],{"emptyLinePlaceholder":726},[34,50597,50598],{"class":36,"line":8686},[34,50599,34787],{"class":205},[34,50601,50602,50604,50606],{"class":36,"line":8698},[34,50603,34792],{"class":40},[34,50605,153],{"class":87},[34,50607,32993],{"class":63},[34,50609,50610,50612,50614],{"class":36,"line":8710},[34,50611,34801],{"class":40},[34,50613,153],{"class":87},[34,50615,3738],{"class":63},[34,50617,50618],{"class":36,"line":10369},[34,50619,3053],{"emptyLinePlaceholder":726},[34,50621,50622],{"class":36,"line":10394},[34,50623,34814],{"class":205},[34,50625,50626],{"class":36,"line":10417},[34,50627,34819],{"class":205},[34,50629,50630],{"class":36,"line":10441},[34,50631,34824],{"class":205},[34,50633,50634,50636],{"class":36,"line":10446},[34,50635,34829],{"class":87},[34,50637,33535],{"class":40},[34,50639,50640],{"class":36,"line":10451},[34,50641,34836],{"class":205},[34,50643,50644,50646,50648,50650],{"class":36,"line":10456},[34,50645,4056],{"class":87},[34,50647,34843],{"class":40},[34,50649,26695],{"class":87},[34,50651,34848],{"class":40},[34,50653,50654,50656,50658],{"class":36,"line":10465},[34,50655,34853],{"class":40},[34,50657,153],{"class":87},[34,50659,34858],{"class":40},[34,50661,50662,50664,50666],{"class":36,"line":10470},[34,50663,34863],{"class":40},[34,50665,153],{"class":87},[34,50667,34868],{"class":40},[34,50669,50670],{"class":36,"line":10476},[34,50671,34873],{"class":205},[34,50673,50674],{"class":36,"line":10497},[34,50675,33526],{"class":40},[34,50677,50678],{"class":36,"line":10503},[34,50679,34882],{"class":205},[34,50681,50682,50684,50686],{"class":36,"line":10517},[34,50683,33311],{"class":40},[34,50685,153],{"class":87},[34,50687,34891],{"class":40},[34,50689,50690],{"class":36,"line":10523},[34,50691,34896],{"class":205},[34,50693,50694,50696,50698,50700,50702,50704,50706],{"class":36,"line":10550},[34,50695,33328],{"class":40},[34,50697,153],{"class":87},[34,50699,33333],{"class":40},[34,50701,33336],{"class":5869},[34,50703,153],{"class":87},[34,50705,1013],{"class":63},[34,50707,807],{"class":40},[34,50709,50710],{"class":36,"line":10559},[34,50711,34917],{"class":205},[34,50713,50714],{"class":36,"line":10565},[34,50715,34922],{"class":205},[34,50717,50718],{"class":36,"line":10573},[34,50719,34927],{"class":205},[34,50721,50722,50724,50726,50728,50730],{"class":36,"line":10578},[34,50723,34932],{"class":40},[34,50725,10130],{"class":87},[34,50727,33438],{"class":40},[34,50729,3602],{"class":87},[34,50731,34941],{"class":40},[34,50733,50734],{"class":36,"line":17256},[34,50735,34946],{"class":205},[34,50737,50738,50740,50742,50744,50746],{"class":36,"line":17262},[34,50739,34951],{"class":40},[34,50741,10130],{"class":87},[34,50743,34956],{"class":40},[34,50745,987],{"class":63},[34,50747,807],{"class":40},[34,50749,50750],{"class":36,"line":17285},[34,50751,3053],{"emptyLinePlaceholder":726},[34,50753,50754],{"class":36,"line":17291},[34,50755,34969],{"class":205},[34,50757,50758,50760,50762,50764,50766],{"class":36,"line":17314},[34,50759,34974],{"class":40},[34,50761,153],{"class":87},[34,50763,34979],{"class":40},[34,50765,1379],{"class":87},[34,50767,34984],{"class":40},[34,50769,50770],{"class":36,"line":17328},[34,50771,34989],{"class":205},[34,50773,50774,50776,50778,50780],{"class":36,"line":17348},[34,50775,33102],{"class":63},[34,50777,801],{"class":40},[34,50779,34998],{"class":156},[34,50781,35001],{"class":40},[34,50783,50784],{"class":36,"line":17354},[34,50785,3053],{"emptyLinePlaceholder":726},[34,50787,50788],{"class":36,"line":17365},[34,50789,35010],{"class":205},[34,50791,50792,50794,50796,50798,50800],{"class":36,"line":17388},[34,50793,2191],{"class":87},[34,50795,31871],{"class":63},[34,50797,3602],{"class":87},[34,50799,31876],{"class":156},[34,50801,4392],{"class":40},[34,50803,50804],{"class":36,"line":17410},[34,50805,35027],{"class":205},[34,50807,50808,50810,50812],{"class":36,"line":17415},[34,50809,31940],{"class":40},[34,50811,153],{"class":87},[34,50813,45202],{"class":40},[34,50815,50816],{"class":36,"line":17421},[34,50817,35040],{"class":205},[34,50819,50820],{"class":36,"line":17435},[34,50821,35045],{"class":205},[34,50823,50824,50826,50828],{"class":36,"line":17448},[34,50825,35050],{"class":40},[34,50827,35053],{"class":156},[34,50829,31148],{"class":40},[34,50831,50832],{"class":36,"line":17453},[34,50833,35060],{"class":205},[34,50835,50836,50838,50840],{"class":36,"line":17467},[34,50837,34673],{"class":40},[34,50839,153],{"class":87},[34,50841,35069],{"class":40},[34,50843,50844],{"class":36,"line":17472},[34,50845,35074],{"class":205},[34,50847,50848],{"class":36,"line":17478},[34,50849,35079],{"class":40},[34,50851,50852],{"class":36,"line":17483},[34,50853,3053],{"emptyLinePlaceholder":726},[34,50855,50856],{"class":36,"line":17497},[34,50857,35088],{"class":205},[34,50859,50860],{"class":36,"line":17502},[34,50861,35093],{"class":205},[34,50863,50864,50866,50868,50870,50872,50874,50876],{"class":36,"line":17507},[34,50865,31888],{"class":40},[34,50867,153],{"class":87},[34,50869,31895],{"class":156},[34,50871,2358],{"class":87},[34,50873,31900],{"class":40},[34,50875,2355],{"class":87},[34,50877,34770],{"class":156},[34,50879,50880,50882,50884],{"class":36,"line":17521},[34,50881,31940],{"class":40},[34,50883,153],{"class":87},[34,50885,32940],{"class":40},[34,50887,50888],{"class":36,"line":17533},[34,50889,35122],{"class":205},[34,50891,50892],{"class":36,"line":17538},[34,50893,35127],{"class":205},[34,50895,50896,50898,50900,50902,50905,50907,50910],{"class":36,"line":17551},[34,50897,35132],{"class":40},[34,50899,153],{"class":87},[34,50901,1684],{"class":40},[34,50903,50904],{"class":156},"'猫'",[34,50906,1173],{"class":40},[34,50908,50909],{"class":156},"'狗'",[34,50911,33897],{"class":40},[34,50913,50914,50916],{"class":36,"line":17556},[34,50915,34829],{"class":87},[34,50917,33535],{"class":40},[34,50919,50920],{"class":36,"line":17561},[34,50921,35197],{"class":205},[34,50923,50924,50926,50928,50930],{"class":36,"line":17566},[34,50925,4056],{"class":87},[34,50927,35204],{"class":40},[34,50929,26695],{"class":87},[34,50931,34848],{"class":40},[34,50933,50934,50936,50938],{"class":36,"line":17579},[34,50935,33261],{"class":40},[34,50937,153],{"class":87},[34,50939,33266],{"class":40},[34,50941,50942,50944,50946],{"class":36,"line":17584},[34,50943,33276],{"class":40},[34,50945,153],{"class":87},[34,50947,33281],{"class":40},[34,50949,50950],{"class":36,"line":33284},[34,50951,3053],{"emptyLinePlaceholder":726},[34,50953,50954],{"class":36,"line":33290},[34,50955,35233],{"class":205},[34,50957,50958],{"class":36,"line":33296},[34,50959,33526],{"class":40},[34,50961,50962],{"class":36,"line":33302},[34,50963,35242],{"class":205},[34,50965,50966,50968,50970],{"class":36,"line":33308},[34,50967,33311],{"class":40},[34,50969,153],{"class":87},[34,50971,33316],{"class":40},[34,50973,50974],{"class":36,"line":33319},[34,50975,35255],{"class":205},[34,50977,50978,50980,50982,50984,50986,50988,50990],{"class":36,"line":33325},[34,50979,33328],{"class":40},[34,50981,153],{"class":87},[34,50983,33333],{"class":40},[34,50985,33336],{"class":5869},[34,50987,153],{"class":87},[34,50989,1013],{"class":63},[34,50991,807],{"class":40},[34,50993,50994],{"class":36,"line":33345},[34,50995,35276],{"class":205},[34,50997,50998,51000,51002],{"class":36,"line":33351},[34,50999,35281],{"class":40},[34,51001,153],{"class":87},[34,51003,35286],{"class":40},[34,51005,51006,51008,51010],{"class":36,"line":33362},[34,51007,35291],{"class":40},[34,51009,153],{"class":87},[34,51011,35296],{"class":40},[34,51013,51014,51016,51018,51020,51022,51024,51026,51028],{"class":36,"line":33368},[34,51015,35301],{"class":63},[34,51017,801],{"class":40},[34,51019,35306],{"class":156},[34,51021,35309],{"class":40},[34,51023,35312],{"class":156},[34,51025,1173],{"class":40},[34,51027,35317],{"class":156},[34,51029,35320],{"class":40},[45,51031,51032],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":29,"searchDepth":51,"depth":51,"links":51034},[51035,51036,51037,51038],{"id":31242,"depth":60,"text":31243},{"id":38490,"depth":60,"text":38491},{"id":41923,"depth":60,"text":41924},{"id":45932,"depth":60,"text":45933},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31234,"description":723},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51045,"title":51046,"body":51047,"description":723,"extension":724,"meta":51054,"navigation":726,"path":51055,"seo":51056,"stem":51057,"__hash__":51058},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51048,"toc":51052},[51049],[10,51050,51046],{"id":51051},"_3yolo模型学习",{"title":29,"searchDepth":51,"depth":51,"links":51053},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51046,"description":723},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51060,"title":51061,"body":51062,"description":51069,"extension":724,"meta":51070,"navigation":726,"path":51072,"seo":51073,"stem":51074,"__hash__":51075},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51063,"toc":51067},[51064],[108,51065,51066],{},"yolo模型还未补充",{"title":29,"searchDepth":51,"depth":51,"links":51068},[],"深度学习学习",{"category":51071},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51061,"description":51069},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51077,"title":51078,"body":51079,"description":723,"extension":724,"meta":51104,"navigation":726,"path":51105,"seo":51106,"stem":51107,"__hash__":51108},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51080,"toc":51102},[51081,51084,51087,51092,51099],[10,51082,51078],{"id":51083},"_1工具",[108,51085,51086],{},"提示错误插件：有问题会提前报错",[108,51088,51089],{},[2122,51090],{"alt":29,"src":51091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[108,51093,51094],{},[520,51095,51098],{"href":51096,"rel":51097},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F%E5%89%8D%E7%AB%AF%E8%B5%84%E6%96%99%E6%90%9C%E9%9B%86%E5%BF%85%E5%A4%87%E7%BD%91%E7%AB%99",[24517],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[108,51100,51101],{},"alt键加上下箭头可以实现语句的移动",{"title":29,"searchDepth":51,"depth":51,"links":51103},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51078,"description":723},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51110,"title":51111,"body":51112,"description":723,"extension":724,"meta":53971,"navigation":726,"path":53972,"seo":53973,"stem":53974,"__hash__":53975},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51113,"toc":53922},[51114,51117,51121,51125,51130,51133,51138,51142,51149,51154,51161,51166,51173,51178,51182,51187,51190,51194,51199,51203,51208,51211,51214,51217,51220,51223,51226,51229,51232,51237,51242,51247,51251,51254,51257,51261,51266,51269,51277,51282,51299,51307,51312,51317,51322,51327,51332,51335,51340,51345,51349,51358,51363,51368,51372,51377,51380,51384,51389,51397,51402,51407,51410,51415,51420,51425,51428,51431,51434,51439,51444,51447,51452,51455,51460,51463,51466,51469,51474,51477,51480,51495,51500,51505,51510,51513,51516,51519,51533,51536,51541,51546,51549,51552,51555,51558,51561,51564,51567,51571,51575,51580,51584,51587,51592,51597,51600,51605,51608,51612,51617,51620,51623,51626,51629,51632,51635,51638,51641,51644,51648,51653,51658,51663,51666,51669,51673,51678,51681,51685,51688,51691,51696,51699,51702,51706,51710,51713,51718,51723,51726,51755,51760,51765,51770,51775,51779,51784,51788,51793,51796,51800,51804,51809,51813,51818,51823,51827,51832,51835,51837,51840,51845,51849,51854,51858,51862,51867,51872,51877,51882,51886,51891,51896,51901,51904,51907,51912,51915,51920,51925,51930,51935,51939,52741,52745,53088,53093,53096,53099,53102,53105,53108,53111,53114,53117,53119,53122,53124,53127,53131,53136,53139,53142,53145,53149,53154,53159,53179,53182,53186,53191,53196,53213,53217,53246,53250,53272,53274,53313,53321,53327,53331,53334,53337,53342,53347,53350,53353,53356,53361,53366,53369,53372,53375,53378,53381,53384,53387,53390,53393,53396,53399,53401,53404,53407,53410,53413,53416,53419,53422,53425,53429,53434,53437,53442,53445,53448,53451,53454,53457,53460,53463,53465,53468,53471,53474,53477,53480,53483,53487,53490,53499,53502,53507,53510,53515,53518,53521,53524,53527,53530,53533,53536,53540,53544,53547,53550,53555,53560,53565,53569,53574,53579,53582,53585,53588,53591,53594,53599,53602,53607,53609,53614,53617,53621,53626,53629,53632,53637,53641,53644,53649,53652,53655,53684,53689,53692,53695,53698,53701,53704,53708,53711,53797,53801,53804,53809,53814,53821,53824,53827,53830,53833,53836,53841,53846,53849,53852,53855,53858,53861,53864,53867,53870,53873,53875,53878,53882,53887,53892,53897,53900,53905,53910,53913,53916,53919],[10,51115,51111],{"id":51116},"_2基础语法",[14,51118,51120],{"id":51119},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[19,51122,51124],{"id":51123},"_211-js组成","2.1.1 js组成",[752,51126,51127],{},[755,51128,51129],{},"js是编程语言，html和css不是编程语言，是标记语言",[108,51131,51132],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[752,51134,51135],{"start":51},[755,51136,51137],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[19,51139,51141],{"id":51140},"_212-js书写位置","2.1.2 js书写位置",[752,51143,51144],{},[755,51145,51146],{},[111,51147,51148],{},"内部 JavaScript",[108,51150,51151],{},[2122,51152],{"alt":29,"src":51153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[752,51155,51156],{"start":51},[755,51157,51158],{},[111,51159,51160],{},"外部 JavaScript",[108,51162,51163],{},[2122,51164],{"alt":29,"src":51165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[752,51167,51168],{"start":60},[755,51169,51170],{},[111,51171,51172],{},"内联 JavaScript",[108,51174,51175],{},[2122,51176],{"alt":29,"src":51177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[19,51179,51181],{"id":51180},"_213-javascript注释","2.1.3 JavaScript注释",[108,51183,51184],{},[2122,51185],{"alt":29,"src":51186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[108,51188,51189],{},"alt+shift+a一定要记住！",[19,51191,51193],{"id":51192},"_214-javascript结束符","2.1.4 JavaScript结束符",[108,51195,51196],{},[2122,51197],{"alt":29,"src":51198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[19,51200,51202],{"id":51201},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[752,51204,51205],{},[755,51206,51207],{},"输出语法：",[108,51209,51210],{},"①document.write('要出的内容')",[108,51212,51213],{},"向body内输出内容；",[108,51215,51216],{},"如果输出的内容写的是标签，也会被解析cheng",[108,51218,51219],{},"②alert('要出的内容')",[108,51221,51222],{},"页面弹出警告对话框",[108,51224,51225],{},"③console.log('控制台打印')",[108,51227,51228],{},"控制台输出语法，程序员调试使用",[108,51230,51231],{},"输入log就行，自动生成：",[108,51233,51234],{},[2122,51235],{"alt":29,"src":51236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[752,51238,51239],{"start":51},[755,51240,51241],{},"输入语法：",[108,51243,51244],{},[2122,51245],{"alt":29,"src":51246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[19,51248,51250],{"id":51249},"_2116-字面量","21.1.6 字面量",[108,51252,51253],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[108,51255,51256],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51258,51260],{"id":51259},"_22-变量","2.2 变量",[752,51262,51263],{},[755,51264,51265],{},"变量声明",[108,51267,51268],{},"let 变量名",[1800,51270,51271,51274],{},[755,51272,51273],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[755,51275,51276],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[752,51278,51279],{"start":51},[755,51280,51281],{},"变量赋值",[24,51283,51287],{"className":51284,"code":51285,"language":51286,"meta":29,"style":29},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[31,51288,51289,51294],{"__ignoreMap":29},[34,51290,51291],{"class":36,"line":37},[34,51292,51293],{"class":40},"let age\n",[34,51295,51296],{"class":36,"line":51},[34,51297,51298],{"class":40},"age=18\n",[752,51300,51301,51304],{"start":60},[755,51302,51303],{},"连这些（变量的初始化）：let age=18",[755,51305,51306],{},"更新变量",[108,51308,51309],{},[2122,51310],{"alt":29,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[752,51313,51314],{"start":93},[755,51315,51316],{},"声明多个变量",[108,51318,51319],{},[2122,51320],{"alt":29,"src":51321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[752,51323,51324],{"start":99},[755,51325,51326],{},"变量命名规则与规范",[108,51328,51329],{},[2122,51330],{"alt":29,"src":51331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[108,51333,51334],{},"遵守小驼峰！",[752,51336,51337],{"start":353},[755,51338,51339],{},"变量拓展-let和var的区别",[108,51341,51342],{},[2122,51343],{"alt":29,"src":51344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51346,51348],{"id":51347},"_23-数组","2.3 数组",[24,51350,51352],{"className":51284,"code":51351,"language":51286,"meta":29,"style":29},"let arr = []\n",[31,51353,51354],{"__ignoreMap":29},[34,51355,51356],{"class":36,"line":37},[34,51357,51351],{"class":40},[108,51359,51360],{},[2122,51361],{"alt":29,"src":51362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[108,51364,51365],{},[2122,51366],{"alt":29,"src":51367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51369,51371],{"id":51370},"_24-常量","2.4 常量",[108,51373,51374],{},[2122,51375],{"alt":29,"src":51376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[108,51378,51379],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51381,51383],{"id":51382},"_25-数据类型","2.5 数据类型",[108,51385,51386],{},[2122,51387],{"alt":29,"src":51388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[752,51390,51391,51394],{},[755,51392,51393],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[755,51395,51396],{},"算数运算符：",[108,51398,51399],{},[2122,51400],{"alt":29,"src":51401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[752,51403,51404],{"start":60},[755,51405,51406],{},"数字类型（Number）",[108,51408,51409],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[108,51411,51412],{},[2122,51413],{"alt":29,"src":51414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[752,51416,51417],{"start":76},[755,51418,51419],{},"字符串类型（string）",[108,51421,51422],{},[2122,51423],{"alt":29,"src":51424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[108,51426,51427],{},"反引号也是可以使用的",[108,51429,51430],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[108,51432,51433],{},"例如：document.write(\"我今年\"+age+\"岁\")",[752,51435,51436],{"start":93},[755,51437,51438],{},"模板字符串",[108,51440,51441],{},[2122,51442],{"alt":29,"src":51443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[108,51445,51446],{},"类似于python的字符串格式化",[752,51448,51449],{"start":99},[755,51450,51451],{},"布尔类型",[108,51453,51454],{},"true 和 false",[752,51456,51457],{"start":353},[755,51458,51459],{},"未定义类型（underfined）",[108,51461,51462],{},"表示没有赋值",[108,51464,51465],{},"未定义类型是比较特殊的类型，只有一个值undefined",[108,51467,51468],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[752,51470,51471],{"start":359},[755,51472,51473],{},"null（空类型）",[108,51475,51476],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[108,51478,51479],{},"赋值了，但是内容为空",[24,51481,51483],{"className":51284,"code":51482,"language":51286,"meta":29,"style":29},"typeof null\n输出的是'object'，是一个对象数据类型\n",[31,51484,51485,51490],{"__ignoreMap":29},[34,51486,51487],{"class":36,"line":37},[34,51488,51489],{"class":40},"typeof null\n",[34,51491,51492],{"class":36,"line":51},[34,51493,51494],{"class":40},"输出的是'object'，是一个对象数据类型\n",[752,51496,51497],{"start":579},[755,51498,51499],{},"控制台检测数据类型",[108,51501,51502],{},[2122,51503],{"alt":29,"src":51504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[752,51506,51507],{"start":589},[755,51508,51509],{},"类型转换",[108,51511,51512],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[108,51514,51515],{},"转换方式：隐式转换和显示转换",[108,51517,51518],{},"①隐式转换",[1800,51520,51521,51524,51527,51530],{},[755,51522,51523],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[755,51525,51526],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[755,51528,51529],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[755,51531,51532],{},"任何数据和字符串相加结果都是字符串",[108,51534,51535],{},"②显示转换",[108,51537,51538],{},[2122,51539],{"alt":29,"src":51540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[108,51542,51543],{},[2122,51544],{"alt":29,"src":51545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[108,51547,51548],{},"在输入的时候要用好隐式转换，简单写起来",[108,51550,51551],{},"let num = +prompt(’请输入数字：‘)",[108,51553,51554],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[108,51556,51557],{},"console.log(parseInt('12.333px'))",[108,51559,51560],{},"输出为：12",[108,51562,51563],{},"console.log(parseInt('a'a'a12.333px'))",[108,51565,51566],{},"输出：NaN",[14,51568,51570],{"id":51569},"_26-运算符","2.6 运算符",[19,51572,51574],{"id":51573},"_261-赋值运算符","2.6.1 赋值运算符",[108,51576,51577],{},[2122,51578],{"alt":29,"src":51579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[19,51581,51583],{"id":51582},"_262-一元运算符","2.6.2 一元运算符",[108,51585,51586],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[108,51588,51589],{},[2122,51590],{"alt":29,"src":51591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[108,51593,51594],{},[2122,51595],{"alt":29,"src":51596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[108,51598,51599],{},"两者的区别：",[108,51601,51602],{},[2122,51603],{"alt":29,"src":51604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[108,51606,51607],{},"前置先自加；后置后加，代码执行完之后再加",[19,51609,51611],{"id":51610},"_263-比较运算符","2.6.3 比较运算符",[108,51613,51614],{},[2122,51615],{"alt":29,"src":51616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[108,51618,51619],{},"比较运算符也有隐式转换",[108,51621,51622],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[108,51624,51625],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[108,51627,51628],{},"要使用三等，开发的时候",[108,51630,51631],{},"NaN不等于任何人，包括它自己",[108,51633,51634],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[108,51636,51637],{},"7\u002F10=0.7",[108,51639,51640],{},"最后：0.5+0.2=0.7",[108,51642,51643],{},"字符串比较，比较的是字符对应的ASCII码",[19,51645,51647],{"id":51646},"_264-逻辑运算符","2.6.4 逻辑运算符",[108,51649,51650],{},[2122,51651],{"alt":29,"src":51652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[108,51654,51655],{},[2122,51656],{"alt":29,"src":51657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[108,51659,51660],{},[2122,51661],{"alt":29,"src":51662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[108,51664,51665],{},"上述题目选D",[108,51667,51668],{},"与真2假1；或真1假2",[19,51670,51672],{"id":51671},"_265-运算符优先级","2.6.5 运算符优先级",[108,51674,51675],{},[2122,51676],{"alt":29,"src":51677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[108,51679,51680],{},"先算逻辑与，后算逻辑或",[14,51682,51684],{"id":51683},"_27-语句","2.7 语句",[108,51686,51687],{},"表达式：是可以被求值的代码，会有结果给我们",[108,51689,51690],{},"语句：语句是可以被执行的代码，例如prompt()",[108,51692,51693],{},[2122,51694],{"alt":29,"src":51695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[108,51697,51698],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[108,51700,51701],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[19,51703,51705],{"id":51704},"_271-分支语句","2.7.1 分支语句",[22650,51707,51709],{"id":51708},"_2711-if分支语句","2.7.1.1 if分支语句",[108,51711,51712],{},"if语句单行简单的话，可以不写{}，写在一行就行",[752,51714,51715],{},[755,51716,51717],{},"单分支语句",[108,51719,51720],{},[2122,51721],{"alt":29,"src":51722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[108,51724,51725],{},"除了0，所有数字都为真",[24,51727,51729],{"className":51284,"code":51728,"language":51286,"meta":29,"style":29},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[31,51730,51731,51736,51741,51746,51750],{"__ignoreMap":29},[34,51732,51733],{"class":36,"line":37},[34,51734,51735],{"class":40},"if（0) {\n",[34,51737,51738],{"class":36,"line":51},[34,51739,51740],{"class":40},"    let a=1\n",[34,51742,51743],{"class":36,"line":60},[34,51744,51745],{"class":40},"    alert(typeof a)\n",[34,51747,51748],{"class":36,"line":76},[34,51749,241],{"class":40},[34,51751,51752],{"class":36,"line":93},[34,51753,51754],{"class":40},"不输出，括号为假\n",[752,51756,51757],{"start":51},[755,51758,51759],{},"双分支语句",[108,51761,51762],{},[2122,51763],{"alt":29,"src":51764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[752,51766,51767],{"start":60},[755,51768,51769],{},"多分支语句",[108,51771,51772],{},[2122,51773],{"alt":29,"src":51774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22650,51776,51778],{"id":51777},"_2712-三元运算符","2.7.1.2 三元运算符",[108,51780,51781],{},[2122,51782],{"alt":29,"src":51783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22650,51785,51787],{"id":51786},"_2713-switch语句","2.7.1.3 switch语句",[108,51789,51790],{},[2122,51791],{"alt":29,"src":51792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[108,51794,51795],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[19,51797,51799],{"id":51798},"_272-循环语句","2.7.2 循环语句",[22650,51801,51803],{"id":51802},"_2721-断点演示","2.7.2.1 断点演示",[108,51805,51806],{},[2122,51807],{"alt":29,"src":51808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22650,51810,51812],{"id":51811},"_2722-while循环","2.7.2.2 while循环",[108,51814,51815],{},[2122,51816],{"alt":29,"src":51817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[108,51819,51820],{},[2122,51821],{"alt":29,"src":51822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22650,51824,51826],{"id":51825},"_2723-for循环","2.7.2.3 for循环",[108,51828,51829],{},[2122,51830],{"alt":29,"src":51831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[108,51833,51834],{},"for(;;) {",[108,51836,1739],{},[108,51838,51839],{},"表示无限循环",[108,51841,51842],{},[2122,51843],{"alt":29,"src":51844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22650,51846,51848],{"id":51847},"_2724-循环的退出","2.7.2.4 循环的退出",[108,51850,51851],{},[2122,51852],{"alt":29,"src":51853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51855,51857],{"id":51856},"_28-数组","2.8 数组",[19,51859,51861],{"id":51860},"_281-基础认识","2.8.1 基础认识",[108,51863,51864],{},[2122,51865],{"alt":29,"src":51866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[108,51868,51869],{},[2122,51870],{"alt":29,"src":51871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[108,51873,51874],{},[2122,51875],{"alt":29,"src":51876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[108,51878,51879],{},[2122,51880],{"alt":29,"src":51881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[19,51883,51885],{"id":51884},"_282-操作数组","2.8.2 操作数组",[108,51887,51888],{},[2122,51889],{"alt":29,"src":51890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[752,51892,51893],{},[755,51894,51895],{},"添加元素",[108,51897,51898],{},[2122,51899],{"alt":29,"src":51900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[108,51902,51903],{},"console.log(arr.push('green'))",[108,51905,51906],{},"输出结果：为新数组的长度",[108,51908,51909],{},[2122,51910],{"alt":29,"src":51911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[108,51913,51914],{},"push用的非常多，一定要记住",[752,51916,51917],{},[755,51918,51919],{},"删除元素",[108,51921,51922],{},[2122,51923],{"alt":29,"src":51924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[108,51926,51927],{},[2122,51928],{"alt":29,"src":51929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[108,51931,51932],{},[2122,51933],{"alt":29,"src":51934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[19,51936,51938],{"id":51937},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[24,51940,51942],{"className":51284,"code":51941,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,51943,51944,51957,51973,51977,51986,52004,52028,52050,52064,52072,52079,52090,52101,52105,52109,52116,52128,52142,52155,52174,52191,52206,52218,52230,52242,52246,52250,52261,52271,52283,52295,52307,52318,52322,52326,52338,52342,52356,52360,52364,52375,52389,52401,52415,52419,52428,52436,52440,52449,52453,52462,52467,52472,52485,52513,52518,52523,52548,52553,52557,52562,52567,52582,52586,52591,52621,52633,52649,52665,52679,52684,52691,52695,52700,52713,52721,52729,52733],{"__ignoreMap":29},[34,51945,51946,51949,51952,51955],{"class":36,"line":37},[34,51947,51948],{"class":40},"\u003C!",[34,51950,51951],{"class":44},"DOCTYPE",[34,51953,51954],{"class":149}," html",[34,51956,48],{"class":40},[34,51958,51959,51961,51963,51966,51968,51971],{"class":36,"line":51},[34,51960,41],{"class":40},[34,51962,51286],{"class":44},[34,51964,51965],{"class":149}," lang",[34,51967,153],{"class":40},[34,51969,51970],{"class":156},"\"en\"",[34,51972,48],{"class":40},[34,51974,51975],{"class":36,"line":60},[34,51976,3053],{"emptyLinePlaceholder":726},[34,51978,51979,51981,51984],{"class":36,"line":76},[34,51980,41],{"class":40},[34,51982,51983],{"class":44},"head",[34,51985,48],{"class":40},[34,51987,51988,51991,51994,51997,51999,52002],{"class":36,"line":93},[34,51989,51990],{"class":40},"    \u003C",[34,51992,51993],{"class":44},"meta",[34,51995,51996],{"class":149}," charset",[34,51998,153],{"class":40},[34,52000,52001],{"class":156},"\"UTF-8\"",[34,52003,48],{"class":40},[34,52005,52006,52008,52010,52013,52015,52018,52021,52023,52026],{"class":36,"line":99},[34,52007,51990],{"class":40},[34,52009,51993],{"class":44},[34,52011,52012],{"class":149}," http-equiv",[34,52014,153],{"class":40},[34,52016,52017],{"class":156},"\"X-UA-Compatible\"",[34,52019,52020],{"class":149}," content",[34,52022,153],{"class":40},[34,52024,52025],{"class":156},"\"IE=edge\"",[34,52027,48],{"class":40},[34,52029,52030,52032,52034,52036,52038,52041,52043,52045,52048],{"class":36,"line":353},[34,52031,51990],{"class":40},[34,52033,51993],{"class":44},[34,52035,15573],{"class":149},[34,52037,153],{"class":40},[34,52039,52040],{"class":156},"\"viewport\"",[34,52042,52020],{"class":149},[34,52044,153],{"class":40},[34,52046,52047],{"class":156},"\"width=device-width, initial-scale=1.0\"",[34,52049,48],{"class":40},[34,52051,52052,52054,52057,52060,52062],{"class":36,"line":359},[34,52053,51990],{"class":40},[34,52055,52056],{"class":44},"title",[34,52058,52059],{"class":40},">Document\u003C\u002F",[34,52061,52056],{"class":44},[34,52063,48],{"class":40},[34,52065,52066,52068,52070],{"class":36,"line":579},[34,52067,51990],{"class":40},[34,52069,45],{"class":44},[34,52071,48],{"class":40},[34,52073,52074,52077],{"class":36,"line":589},[34,52075,52076],{"class":44},"        *",[34,52078,57],{"class":40},[34,52080,52081,52084,52086,52088],{"class":36,"line":601},[34,52082,52083],{"class":63},"            margin",[34,52085,67],{"class":40},[34,52087,987],{"class":63},[34,52089,73],{"class":40},[34,52091,52092,52095,52097,52099],{"class":36,"line":613},[34,52093,52094],{"class":63},"            padding",[34,52096,67],{"class":40},[34,52098,987],{"class":63},[34,52100,73],{"class":40},[34,52102,52103],{"class":36,"line":618},[34,52104,3182],{"class":40},[34,52106,52107],{"class":36,"line":628},[34,52108,3053],{"emptyLinePlaceholder":726},[34,52110,52111,52114],{"class":36,"line":640},[34,52112,52113],{"class":149},"        .box",[34,52115,57],{"class":40},[34,52117,52118,52121,52123,52126],{"class":36,"line":2301},[34,52119,52120],{"class":63},"            display",[34,52122,67],{"class":40},[34,52124,52125],{"class":63},"flex",[34,52127,73],{"class":40},[34,52129,52130,52133,52135,52138,52140],{"class":36,"line":2307},[34,52131,52132],{"class":63},"            width",[34,52134,67],{"class":40},[34,52136,52137],{"class":63},"700",[34,52139,88],{"class":87},[34,52141,73],{"class":40},[34,52143,52144,52147,52149,52151,52153],{"class":36,"line":2328},[34,52145,52146],{"class":63},"            height",[34,52148,67],{"class":40},[34,52150,4626],{"class":63},[34,52152,88],{"class":87},[34,52154,73],{"class":40},[34,52156,52157,52160,52162,52164,52166,52169,52172],{"class":36,"line":2333},[34,52158,52159],{"class":63},"            border-left",[34,52161,67],{"class":40},[34,52163,1013],{"class":63},[34,52165,88],{"class":87},[34,52167,52168],{"class":63}," solid",[34,52170,52171],{"class":63}," pink",[34,52173,73],{"class":40},[34,52175,52176,52179,52181,52183,52185,52187,52189],{"class":36,"line":2347},[34,52177,52178],{"class":63},"            border-bottom",[34,52180,67],{"class":40},[34,52182,1013],{"class":63},[34,52184,88],{"class":87},[34,52186,52168],{"class":63},[34,52188,52171],{"class":63},[34,52190,73],{"class":40},[34,52192,52193,52195,52197,52199,52201,52204],{"class":36,"line":2352},[34,52194,52083],{"class":63},[34,52196,67],{"class":40},[34,52198,1451],{"class":63},[34,52200,88],{"class":87},[34,52202,52203],{"class":63}," auto",[34,52205,73],{"class":40},[34,52207,52208,52211,52213,52216],{"class":36,"line":2381},[34,52209,52210],{"class":63},"            justify-content",[34,52212,67],{"class":40},[34,52214,52215],{"class":63},"space-around",[34,52217,73],{"class":40},[34,52219,52220,52223,52225,52228],{"class":36,"line":2386},[34,52221,52222],{"class":63},"            align-items",[34,52224,67],{"class":40},[34,52226,52227],{"class":63},"flex-end",[34,52229,73],{"class":40},[34,52231,52232,52235,52237,52240],{"class":36,"line":2403},[34,52233,52234],{"class":63},"            text-align",[34,52236,67],{"class":40},[34,52238,52239],{"class":63},"center",[34,52241,73],{"class":40},[34,52243,52244],{"class":36,"line":2408},[34,52245,3182],{"class":40},[34,52247,52248],{"class":36,"line":2413},[34,52249,3053],{"emptyLinePlaceholder":726},[34,52251,52252,52254,52256,52259],{"class":36,"line":2418},[34,52253,52113],{"class":149},[34,52255,1753],{"class":87},[34,52257,52258],{"class":44},"div",[34,52260,57],{"class":40},[34,52262,52263,52265,52267,52269],{"class":36,"line":2432},[34,52264,52120],{"class":63},[34,52266,67],{"class":40},[34,52268,52125],{"class":63},[34,52270,73],{"class":40},[34,52272,52273,52275,52277,52279,52281],{"class":36,"line":2437},[34,52274,52132],{"class":63},[34,52276,67],{"class":40},[34,52278,1451],{"class":63},[34,52280,88],{"class":87},[34,52282,73],{"class":40},[34,52284,52285,52288,52290,52293],{"class":36,"line":3230},[34,52286,52287],{"class":63},"            background-color",[34,52289,67],{"class":40},[34,52291,52292],{"class":63},"pink",[34,52294,73],{"class":40},[34,52296,52297,52300,52302,52305],{"class":36,"line":3244},[34,52298,52299],{"class":63},"            flex-direction",[34,52301,67],{"class":40},[34,52303,52304],{"class":63},"column",[34,52306,73],{"class":40},[34,52308,52309,52311,52313,52316],{"class":36,"line":3252},[34,52310,52210],{"class":63},[34,52312,67],{"class":40},[34,52314,52315],{"class":63},"space-between",[34,52317,73],{"class":40},[34,52319,52320],{"class":36,"line":3257},[34,52321,3182],{"class":40},[34,52323,52324],{"class":36,"line":3263},[34,52325,3053],{"emptyLinePlaceholder":726},[34,52327,52328,52330,52333,52336],{"class":36,"line":3269},[34,52329,52113],{"class":149},[34,52331,52332],{"class":44}," div",[34,52334,52335],{"class":44}," span",[34,52337,57],{"class":40},[34,52339,52340],{"class":36,"line":3274},[34,52341,3053],{"emptyLinePlaceholder":726},[34,52343,52344,52347,52349,52352,52354],{"class":36,"line":8601},[34,52345,52346],{"class":63},"            margin-top",[34,52348,67],{"class":40},[34,52350,52351],{"class":63},"-20",[34,52353,88],{"class":87},[34,52355,73],{"class":40},[34,52357,52358],{"class":36,"line":8625},[34,52359,3182],{"class":40},[34,52361,52362],{"class":36,"line":8630},[34,52363,3053],{"emptyLinePlaceholder":726},[34,52365,52366,52368,52370,52373],{"class":36,"line":8636},[34,52367,52113],{"class":149},[34,52369,52332],{"class":44},[34,52371,52372],{"class":44}," h4",[34,52374,57],{"class":40},[34,52376,52377,52380,52382,52385,52387],{"class":36,"line":8663},[34,52378,52379],{"class":63},"            margin-bottom",[34,52381,67],{"class":40},[34,52383,52384],{"class":63},"-35",[34,52386,88],{"class":87},[34,52388,73],{"class":40},[34,52390,52391,52393,52395,52397,52399],{"class":36,"line":8668},[34,52392,52132],{"class":63},[34,52394,67],{"class":40},[34,52396,1151],{"class":63},[34,52398,88],{"class":87},[34,52400,73],{"class":40},[34,52402,52403,52406,52408,52411,52413],{"class":36,"line":8674},[34,52404,52405],{"class":63},"            margin-left",[34,52407,67],{"class":40},[34,52409,52410],{"class":63},"-10",[34,52412,88],{"class":87},[34,52414,73],{"class":40},[34,52416,52417],{"class":36,"line":8686},[34,52418,3182],{"class":40},[34,52420,52421,52424,52426],{"class":36,"line":8698},[34,52422,52423],{"class":40},"    \u003C\u002F",[34,52425,45],{"class":44},[34,52427,48],{"class":40},[34,52429,52430,52432,52434],{"class":36,"line":8710},[34,52431,102],{"class":40},[34,52433,51983],{"class":44},[34,52435,48],{"class":40},[34,52437,52438],{"class":36,"line":10369},[34,52439,3053],{"emptyLinePlaceholder":726},[34,52441,52442,52444,52447],{"class":36,"line":10394},[34,52443,41],{"class":40},[34,52445,52446],{"class":44},"body",[34,52448,48],{"class":40},[34,52450,52451],{"class":36,"line":10417},[34,52452,3053],{"emptyLinePlaceholder":726},[34,52454,52455,52457,52460],{"class":36,"line":10441},[34,52456,51990],{"class":40},[34,52458,52459],{"class":44},"script",[34,52461,48],{"class":40},[34,52463,52464],{"class":36,"line":10446},[34,52465,52466],{"class":205},"        \u002F\u002F 1. 四次弹框效果\n",[34,52468,52469],{"class":36,"line":10451},[34,52470,52471],{"class":205},"        \u002F\u002F 声明一个新的数组\n",[34,52473,52474,52477,52480,52482],{"class":36,"line":10456},[34,52475,52476],{"class":87},"        let",[34,52478,52479],{"class":40}," arr ",[34,52481,153],{"class":87},[34,52483,52484],{"class":40}," []\n",[34,52486,52487,52489,52491,52494,52496,52498,52500,52502,52504,52507,52509,52511],{"class":36,"line":10465},[34,52488,4056],{"class":87},[34,52490,2312],{"class":40},[34,52492,52493],{"class":87},"let",[34,52495,10091],{"class":40},[34,52497,153],{"class":87},[34,52499,25771],{"class":63},[34,52501,10098],{"class":40},[34,52503,2247],{"class":87},[34,52505,52506],{"class":63}," 4",[34,52508,3867],{"class":40},[34,52510,2945],{"class":87},[34,52512,13095],{"class":40},[34,52514,52515],{"class":36,"line":10470},[34,52516,52517],{"class":205},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[34,52519,52520],{"class":36,"line":10476},[34,52521,52522],{"class":205},"            \u002F\u002F arr.push(num)\n",[34,52524,52525,52528,52531,52533,52536,52538,52541,52543,52546],{"class":36,"line":10497},[34,52526,52527],{"class":40},"            arr.",[34,52529,52530],{"class":149},"push",[34,52532,801],{"class":40},[34,52534,52535],{"class":149},"prompt",[34,52537,801],{"class":40},[34,52539,52540],{"class":156},"`请输入第${",[34,52542,1236],{"class":40},[34,52544,52545],{"class":156},"}季度的数据:`",[34,52547,31148],{"class":40},[34,52549,52550],{"class":36,"line":10503},[34,52551,52552],{"class":205},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[34,52554,52555],{"class":36,"line":10517},[34,52556,3182],{"class":40},[34,52558,52559],{"class":36,"line":10523},[34,52560,52561],{"class":205},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[34,52563,52564],{"class":36,"line":10550},[34,52565,52566],{"class":205},"        \u002F\u002F 盒子开头\n",[34,52568,52569,52572,52575,52577,52580],{"class":36,"line":10559},[34,52570,52571],{"class":40},"        document.",[34,52573,52574],{"class":149},"write",[34,52576,801],{"class":40},[34,52578,52579],{"class":156},"` \u003Cdiv class=\"box\">`",[34,52581,807],{"class":40},[34,52583,52584],{"class":36,"line":10565},[34,52585,3053],{"emptyLinePlaceholder":726},[34,52587,52588],{"class":36,"line":10573},[34,52589,52590],{"class":205},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[34,52592,52593,52595,52597,52599,52601,52603,52605,52607,52609,52612,52615,52617,52619],{"class":36,"line":10578},[34,52594,4056],{"class":87},[34,52596,2312],{"class":40},[34,52598,52493],{"class":87},[34,52600,10091],{"class":40},[34,52602,153],{"class":87},[34,52604,4746],{"class":63},[34,52606,10098],{"class":40},[34,52608,41],{"class":87},[34,52610,52611],{"class":40}," arr.",[34,52613,52614],{"class":63},"length",[34,52616,3867],{"class":40},[34,52618,2945],{"class":87},[34,52620,13095],{"class":40},[34,52622,52623,52626,52628,52630],{"class":36,"line":17256},[34,52624,52625],{"class":40},"            document.",[34,52627,52574],{"class":149},[34,52629,801],{"class":40},[34,52631,52632],{"class":156},"`\n",[34,52634,52635,52638,52640,52642,52644,52646],{"class":36,"line":17262},[34,52636,52637],{"class":156},"              \u003Cdiv style=\"height: ${",[34,52639,4533],{"class":40},[34,52641,1684],{"class":156},[34,52643,1236],{"class":40},[34,52645,1733],{"class":156},[34,52647,52648],{"class":156},"}px;\">\n",[34,52650,52651,52654,52656,52658,52660,52662],{"class":36,"line":17285},[34,52652,52653],{"class":156},"                \u003Cspan>${",[34,52655,4533],{"class":40},[34,52657,1684],{"class":156},[34,52659,1236],{"class":40},[34,52661,1733],{"class":156},[34,52663,52664],{"class":156},"}\u003C\u002Fspan>\n",[34,52666,52667,52670,52672,52674,52676],{"class":36,"line":17291},[34,52668,52669],{"class":156},"                \u003Ch4>第${",[34,52671,1236],{"class":40},[34,52673,46217],{"class":87},[34,52675,25771],{"class":63},[34,52677,52678],{"class":156},"}季度\u003C\u002Fh4>\n",[34,52680,52681],{"class":36,"line":17314},[34,52682,52683],{"class":156},"              \u003C\u002Fdiv>          \n",[34,52685,52686,52689],{"class":36,"line":17328},[34,52687,52688],{"class":156},"            `",[34,52690,807],{"class":40},[34,52692,52693],{"class":36,"line":17348},[34,52694,3182],{"class":40},[34,52696,52697],{"class":36,"line":17354},[34,52698,52699],{"class":205},"        \u002F\u002F 盒子结尾\n",[34,52701,52702,52704,52706,52708,52711],{"class":36,"line":17365},[34,52703,52571],{"class":40},[34,52705,52574],{"class":149},[34,52707,801],{"class":40},[34,52709,52710],{"class":156},"` \u003C\u002Fdiv>`",[34,52712,807],{"class":40},[34,52714,52715,52717,52719],{"class":36,"line":17388},[34,52716,52423],{"class":40},[34,52718,52459],{"class":44},[34,52720,48],{"class":40},[34,52722,52723,52725,52727],{"class":36,"line":17410},[34,52724,102],{"class":40},[34,52726,52446],{"class":44},[34,52728,48],{"class":40},[34,52730,52731],{"class":36,"line":17415},[34,52732,3053],{"emptyLinePlaceholder":726},[34,52734,52735,52737,52739],{"class":36,"line":17421},[34,52736,102],{"class":40},[34,52738,51286],{"class":44},[34,52740,48],{"class":40},[19,52742,52744],{"id":52743},"_284-冒泡排序","2.8.4 冒泡排序",[24,52746,52748],{"className":51284,"code":52747,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,52749,52750,52760,52774,52778,52786,52801,52821,52833,52841,52845,52853,52861,52893,52926,52963,52968,52987,52992,53005,53020,53036,53040,53045,53049,53059,53068,53076,53080],{"__ignoreMap":29},[34,52751,52752,52754,52756,52758],{"class":36,"line":37},[34,52753,51948],{"class":40},[34,52755,51951],{"class":44},[34,52757,51954],{"class":149},[34,52759,48],{"class":40},[34,52761,52762,52764,52766,52768,52770,52772],{"class":36,"line":51},[34,52763,41],{"class":40},[34,52765,51286],{"class":44},[34,52767,51965],{"class":149},[34,52769,153],{"class":40},[34,52771,51970],{"class":156},[34,52773,48],{"class":40},[34,52775,52776],{"class":36,"line":60},[34,52777,3053],{"emptyLinePlaceholder":726},[34,52779,52780,52782,52784],{"class":36,"line":76},[34,52781,41],{"class":40},[34,52783,51983],{"class":44},[34,52785,48],{"class":40},[34,52787,52788,52791,52793,52795,52797,52799],{"class":36,"line":93},[34,52789,52790],{"class":40},"  \u003C",[34,52792,51993],{"class":44},[34,52794,51996],{"class":149},[34,52796,153],{"class":40},[34,52798,52001],{"class":156},[34,52800,48],{"class":40},[34,52802,52803,52805,52807,52809,52811,52813,52815,52817,52819],{"class":36,"line":99},[34,52804,52790],{"class":40},[34,52806,51993],{"class":44},[34,52808,15573],{"class":149},[34,52810,153],{"class":40},[34,52812,52040],{"class":156},[34,52814,52020],{"class":149},[34,52816,153],{"class":40},[34,52818,52047],{"class":156},[34,52820,48],{"class":40},[34,52822,52823,52825,52827,52829,52831],{"class":36,"line":353},[34,52824,52790],{"class":40},[34,52826,52056],{"class":44},[34,52828,52059],{"class":40},[34,52830,52056],{"class":44},[34,52832,48],{"class":40},[34,52834,52835,52837,52839],{"class":36,"line":359},[34,52836,102],{"class":40},[34,52838,51983],{"class":44},[34,52840,48],{"class":40},[34,52842,52843],{"class":36,"line":579},[34,52844,3053],{"emptyLinePlaceholder":726},[34,52846,52847,52849,52851],{"class":36,"line":589},[34,52848,41],{"class":40},[34,52850,52446],{"class":44},[34,52852,48],{"class":40},[34,52854,52855,52857,52859],{"class":36,"line":601},[34,52856,52790],{"class":40},[34,52858,52459],{"class":44},[34,52860,48],{"class":40},[34,52862,52863,52866,52868,52870,52873,52875,52877,52879,52881,52883,52885,52887,52889,52891],{"class":36,"line":613},[34,52864,52865],{"class":87},"    let",[34,52867,52479],{"class":40},[34,52869,153],{"class":87},[34,52871,52872],{"class":40}," [",[34,52874,1114],{"class":63},[34,52876,13088],{"class":40},[34,52878,1088],{"class":63},[34,52880,13088],{"class":40},[34,52882,869],{"class":63},[34,52884,13088],{"class":40},[34,52886,875],{"class":63},[34,52888,13088],{"class":40},[34,52890,1013],{"class":63},[34,52892,33897],{"class":40},[34,52894,52895,52897,52899,52901,52903,52905,52907,52909,52911,52913,52915,52918,52920,52922,52924],{"class":36,"line":618},[34,52896,3854],{"class":87},[34,52898,2312],{"class":40},[34,52900,52493],{"class":87},[34,52902,10091],{"class":40},[34,52904,153],{"class":87},[34,52906,4746],{"class":63},[34,52908,10098],{"class":40},[34,52910,41],{"class":87},[34,52912,52611],{"class":40},[34,52914,52614],{"class":63},[34,52916,52917],{"class":87}," -",[34,52919,25771],{"class":63},[34,52921,3867],{"class":40},[34,52923,2945],{"class":87},[34,52925,13095],{"class":40},[34,52927,52928,52931,52933,52935,52937,52939,52941,52943,52945,52947,52949,52951,52953,52955,52957,52959,52961],{"class":36,"line":628},[34,52929,52930],{"class":87},"      for",[34,52932,2312],{"class":40},[34,52934,52493],{"class":87},[34,52936,10153],{"class":40},[34,52938,153],{"class":87},[34,52940,4746],{"class":63},[34,52942,10160],{"class":40},[34,52944,41],{"class":87},[34,52946,52611],{"class":40},[34,52948,52614],{"class":63},[34,52950,52917],{"class":87},[34,52952,10091],{"class":40},[34,52954,1327],{"class":87},[34,52956,25771],{"class":63},[34,52958,10167],{"class":40},[34,52960,2945],{"class":87},[34,52962,13095],{"class":40},[34,52964,52965],{"class":36,"line":640},[34,52966,52967],{"class":205},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[34,52969,52970,52972,52975,52977,52980,52982,52984],{"class":36,"line":2301},[34,52971,3150],{"class":87},[34,52973,52974],{"class":40}," (arr[j] ",[34,52976,1753],{"class":87},[34,52978,52979],{"class":40}," arr[j ",[34,52981,1276],{"class":87},[34,52983,25771],{"class":63},[34,52985,52986],{"class":40},"]) {\n",[34,52988,52989],{"class":36,"line":2307},[34,52990,52991],{"class":205},"          \u002F\u002F 交换两个变量\n",[34,52993,52994,52997,53000,53002],{"class":36,"line":2328},[34,52995,52996],{"class":87},"          let",[34,52998,52999],{"class":40}," tmp ",[34,53001,153],{"class":87},[34,53003,53004],{"class":40}," arr[j]\n",[34,53006,53007,53010,53012,53014,53016,53018],{"class":36,"line":2333},[34,53008,53009],{"class":40},"          arr[j] ",[34,53011,153],{"class":87},[34,53013,52979],{"class":40},[34,53015,1276],{"class":87},[34,53017,25771],{"class":63},[34,53019,33897],{"class":40},[34,53021,53022,53025,53027,53029,53031,53033],{"class":36,"line":2347},[34,53023,53024],{"class":40},"          arr[j ",[34,53026,1276],{"class":87},[34,53028,25771],{"class":63},[34,53030,5096],{"class":40},[34,53032,153],{"class":87},[34,53034,53035],{"class":40}," tmp\n",[34,53037,53038],{"class":36,"line":2352},[34,53039,3182],{"class":40},[34,53041,53042],{"class":36,"line":2381},[34,53043,53044],{"class":40},"      }\n",[34,53046,53047],{"class":36,"line":2386},[34,53048,2840],{"class":40},[34,53050,53051,53054,53056],{"class":36,"line":2403},[34,53052,53053],{"class":40},"    document.",[34,53055,52574],{"class":149},[34,53057,53058],{"class":40},"(arr)\n",[34,53060,53061,53064,53066],{"class":36,"line":2408},[34,53062,53063],{"class":40},"  \u003C\u002F",[34,53065,52459],{"class":44},[34,53067,48],{"class":40},[34,53069,53070,53072,53074],{"class":36,"line":2413},[34,53071,102],{"class":40},[34,53073,52446],{"class":44},[34,53075,48],{"class":40},[34,53077,53078],{"class":36,"line":2418},[34,53079,3053],{"emptyLinePlaceholder":726},[34,53081,53082,53084,53086],{"class":36,"line":2432},[34,53083,102],{"class":40},[34,53085,51286],{"class":44},[34,53087,48],{"class":40},[108,53089,53090],{},[2122,53091],{"alt":29,"src":53092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[108,53094,53095],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[108,53097,53098],{},"let arr = [4, 2, 5, 1, 3]",[108,53100,53101],{},"\u002F\u002F 1.升序排列写法",[108,53103,53104],{},"arr.sort(function (a, b) {",[108,53106,53107],{},"return a - b",[108,53109,53110],{},"})",[108,53112,53113],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[108,53115,53116],{},"\u002F\u002F 降序排列写法",[108,53118,53104],{},[108,53120,53121],{},"return b - a",[108,53123,53110],{},[108,53125,53126],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53128,53130],{"id":53129},"_29-函数","2.9 函数",[108,53132,53133],{},[2122,53134],{"alt":29,"src":53135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[108,53137,53138],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[108,53140,53141],{},"函数的声明用function",[108,53143,53144],{},"函数里边可以嵌套函数",[19,53146,53148],{"id":53147},"_291-函数传参","2.9.1 函数传参",[108,53150,53151],{},[2122,53152],{"alt":29,"src":53153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[108,53155,53156],{},[2122,53157],{"alt":29,"src":53158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1800,53160,53161,53164,53167,53170,53173,53176],{},[755,53162,53163],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[755,53165,53166],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[755,53168,53169],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[755,53171,53172],{},"开发中尽量保持形参和实参个数一致",[755,53174,53175],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[755,53177,53178],{},"形参只在函数中有用，所以不需要进行声明这个变量",[108,53180,53181],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[19,53183,53185],{"id":53184},"_292-函数的返回值","2.9.2 函数的返回值",[108,53187,53188],{},[2122,53189],{"alt":29,"src":53190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[108,53192,53193],{},[2122,53194],{"alt":29,"src":53195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1800,53197,53198,53201,53204,53207,53210],{},[755,53199,53200],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[755,53202,53203],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[755,53205,53206],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[755,53208,53209],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[755,53211,53212],{},"断点调试:进入函数内部看执行过程F11",[19,53214,53216],{"id":53215},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[24,53218,53220],{"className":51284,"code":53219,"language":51286,"meta":29,"style":29},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[31,53221,53222,53227,53232,53236,53241],{"__ignoreMap":29},[34,53223,53224],{"class":36,"line":37},[34,53225,53226],{"class":40},"    function fn(a, b) {\n",[34,53228,53229],{"class":36,"line":51},[34,53230,53231],{"class":40},"      console.log(a + b);\n",[34,53233,53234],{"class":36,"line":60},[34,53235,2840],{"class":40},[34,53237,53238],{"class":36,"line":76},[34,53239,53240],{"class":40},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[34,53242,53243],{"class":36,"line":93},[34,53244,53245],{"class":40},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[19,53247,53249],{"id":53248},"_294-作用域","2.9.4 作用域",[1800,53251,53252,53258,53263,53266,53269],{},[755,53253,53254,53255],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[111,53256,53257],{},"作用域",[755,53259,53260],{},[111,53261,53262],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[755,53264,53265],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[755,53267,53268],{},"函数内部可以直接所使用全局变量",[755,53270,53271],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[108,53273,15286],{},[24,53275,53277],{"className":51284,"code":53276,"language":51286,"meta":29,"style":29},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[31,53278,53279,53284,53289,53293,53298,53303,53308],{"__ignoreMap":29},[34,53280,53281],{"class":36,"line":37},[34,53282,53283],{"class":40},"    function fun() {\n",[34,53285,53286],{"class":36,"line":51},[34,53287,53288],{"class":40},"      num = 10\n",[34,53290,53291],{"class":36,"line":60},[34,53292,2840],{"class":40},[34,53294,53295],{"class":36,"line":76},[34,53296,53297],{"class":40},"    fun()\n",[34,53299,53300],{"class":36,"line":93},[34,53301,53302],{"class":40},"    console.log(num)\n",[34,53304,53305],{"class":36,"line":99},[34,53306,53307],{"class":40},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[34,53309,53310],{"class":36,"line":353},[34,53311,53312],{"class":40},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1800,53314,53315,53318],{},[755,53316,53317],{},"函数内部的形参可以看做是局部变量",[755,53319,53320],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[108,53322,53323,53324],{},"变量访问原则： ",[111,53325,53326],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[19,53328,53330],{"id":53329},"_295-匿名函数","2.9.5 匿名函数",[108,53332,53333],{},"函数可以分为具名函数和匿名函数",[108,53335,53336],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[752,53338,53339],{},[755,53340,53341],{},"函数表达式",[108,53343,53344],{},[2122,53345],{"alt":29,"src":53346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[108,53348,53349],{},"里边也可以写参数",[108,53351,53352],{},"具名函数调用位置可以随意调整；",[108,53354,53355],{},"匿名函数函数表达式形式只能在声明后才可以使用",[752,53357,53358],{"start":51},[755,53359,53360],{},"立即执行函数",[108,53362,53363],{},[2122,53364],{"alt":29,"src":53365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[108,53367,53368],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[108,53370,53371],{},"写法：两个小括号，然后在第一个小括号中写function",[108,53373,53374],{},"(function () {})();",[108,53376,53377],{},"不要落下最后的;",[108,53379,53380],{},"立即执行函数必须要加;",[108,53382,53383],{},"分号写前写后都没问题",[108,53385,53386],{},"写前：",[108,53388,53389],{},"(function() {})()",[108,53391,53392],{},";(function () {})();",[108,53394,53395],{},"写后:",[108,53397,53398],{},"(function() {})();",[108,53400,53374],{},[108,53402,53403],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[108,53405,53406],{},"还有一种写法：",[108,53408,53409],{},"(function(){}());",[108,53411,53412],{},"或者:",[108,53414,53415],{},"!function(){}();",[108,53417,53418],{},"立即执行函数有时候也是可以加名字的：",[108,53420,53421],{},"(function flexible(window,document) {}(window,document));",[108,53423,53424],{},"省一些调用方法",[19,53426,53428],{"id":53427},"_296-逻辑中断","2.9.6 逻辑中断!!!",[108,53430,53431],{},[2122,53432],{"alt":29,"src":53433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[108,53435,53436],{},"这样就不用非得给x,y初始化了",[108,53438,53439],{},[2122,53440],{"alt":29,"src":53441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[108,53443,53444],{},"代码执行时先看左边",[108,53446,53447],{},"例如：console.log(false && 3+5)",[108,53449,53450],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[108,53452,53453],{},"&&都是真时，就返回最后一个真值",[108,53455,53456],{},"console.log(11 && 22)",[108,53458,53459],{},"输出22",[108,53461,53462],{},"逻辑与：遇真则真",[108,53464,15286],{},[108,53466,53467],{},"let age=1",[108,53469,53470],{},"console.log(11 || age++)",[108,53472,53473],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[108,53475,53476],{},"console.log(11 || 22)",[108,53478,53479],{},"||逻辑或遇到真就直接输出，输出结果为11",[108,53481,53482],{},"||如果都是假的话，就取最后一个假的值了",[19,53484,53486],{"id":53485},"_297-转换为boolean型","2.9.7 转换为Boolean型",[108,53488,53489],{},"显示转换：",[108,53491,53492,53495,53496],{},[111,53493,53494],{},"记忆","： ",[111,53497,53498],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[108,53500,53501],{},"空字符串为假，其他字符串全为真",[108,53503,53504],{},[2122,53505],{"alt":29,"src":53506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[108,53508,53509],{},"隐式转换：",[108,53511,53512],{},[2122,53513],{"alt":29,"src":53514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[108,53516,53517],{},"隐式转换:",[108,53519,53520],{},"null+3=3",[108,53522,53523],{},"undefined+3=NaN",[108,53525,53526],{},"null==undefined 输出true,他两个都当0看",[108,53528,53529],{},"null===undefined 输出false",[108,53531,53532],{},"undefined做任何操作都是NaN",[108,53534,53535],{},"NaN不等于NaN，NaN表示计算错误",[14,53537,53539],{"id":53538},"_210-对象","2.10 对象",[19,53541,53543],{"id":53542},"_2101-对象的介绍","2.10.1 对象的介绍",[108,53545,53546],{},"对象也是一种数据类型，里边的数据是无序的",[108,53548,53549],{},"对象由属性和方法组成",[108,53551,53552],{},[2122,53553],{"alt":29,"src":53554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[108,53556,53557],{},[2122,53558],{"alt":29,"src":53559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[108,53561,53562],{},[2122,53563],{"alt":29,"src":53564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[19,53566,53568],{"id":53567},"_2102-对象属性","2.10.2 对象属性",[108,53570,53571],{},[2122,53572],{"alt":29,"src":53573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[752,53575,53576],{},[755,53577,53578],{},"查询对象",[108,53580,53581],{},"对象名.属性 goods.uname",[108,53583,53584],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[108,53586,53587],{},"不带字符串的属性名也可以使用 对象名['属性名']",[108,53589,53590],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[108,53592,53593],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[752,53595,53596],{"start":51},[755,53597,53598],{},"重新赋值",[108,53600,53601],{},"对象名.属性=新值",[752,53603,53604],{"start":60},[755,53605,53606],{},"增加新数据",[108,53608,53601],{},[752,53610,53611],{"start":76},[755,53612,53613],{},"删除对象中的属性",[108,53615,53616],{},"delete 对象名.属性",[19,53618,53620],{"id":53619},"_2103-对象方法","2.10.3 对象方法",[108,53622,53623],{},[2122,53624],{"alt":29,"src":53625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[108,53627,53628],{},"后边跟的是匿名函数",[108,53630,53631],{},"对象外面的叫函数；对象内部的叫方法",[108,53633,53634],{},[2122,53635],{"alt":29,"src":53636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[19,53638,53640],{"id":53639},"_2104-遍历对象","2.10.4 遍历对象",[108,53642,53643],{},"理解为加括号的python字典遍历",[108,53645,53646],{},[2122,53647],{"alt":29,"src":53648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[108,53650,53651],{},"k是字符串类型",[108,53653,53654],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[24,53656,53658],{"className":51284,"code":53657,"language":51286,"meta":29,"style":29},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[31,53659,53660,53665,53670,53675,53680],{"__ignoreMap":29},[34,53661,53662],{"class":36,"line":37},[34,53663,53664],{"class":40},"   let arr = [1, 2, 3]\n",[34,53666,53667],{"class":36,"line":51},[34,53668,53669],{"class":40},"    for (let k in arr) {\n",[34,53671,53672],{"class":36,"line":60},[34,53673,53674],{"class":40},"      console.log(k)\n",[34,53676,53677],{"class":36,"line":76},[34,53678,53679],{"class":40},"      console.log(arr[k])\n",[34,53681,53682],{"class":36,"line":93},[34,53683,2840],{"class":40},[108,53685,53686],{},[2122,53687],{"alt":29,"src":53688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[108,53690,53691],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[108,53693,53694],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[108,53696,53697],{},"for in 得到的k是属性名",[52459,53699,53700],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[108,53702,53703],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[19,53705,53707],{"id":53706},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[108,53709,53710],{},"数组中放对象信息",[24,53712,53716],{"className":53713,"code":53714,"language":53715,"meta":29,"style":29},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[31,53717,53718,53726,53731,53736,53741,53746,53751,53756,53761,53766,53771,53776,53781,53785,53789],{"__ignoreMap":29},[34,53719,53720,53722,53724],{"class":36,"line":37},[34,53721,41],{"class":40},[34,53723,52459],{"class":44},[34,53725,48],{"class":40},[34,53727,53728],{"class":36,"line":51},[34,53729,53730],{"class":40},"    let students = [\n",[34,53732,53733],{"class":36,"line":60},[34,53734,53735],{"class":40},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[34,53737,53738],{"class":36,"line":76},[34,53739,53740],{"class":40},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[34,53742,53743],{"class":36,"line":93},[34,53744,53745],{"class":40},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[34,53747,53748],{"class":36,"line":99},[34,53749,53750],{"class":40},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[34,53752,53753],{"class":36,"line":353},[34,53754,53755],{"class":40},"    ]\n",[34,53757,53758],{"class":36,"line":359},[34,53759,53760],{"class":40},"    for (let i = 0; i \u003C students.length; i++) {\n",[34,53762,53763],{"class":36,"line":579},[34,53764,53765],{"class":40},"      for (let k in students[i]) {\n",[34,53767,53768],{"class":36,"line":589},[34,53769,53770],{"class":40},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[34,53772,53773],{"class":36,"line":601},[34,53774,53775],{"class":40},"        \u002F\u002F输出每个人的名字：\n",[34,53777,53778],{"class":36,"line":613},[34,53779,53780],{"class":40},"        \u002F\u002Fconsole.log(students[i].name)\n",[34,53782,53783],{"class":36,"line":618},[34,53784,53044],{"class":40},[34,53786,53787],{"class":36,"line":628},[34,53788,2840],{"class":40},[34,53790,53791,53793,53795],{"class":36,"line":640},[34,53792,53063],{"class":40},[34,53794,52459],{"class":44},[34,53796,48],{"class":40},[19,53798,53800],{"id":53799},"_2106-内置对象","2.10.6 内置对象",[108,53802,53803],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[752,53805,53806],{},[755,53807,53808],{},"数学对象Math",[108,53810,53811],{},[2122,53812],{"alt":29,"src":53813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[108,53815,53816],{},[520,53817,53820],{"href":53818,"rel":53819},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24517],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[108,53822,53823],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[108,53825,53826],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[108,53828,53829],{},"数组不可以使用Math中的max,min来求最大值与最小值",[108,53831,53832],{},"null是一个空对象，可以认为：null类似于let obj={}",[108,53834,53835],{},"null属于对象数据类型",[752,53837,53838],{"start":51},[755,53839,53840],{},"生成任意范围随机数",[108,53842,53843],{},[2122,53844],{"alt":29,"src":53845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[108,53847,53848],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[108,53850,53851],{},"乘以几就取不到几",[108,53853,53854],{},"取数组中的随机元素：",[108,53856,53857],{},"let arr = ['red', 'green', 'blue']",[108,53859,53860],{},"let random = Math.floor(Math.random() * arr.length)",[108,53862,53863],{},"console.log(arr[random])",[108,53865,53866],{},"这个函数得到的是全闭区间",[108,53868,53869],{},"function getRandom(N, M) {",[108,53871,53872],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[108,53874,1739],{},[108,53876,53877],{},"console.log(getRandom(4, 8))",[19,53879,53881],{"id":53880},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[108,53883,53884],{},[2122,53885],{"alt":29,"src":53886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[108,53888,53889],{},[2122,53890],{"alt":29,"src":53891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[108,53893,53894],{},[2122,53895],{"alt":29,"src":53896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[108,53898,53899],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[108,53901,53902],{},[2122,53903],{"alt":29,"src":53904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[108,53906,53907],{},[2122,53908],{"alt":29,"src":53909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[108,53911,53912],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[108,53914,53915],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[108,53917,53918],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[45,53920,53921],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":53923},[53924,53932,53933,53934,53935,53936,53943,53947,53953,53962],{"id":51119,"depth":51,"text":51120,"children":53925},[53926,53927,53928,53929,53930,53931],{"id":51123,"depth":60,"text":51124},{"id":51140,"depth":60,"text":51141},{"id":51180,"depth":60,"text":51181},{"id":51192,"depth":60,"text":51193},{"id":51201,"depth":60,"text":51202},{"id":51249,"depth":60,"text":51250},{"id":51259,"depth":51,"text":51260},{"id":51347,"depth":51,"text":51348},{"id":51370,"depth":51,"text":51371},{"id":51382,"depth":51,"text":51383},{"id":51569,"depth":51,"text":51570,"children":53937},[53938,53939,53940,53941,53942],{"id":51573,"depth":60,"text":51574},{"id":51582,"depth":60,"text":51583},{"id":51610,"depth":60,"text":51611},{"id":51646,"depth":60,"text":51647},{"id":51671,"depth":60,"text":51672},{"id":51683,"depth":51,"text":51684,"children":53944},[53945,53946],{"id":51704,"depth":60,"text":51705},{"id":51798,"depth":60,"text":51799},{"id":51856,"depth":51,"text":51857,"children":53948},[53949,53950,53951,53952],{"id":51860,"depth":60,"text":51861},{"id":51884,"depth":60,"text":51885},{"id":51937,"depth":60,"text":51938},{"id":52743,"depth":60,"text":52744},{"id":53129,"depth":51,"text":53130,"children":53954},[53955,53956,53957,53958,53959,53960,53961],{"id":53147,"depth":60,"text":53148},{"id":53184,"depth":60,"text":53185},{"id":53215,"depth":60,"text":53216},{"id":53248,"depth":60,"text":53249},{"id":53329,"depth":60,"text":53330},{"id":53427,"depth":60,"text":53428},{"id":53485,"depth":60,"text":53486},{"id":53538,"depth":51,"text":53539,"children":53963},[53964,53965,53966,53967,53968,53969,53970],{"id":53542,"depth":60,"text":53543},{"id":53567,"depth":60,"text":53568},{"id":53619,"depth":60,"text":53620},{"id":53639,"depth":60,"text":53640},{"id":53706,"depth":60,"text":53707},{"id":53799,"depth":60,"text":53800},{"id":53880,"depth":60,"text":53881},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51111,"description":723},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53977,"title":53978,"body":53979,"description":723,"extension":724,"meta":77304,"navigation":726,"path":77305,"seo":77306,"stem":77307,"__hash__":77308},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53980,"toc":77244},[53981,53984,53987,53990,53995,53998,54001,54004,54008,54012,54018,54023,54031,54038,54041,54045,54050,54055,54060,54063,54066,54077,54080,54084,54087,54090,54095,54100,54105,54108,54111,54203,54206,54211,54214,54219,54222,54225,54230,54233,54238,54242,54245,54259,54263,54268,54271,54274,54278,54283,54286,54290,54294,54299,54303,54308,54311,54314,54317,54320,54323,54326,54331,54336,54364,54367,54370,54373,54378,54381,54384,54387,54390,54394,54423,54427,54432,54437,54440,54443,54446,54451,54565,54570,54575,54736,54741,54744,54748,54753,54758,54761,54764,54767,54770,54773,54776,54779,54782,54785,54788,54791,54794,54797,54800,54802,54805,54808,54811,54816,54820,55217,55220,55226,55230,55235,56515,56520,56523,56526,56529,56534,57730,57734,57740,57745,57748,57753,57758,57762,57766,57771,57774,57779,57782,57785,57789,58697,58700,58704,58925,58928,58931,58934,59160,59163,59387,59390,59394,59399,59402,59405,59633,59636,59669,59672,59676,59681,59685,59688,59691,59694,59697,59700,59703,59706,59711,60991,60995,60998,62089,62093,62096,62099,62102,62105,62109,62112,62115,62117,62125,63603,63607,63610,63613,63616,63825,63828,63832,63836,63841,63846,63849,63852,63857,63861,63866,63869,63978,63982,63987,63992,63995,63998,64002,64007,64012,64017,64020,64023,64034,64037,64042,64047,64050,64053,64126,64130,64135,64138,64140,64151,64155,64160,65486,65489,65492,65495,65497,65500,65503,65506,65509,65512,65515,65518,65521,65524,65527,65530,65533,65535,65537,65540,65544,66638,66641,66644,66660,66674,66677,66682,66688,66693,66697,66701,66706,66710,66715,67157,67162,67165,67169,67174,67177,67180,67184,67189,67193,67198,67203,67207,67212,67217,67220,67225,67230,67234,67239,67244,67348,67351,67355,67360,67726,67729,67732,67735,67738,67741,67744,67747,67750,69046,69050,69055,69060,69063,69066,69069,69072,69074,69079,69084,69087,69091,69096,69101,69106,69109,69112,69115,69118,69121,69126,69129,69133,69138,69143,69147,69152,69155,69160,69163,69166,69169,69172,69175,69180,69183,69186,69189,69192,69196,69201,69204,69208,69213,69216,69219,69223,69252,69255,69259,69263,69268,69272,69277,69280,69283,69286,69289,69292,69295,69298,69301,69304,69307,69310,69313,69316,69319,69323,69328,69333,69336,69340,69344,69349,69352,69356,69359,69362,69367,69372,69377,69382,69387,69390,69393,69398,69403,69407,69412,69415,69420,69423,69426,69429,69432,69437,69440,69449,69453,69458,69461,69464,69468,69471,69476,69480,69483,69489,69495,69499,69525,69528,71086,71089,71581,71584,71589,71594,71599,71603,71608,71613,71618,71622,71627,71630,71633,71636,71639,71643,71646,71651,71654,71659,71663,71668,71671,71676,71681,71686,71689,71692,71697,71702,71705,71708,71712,71715,71720,71723,71728,71731,71736,71741,71746,71749,71754,71819,71822,71833,71837,71842,72014,72018,72023,72026,72029,72032,72036,72047,72051,72054,72059,72064,72067,72070,72073,72076,72079,72081,72084,72087,72090,72095,72098,72103,72106,72110,72113,72116,72130,72134,72137,72192,72197,72200,72203,72208,72211,72215,72220,72350,72354,72359,72364,72445,72450,72454,72457,72462,72467,72473,72476,72479,72482,72486,72491,72494,72505,72509,72526,75573,75577,75580,75583,75586,75607,75611,75614,75622,75625,75630,75633,75636,75641,75646,75650,75671,75675,75680,75683,75686,75689,75692,75696,75701,75704,75708,75713,75716,75721,75724,75729,75732,75737,76940,76944,76949,76952,76957,77241],[10,53982,53978],{"id":53983},"_3web-apis",[108,53985,53986],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[108,53988,53989],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[108,53991,53992],{},[2122,53993],{"alt":29,"src":53994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[108,53996,53997],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[108,53999,54000],{},"建议数组和对象使用 const 来声明",[108,54002,54003],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54005,54007],{"id":54006},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[19,54009,54011],{"id":54010},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[108,54013,54014,54017],{},[31,54015,54016],{},"document"," = HTML 文件解析后的对象化表示；",[108,54019,54020,54022],{},[31,54021,54016],{}," ≠ HTML 文件本身",[108,54024,54025,54030],{},[111,54026,54027],{},[31,54028,54029],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[108,54032,54033,54037],{},[111,54034,54035],{},[31,54036,54016],{}," ：容器里的内容，代表当前加载的网页（DOM）",[108,54039,54040],{},"document实际上为window.document的简写",[19,54042,54044],{"id":54043},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[108,54046,54047],{},[2122,54048],{"alt":29,"src":54049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[108,54051,54052],{},[2122,54053],{"alt":29,"src":54054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[108,54056,54057],{},[2122,54058],{"alt":29,"src":54059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[108,54061,54062],{},"console.dir()",[108,54064,54065],{},"dir用来打印对象",[1800,54067,54068,54071,54074],{},[755,54069,54070],{},"任何一个标签，都是一个对象",[755,54072,54073],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[755,54075,54076],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[108,54078,54079],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[19,54081,54083],{"id":54082},"_312-获取dom对象","3.1.2 获取DoM对象",[108,54085,54086],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[108,54088,54089],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[108,54091,54092],{},[111,54093,54094],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[752,54096,54097],{},[755,54098,54099],{},"利用CSS选择器来获取标签元素",[108,54101,54102],{},[2122,54103],{"alt":29,"src":54104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[108,54106,54107],{},"里边的选择器必须必须加引号！！！",[108,54109,54110],{},"只选择第一个元素",[24,54112,54114],{"className":53713,"code":54113,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,54115,54116,54124,54145,54164,54172,54177,54182,54187,54195],{"__ignoreMap":29},[34,54117,54118,54120,54122],{"class":36,"line":37},[34,54119,41],{"class":40},[34,54121,52446],{"class":44},[34,54123,48],{"class":40},[34,54125,54126,54128,54130,54133,54135,54138,54141,54143],{"class":36,"line":51},[34,54127,52790],{"class":40},[34,54129,52258],{"class":44},[34,54131,54132],{"class":149}," class",[34,54134,153],{"class":40},[34,54136,54137],{"class":156},"\"box\"",[34,54139,54140],{"class":40},">123\u003C\u002F",[34,54142,52258],{"class":44},[34,54144,48],{"class":40},[34,54146,54147,54149,54151,54153,54155,54157,54160,54162],{"class":36,"line":60},[34,54148,52790],{"class":40},[34,54150,52258],{"class":44},[34,54152,54132],{"class":149},[34,54154,153],{"class":40},[34,54156,54137],{"class":156},[34,54158,54159],{"class":40},">456\u003C\u002F",[34,54161,52258],{"class":44},[34,54163,48],{"class":40},[34,54165,54166,54168,54170],{"class":36,"line":76},[34,54167,52790],{"class":40},[34,54169,52459],{"class":44},[34,54171,48],{"class":40},[34,54173,54174],{"class":36,"line":93},[34,54175,54176],{"class":40},"    \u002F\u002F 1.获取匹配的第一个元素\n",[34,54178,54179],{"class":36,"line":99},[34,54180,54181],{"class":40},"    const box = document.querySelector('div')\n",[34,54183,54184],{"class":36,"line":353},[34,54185,54186],{"class":40},"    console.dir(box)\n",[34,54188,54189,54191,54193],{"class":36,"line":359},[34,54190,53063],{"class":40},[34,54192,52459],{"class":44},[34,54194,48],{"class":40},[34,54196,54197,54199,54201],{"class":36,"line":579},[34,54198,102],{"class":40},[34,54200,52446],{"class":44},[34,54202,48],{"class":40},[108,54204,54205],{},"只选123，不选456",[108,54207,54208],{},[2122,54209],{"alt":29,"src":54210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[108,54212,54213],{},"返回的是一个数组的集合，不能对其进行直接修改",[108,54215,54216],{},[2122,54217],{"alt":29,"src":54218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[108,54220,54221],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[108,54223,54224],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[752,54226,54227],{"start":51},[755,54228,54229],{},"其他方法来获取标签元素",[108,54231,54232],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[108,54234,54235],{},[2122,54236],{"alt":29,"src":54237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[19,54239,54241],{"id":54240},"_313-操作元素的内容","3.1.3 操作元素的内容",[108,54243,54244],{},"设置修改DOM元素内容有两种方式：",[1800,54246,54247,54250,54253,54256],{},[755,54248,54249],{},"元素.innerText=''",[755,54251,54252],{},"元素.innerHTML=''",[755,54254,54255],{},"不写字符串输出数字也是可以的",[755,54257,54258],{},"元素.innerHtml=1",[22650,54260,54262],{"id":54261},"_3131-innertext","3.1.3.1 innerText",[108,54264,54265],{},[2122,54266],{"alt":29,"src":54267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[108,54269,54270],{},"思路：实现了修改盒子中的内容！",[108,54272,54273],{},"它只显示纯文本，不解析标签",[22650,54275,54277],{"id":54276},"_3132-innerhtml","3.1.3.2 innerHTML",[108,54279,54280],{},[2122,54281],{"alt":29,"src":54282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[108,54284,54285],{},"相比于innerText，他的强大之处在于可以解析标签",[19,54287,54289],{"id":54288},"_314-操作元素属性","3.1.4 操作元素属性",[22650,54291,54293],{"id":54292},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[108,54295,54296],{},[2122,54297],{"alt":29,"src":54298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22650,54300,54302],{"id":54301},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[108,54304,54305],{},[2122,54306],{"alt":29,"src":54307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[108,54309,54310],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[108,54312,54313],{},"div.style.backgroundColor = 'hotpink'",[108,54315,54316],{},"如果按照css的写法，-表示减，就会出错",[108,54318,54319],{},"body元素不需要再获取，直接用就行！！！！！！",[108,54321,54322],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[108,54324,54325],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[108,54327,54328],{},[2122,54329],{"alt":29,"src":54330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[108,54332,54333],{},[2122,54334],{"alt":29,"src":54335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[752,54337,54338,54341,54344,54347,54350,54353],{},[755,54339,54340],{},"className这个方式就是修改很多样式的时候来使用的！",[755,54342,54343],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[755,54345,54346],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[755,54348,54349],{},"className为属性名，如果还用class的话就导致与关键字冲突",[755,54351,54352],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[755,54354,54355,54356,54361],{},"解析标签的时候就变为了",[52258,54357],{"className":54358},[54359,54360],"nav","box",[54362,54363],"br",{},[108,54365,54366],{},"例子：",[52258,54368],{"className":54369},[54359],[52459,54371,54372],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[108,54374,54375],{},[2122,54376],{"alt":29,"src":54377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[108,54379,54380],{},"追加和删除类名用classList",[108,54382,54383],{},"常用于类似于开关的操作",[108,54385,54386],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[108,54388,54389],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22650,54391,54393],{"id":54392},"_3143-牢记点","3.1.4.3 牢记点",[752,54395,54396,54399,54402,54405,54408,54411,54414,54417,54420],{},[755,54397,54398],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[755,54400,54401],{},"使用style属性操作css时不要忘记引号",[755,54403,54404],{},"使用className或者classList时也不要忘记引号",[755,54406,54407],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[755,54409,54410],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[755,54412,54413],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[755,54415,54416],{},"若： let arr=['1','2',3] arr[0]=1",[755,54418,54419],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[755,54421,54422],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[19,54424,54426],{"id":54425},"_315-操作表单元素","3.1.5 操作表单元素",[752,54428,54429],{},[755,54430,54431],{},"天生的属性",[108,54433,54434],{},[2122,54435],{"alt":29,"src":54436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[108,54438,54439],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[108,54441,54442],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[108,54444,54445],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[108,54447,54448],{},[2122,54449],{"alt":29,"src":54450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[24,54452,54454],{"className":51284,"code":54453,"language":51286,"meta":29,"style":29},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[31,54455,54456,54461,54492,54497,54502,54507,54512,54516,54521,54526,54543,54555,54560],{"__ignoreMap":29},[34,54457,54458],{"class":36,"line":37},[34,54459,54460],{"class":40},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[34,54462,54463,54465,54467,54470,54472,54475,54477,54479,54481,54483,54485,54487,54490],{"class":36,"line":51},[34,54464,41],{"class":40},[34,54466,669],{"class":44},[34,54468,54469],{"class":149}," type",[34,54471,153],{"class":40},[34,54473,54474],{"class":156},"\"checkbox\"",[34,54476,15573],{"class":149},[34,54478,153],{"class":40},[34,54480,8305],{"class":156},[34,54482,15612],{"class":149},[34,54484,153],{"class":40},[34,54486,8305],{"class":156},[34,54488,54489],{"class":149}," checked",[34,54491,48],{"class":40},[34,54493,54494],{"class":36,"line":60},[34,54495,54496],{"class":40},"不选的话：\n",[34,54498,54499],{"class":36,"line":76},[34,54500,54501],{"class":40},"const input = document.querySelector('input')\n",[34,54503,54504],{"class":36,"line":93},[34,54505,54506],{"class":40},"input.checked=false\n",[34,54508,54509],{"class":36,"line":99},[34,54510,54511],{"class":40},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[34,54513,54514],{"class":36,"line":353},[34,54515,3053],{"emptyLinePlaceholder":726},[34,54517,54518],{"class":36,"line":359},[34,54519,54520],{"class":40},"禁用按钮：\n",[34,54522,54523],{"class":36,"line":579},[34,54524,54525],{"class":40},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[34,54527,54528,54530,54533,54536,54539,54541],{"class":36,"line":589},[34,54529,41],{"class":40},[34,54531,54532],{"class":44},"button",[34,54534,54535],{"class":149}," disabled",[34,54537,54538],{"class":40},">点击\u003C\u002F",[34,54540,54532],{"class":44},[34,54542,48],{"class":40},[34,54544,54545,54547,54549,54551,54553],{"class":36,"line":601},[34,54546,41],{"class":40},[34,54548,54532],{"class":44},[34,54550,54538],{"class":40},[34,54552,54532],{"class":44},[34,54554,48],{"class":40},[34,54556,54557],{"class":36,"line":613},[34,54558,54559],{"class":40},"const bt = document.querySelector('button')\n",[34,54561,54562],{"class":36,"line":618},[34,54563,54564],{"class":40},"bt.disabled = false\n",[752,54566,54567],{"start":51},[755,54568,54569],{},"自定义属性",[108,54571,54572],{},[2122,54573],{"alt":29,"src":54574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[24,54576,54578],{"className":53713,"code":54577,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,54579,54580,54588,54616,54635,54654,54673,54692,54700,54705,54710,54715,54720,54728],{"__ignoreMap":29},[34,54581,54582,54584,54586],{"class":36,"line":37},[34,54583,41],{"class":40},[34,54585,52446],{"class":44},[34,54587,48],{"class":40},[34,54589,54590,54592,54594,54597,54599,54601,54604,54606,54609,54612,54614],{"class":36,"line":51},[34,54591,52790],{"class":40},[34,54593,52258],{"class":44},[34,54595,54596],{"class":149}," data-id",[34,54598,153],{"class":40},[34,54600,4331],{"class":156},[34,54602,54603],{"class":149}," data-spm",[34,54605,153],{"class":40},[34,54607,54608],{"class":156},"\"我不知道\"",[34,54610,54611],{"class":40},">1\u003C\u002F",[34,54613,52258],{"class":44},[34,54615,48],{"class":40},[34,54617,54618,54620,54622,54624,54626,54628,54631,54633],{"class":36,"line":60},[34,54619,52790],{"class":40},[34,54621,52258],{"class":44},[34,54623,54596],{"class":149},[34,54625,153],{"class":40},[34,54627,4354],{"class":156},[34,54629,54630],{"class":40},">2\u003C\u002F",[34,54632,52258],{"class":44},[34,54634,48],{"class":40},[34,54636,54637,54639,54641,54643,54645,54647,54650,54652],{"class":36,"line":76},[34,54638,52790],{"class":40},[34,54640,52258],{"class":44},[34,54642,54596],{"class":149},[34,54644,153],{"class":40},[34,54646,4367],{"class":156},[34,54648,54649],{"class":40},">3\u003C\u002F",[34,54651,52258],{"class":44},[34,54653,48],{"class":40},[34,54655,54656,54658,54660,54662,54664,54666,54669,54671],{"class":36,"line":93},[34,54657,52790],{"class":40},[34,54659,52258],{"class":44},[34,54661,54596],{"class":149},[34,54663,153],{"class":40},[34,54665,4380],{"class":156},[34,54667,54668],{"class":40},">4\u003C\u002F",[34,54670,52258],{"class":44},[34,54672,48],{"class":40},[34,54674,54675,54677,54679,54681,54683,54685,54688,54690],{"class":36,"line":99},[34,54676,52790],{"class":40},[34,54678,52258],{"class":44},[34,54680,54596],{"class":149},[34,54682,153],{"class":40},[34,54684,4401],{"class":156},[34,54686,54687],{"class":40},">5\u003C\u002F",[34,54689,52258],{"class":44},[34,54691,48],{"class":40},[34,54693,54694,54696,54698],{"class":36,"line":353},[34,54695,52790],{"class":40},[34,54697,52459],{"class":44},[34,54699,48],{"class":40},[34,54701,54702],{"class":36,"line":359},[34,54703,54704],{"class":40},"    const one = document.querySelector('div')\n",[34,54706,54707],{"class":36,"line":579},[34,54708,54709],{"class":40},"    console.log(one.dataset)\n",[34,54711,54712],{"class":36,"line":589},[34,54713,54714],{"class":40},"    console.log(one.dataset.id)\n",[34,54716,54717],{"class":36,"line":601},[34,54718,54719],{"class":40},"    console.log(one.dataset.spm)\n",[34,54721,54722,54724,54726],{"class":36,"line":613},[34,54723,53063],{"class":40},[34,54725,52459],{"class":44},[34,54727,48],{"class":40},[34,54729,54730,54732,54734],{"class":36,"line":618},[34,54731,102],{"class":40},[34,54733,52446],{"class":44},[34,54735,48],{"class":40},[108,54737,54738],{},[2122,54739],{"alt":29,"src":54740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[108,54742,54743],{},"document.querySelector选择的是第一个对象（元素）",[19,54745,54747],{"id":54746},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[108,54749,54750],{},[2122,54751],{"alt":29,"src":54752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[108,54754,54755],{},[2122,54756],{"alt":29,"src":54757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[108,54759,54760],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52459,54762,54763],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[108,54765,54766],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52459,54768,54769],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[108,54771,54772],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[108,54774,54775],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[108,54777,54778],{},"单位为毫秒！！！",[108,54780,54781],{},"可以搭配匿名函数来用！！！",[108,54783,54784],{},"setInterval(function () {",[108,54786,54787],{},"alert('两秒执行一次')",[108,54789,54790],{},"}, 2000)",[108,54792,54793],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[108,54795,54796],{},"function fn() {",[108,54798,54799],{},"document.write(1)",[108,54801,1739],{},[108,54803,54804],{},"setInterval(fn, 1000)",[108,54806,54807],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[108,54809,54810],{},"setInterval('fn()', 1000)",[108,54812,54813],{},[2122,54814],{"alt":29,"src":54815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22650,54817,54819],{"id":54818},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[24,54821,54823],{"className":51284,"code":54822,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,54824,54825,54835,54849,54853,54861,54875,54895,54907,54915,54919,54927,54964,54969,54974,54979,54987,54995,55017,55025,55030,55052,55057,55062,55073,55078,55098,55106,55121,55136,55147,55152,55162,55172,55176,55185,55189,55197,55205,55209],{"__ignoreMap":29},[34,54826,54827,54829,54831,54833],{"class":36,"line":37},[34,54828,51948],{"class":40},[34,54830,51951],{"class":44},[34,54832,51954],{"class":149},[34,54834,48],{"class":40},[34,54836,54837,54839,54841,54843,54845,54847],{"class":36,"line":51},[34,54838,41],{"class":40},[34,54840,51286],{"class":44},[34,54842,51965],{"class":149},[34,54844,153],{"class":40},[34,54846,51970],{"class":156},[34,54848,48],{"class":40},[34,54850,54851],{"class":36,"line":60},[34,54852,3053],{"emptyLinePlaceholder":726},[34,54854,54855,54857,54859],{"class":36,"line":76},[34,54856,41],{"class":40},[34,54858,51983],{"class":44},[34,54860,48],{"class":40},[34,54862,54863,54865,54867,54869,54871,54873],{"class":36,"line":93},[34,54864,52790],{"class":40},[34,54866,51993],{"class":44},[34,54868,51996],{"class":149},[34,54870,153],{"class":40},[34,54872,52001],{"class":156},[34,54874,48],{"class":40},[34,54876,54877,54879,54881,54883,54885,54887,54889,54891,54893],{"class":36,"line":99},[34,54878,52790],{"class":40},[34,54880,51993],{"class":44},[34,54882,15573],{"class":149},[34,54884,153],{"class":40},[34,54886,52040],{"class":156},[34,54888,52020],{"class":149},[34,54890,153],{"class":40},[34,54892,52047],{"class":156},[34,54894,48],{"class":40},[34,54896,54897,54899,54901,54903,54905],{"class":36,"line":353},[34,54898,52790],{"class":40},[34,54900,52056],{"class":44},[34,54902,52059],{"class":40},[34,54904,52056],{"class":44},[34,54906,48],{"class":40},[34,54908,54909,54911,54913],{"class":36,"line":359},[34,54910,102],{"class":40},[34,54912,51983],{"class":44},[34,54914,48],{"class":40},[34,54916,54917],{"class":36,"line":579},[34,54918,3053],{"emptyLinePlaceholder":726},[34,54920,54921,54923,54925],{"class":36,"line":589},[34,54922,41],{"class":40},[34,54924,52446],{"class":44},[34,54926,48],{"class":40},[34,54928,54929,54931,54934,54936,54938,54940,54942,54944,54946,54949,54951,54954,54957,54959,54962],{"class":36,"line":601},[34,54930,52790],{"class":40},[34,54932,54933],{"class":44},"textarea",[34,54935,15573],{"class":149},[34,54937,153],{"class":40},[34,54939,8305],{"class":156},[34,54941,15612],{"class":149},[34,54943,153],{"class":40},[34,54945,8305],{"class":156},[34,54947,54948],{"class":149}," cols",[34,54950,153],{"class":40},[34,54952,54953],{"class":156},"\"30\"",[34,54955,54956],{"class":149}," rows",[34,54958,153],{"class":40},[34,54960,54961],{"class":156},"\"10\"",[34,54963,48],{"class":40},[34,54965,54966],{"class":36,"line":613},[34,54967,54968],{"class":40},"        用户注册协议\n",[34,54970,54971],{"class":36,"line":618},[34,54972,54973],{"class":40},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[34,54975,54976],{"class":36,"line":628},[34,54977,54978],{"class":40},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[34,54980,54981,54983,54985],{"class":36,"line":640},[34,54982,52423],{"class":40},[34,54984,54933],{"class":44},[34,54986,48],{"class":40},[34,54988,54989,54991,54993],{"class":36,"line":2301},[34,54990,52790],{"class":40},[34,54992,54362],{"class":44},[34,54994,48],{"class":40},[34,54996,54997,54999,55001,55003,55005,55008,55010,55013,55015],{"class":36,"line":2307},[34,54998,52790],{"class":40},[34,55000,54532],{"class":44},[34,55002,54132],{"class":149},[34,55004,153],{"class":40},[34,55006,55007],{"class":156},"\"btn\"",[34,55009,54535],{"class":149},[34,55011,55012],{"class":40},">我已经阅读用户协议(5)\u003C\u002F",[34,55014,54532],{"class":44},[34,55016,48],{"class":40},[34,55018,55019,55021,55023],{"class":36,"line":2328},[34,55020,52790],{"class":40},[34,55022,52459],{"class":44},[34,55024,48],{"class":40},[34,55026,55027],{"class":36,"line":2333},[34,55028,55029],{"class":205},"    \u002F\u002F 1. 获取元素\n",[34,55031,55032,55034,55037,55039,55042,55045,55047,55050],{"class":36,"line":2347},[34,55033,11874],{"class":87},[34,55035,55036],{"class":63}," btn",[34,55038,14217],{"class":87},[34,55040,55041],{"class":40}," document.",[34,55043,55044],{"class":149},"querySelector",[34,55046,801],{"class":40},[34,55048,55049],{"class":156},"'.btn'",[34,55051,807],{"class":40},[34,55053,55054],{"class":36,"line":2352},[34,55055,55056],{"class":205},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[34,55058,55059],{"class":36,"line":2381},[34,55060,55061],{"class":205},"    \u002F\u002F 2. 倒计时\n",[34,55063,55064,55066,55068,55070],{"class":36,"line":2386},[34,55065,52865],{"class":87},[34,55067,10091],{"class":40},[34,55069,153],{"class":87},[34,55071,55072],{"class":63}," 5\n",[34,55074,55075],{"class":36,"line":2403},[34,55076,55077],{"class":205},"    \u002F\u002F 2.1 开启定时器\n",[34,55079,55080,55082,55085,55087,55090,55092,55095],{"class":36,"line":2408},[34,55081,52865],{"class":87},[34,55083,55084],{"class":40}," n ",[34,55086,153],{"class":87},[34,55088,55089],{"class":149}," setInterval",[34,55091,801],{"class":40},[34,55093,55094],{"class":87},"function",[34,55096,55097],{"class":40}," () {\n",[34,55099,55100,55103],{"class":36,"line":2413},[34,55101,55102],{"class":40},"      i",[34,55104,55105],{"class":87},"--\n",[34,55107,55108,55111,55113,55116,55118],{"class":36,"line":2418},[34,55109,55110],{"class":40},"      btn.innerHTML ",[34,55112,153],{"class":87},[34,55114,55115],{"class":156}," `我已经阅读用户协议(${",[34,55117,1236],{"class":40},[34,55119,55120],{"class":156},"})`\n",[34,55122,55123,55126,55129,55132,55134],{"class":36,"line":2432},[34,55124,55125],{"class":87},"      if",[34,55127,55128],{"class":40}," (i ",[34,55130,55131],{"class":87},"===",[34,55133,4746],{"class":63},[34,55135,13095],{"class":40},[34,55137,55138,55141,55144],{"class":36,"line":2437},[34,55139,55140],{"class":149},"        clearInterval",[34,55142,55143],{"class":40},"(n)  ",[34,55145,55146],{"class":205},"\u002F\u002F 关闭定时器\n",[34,55148,55149],{"class":36,"line":3230},[34,55150,55151],{"class":205},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[34,55153,55154,55157,55159],{"class":36,"line":3244},[34,55155,55156],{"class":40},"        btn.disabled ",[34,55158,153],{"class":87},[34,55160,55161],{"class":63}," false\n",[34,55163,55164,55167,55169],{"class":36,"line":3252},[34,55165,55166],{"class":40},"        btn.innerHTML ",[34,55168,153],{"class":87},[34,55170,55171],{"class":156}," '同意'\n",[34,55173,55174],{"class":36,"line":3257},[34,55175,53044],{"class":40},[34,55177,55178,55181,55183],{"class":36,"line":3263},[34,55179,55180],{"class":40},"    }, ",[34,55182,7063],{"class":63},[34,55184,807],{"class":40},[34,55186,55187],{"class":36,"line":3269},[34,55188,3053],{"emptyLinePlaceholder":726},[34,55190,55191,55193,55195],{"class":36,"line":3274},[34,55192,53063],{"class":40},[34,55194,52459],{"class":44},[34,55196,48],{"class":40},[34,55198,55199,55201,55203],{"class":36,"line":8601},[34,55200,102],{"class":40},[34,55202,52446],{"class":44},[34,55204,48],{"class":40},[34,55206,55207],{"class":36,"line":8625},[34,55208,3053],{"emptyLinePlaceholder":726},[34,55210,55211,55213,55215],{"class":36,"line":8630},[34,55212,102],{"class":40},[34,55214,51286],{"class":44},[34,55216,48],{"class":40},[108,55218,55219],{},"不要一直想着用死循环,避免死循环",[108,55221,55222,55225],{},[31,55223,55224],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22650,55227,55229],{"id":55228},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[752,55231,55232],{},[755,55233,55234],{},"法1",[24,55236,55238],{"className":51284,"code":55237,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,55239,55240,55250,55264,55268,55276,55290,55310,55322,55330,55336,55347,55358,55362,55366,55373,55384,55388,55392,55399,55411,55425,55438,55452,55456,55460,55467,55478,55489,55500,55512,55524,55535,55539,55543,55551,55561,55574,55586,55599,55603,55607,55614,55624,55636,55648,55659,55670,55680,55692,55704,55708,55712,55721,55733,55745,55773,55786,55790,55794,55801,55812,55816,55824,55832,55836,55844,55858,55873,55897,55905,55920,55933,55941,55962,55974,55986,55998,56010,56022,56034,56046,56055,56063,56071,56079,56091,56114,56133,56152,56171,56190,56209,56228,56248,56252,56272,56291,56311,56332,56343,56360,56370,56380,56390,56395,56400,56405,56410,56435,56448,56452,56475,56479,56487,56495,56503,56507],{"__ignoreMap":29},[34,55241,55242,55244,55246,55248],{"class":36,"line":37},[34,55243,51948],{"class":40},[34,55245,51951],{"class":44},[34,55247,51954],{"class":149},[34,55249,48],{"class":40},[34,55251,55252,55254,55256,55258,55260,55262],{"class":36,"line":51},[34,55253,41],{"class":40},[34,55255,51286],{"class":44},[34,55257,51965],{"class":149},[34,55259,153],{"class":40},[34,55261,51970],{"class":156},[34,55263,48],{"class":40},[34,55265,55266],{"class":36,"line":60},[34,55267,3053],{"emptyLinePlaceholder":726},[34,55269,55270,55272,55274],{"class":36,"line":76},[34,55271,41],{"class":40},[34,55273,51983],{"class":44},[34,55275,48],{"class":40},[34,55277,55278,55280,55282,55284,55286,55288],{"class":36,"line":93},[34,55279,52790],{"class":40},[34,55281,51993],{"class":44},[34,55283,51996],{"class":149},[34,55285,153],{"class":40},[34,55287,52001],{"class":156},[34,55289,48],{"class":40},[34,55291,55292,55294,55296,55298,55300,55302,55304,55306,55308],{"class":36,"line":99},[34,55293,52790],{"class":40},[34,55295,51993],{"class":44},[34,55297,15573],{"class":149},[34,55299,153],{"class":40},[34,55301,52040],{"class":156},[34,55303,52020],{"class":149},[34,55305,153],{"class":40},[34,55307,52047],{"class":156},[34,55309,48],{"class":40},[34,55311,55312,55314,55316,55318,55320],{"class":36,"line":353},[34,55313,52790],{"class":40},[34,55315,52056],{"class":44},[34,55317,52059],{"class":40},[34,55319,52056],{"class":44},[34,55321,48],{"class":40},[34,55323,55324,55326,55328],{"class":36,"line":359},[34,55325,52790],{"class":40},[34,55327,45],{"class":44},[34,55329,48],{"class":40},[34,55331,55332,55334],{"class":36,"line":579},[34,55333,7056],{"class":44},[34,55335,57],{"class":40},[34,55337,55338,55341,55343,55345],{"class":36,"line":589},[34,55339,55340],{"class":63},"      padding",[34,55342,67],{"class":40},[34,55344,987],{"class":63},[34,55346,73],{"class":40},[34,55348,55349,55352,55354,55356],{"class":36,"line":601},[34,55350,55351],{"class":63},"      margin",[34,55353,67],{"class":40},[34,55355,987],{"class":63},[34,55357,73],{"class":40},[34,55359,55360],{"class":36,"line":613},[34,55361,2840],{"class":40},[34,55363,55364],{"class":36,"line":618},[34,55365,3053],{"emptyLinePlaceholder":726},[34,55367,55368,55371],{"class":36,"line":628},[34,55369,55370],{"class":44},"    li",[34,55372,57],{"class":40},[34,55374,55375,55378,55380,55382],{"class":36,"line":640},[34,55376,55377],{"class":63},"      list-style",[34,55379,67],{"class":40},[34,55381,546],{"class":63},[34,55383,73],{"class":40},[34,55385,55386],{"class":36,"line":2301},[34,55387,2840],{"class":40},[34,55389,55390],{"class":36,"line":2307},[34,55391,3053],{"emptyLinePlaceholder":726},[34,55393,55394,55397],{"class":36,"line":2328},[34,55395,55396],{"class":149},"    .box",[34,55398,57],{"class":40},[34,55400,55401,55404,55406,55409],{"class":36,"line":2333},[34,55402,55403],{"class":63},"      position",[34,55405,67],{"class":40},[34,55407,55408],{"class":63},"relative",[34,55410,73],{"class":40},[34,55412,55413,55416,55418,55421,55423],{"class":36,"line":2347},[34,55414,55415],{"class":63},"      width",[34,55417,67],{"class":40},[34,55419,55420],{"class":63},"976",[34,55422,88],{"class":87},[34,55424,73],{"class":40},[34,55426,55427,55430,55432,55434,55436],{"class":36,"line":2352},[34,55428,55429],{"class":63},"      height",[34,55431,67],{"class":40},[34,55433,2199],{"class":63},[34,55435,88],{"class":87},[34,55437,73],{"class":40},[34,55439,55440,55442,55444,55446,55448,55450],{"class":36,"line":2381},[34,55441,55351],{"class":63},[34,55443,67],{"class":40},[34,55445,1106],{"class":63},[34,55447,88],{"class":87},[34,55449,52203],{"class":63},[34,55451,73],{"class":40},[34,55453,55454],{"class":36,"line":2386},[34,55455,2840],{"class":40},[34,55457,55458],{"class":36,"line":2403},[34,55459,3053],{"emptyLinePlaceholder":726},[34,55461,55462,55465],{"class":36,"line":2408},[34,55463,55464],{"class":149},"    .slider-footer",[34,55466,57],{"class":40},[34,55468,55469,55471,55473,55476],{"class":36,"line":2413},[34,55470,55403],{"class":63},[34,55472,67],{"class":40},[34,55474,55475],{"class":63},"absolute",[34,55477,73],{"class":40},[34,55479,55480,55483,55485,55487],{"class":36,"line":2418},[34,55481,55482],{"class":63},"      left",[34,55484,67],{"class":40},[34,55486,987],{"class":63},[34,55488,73],{"class":40},[34,55490,55491,55494,55496,55498],{"class":36,"line":2432},[34,55492,55493],{"class":63},"      bottom",[34,55495,67],{"class":40},[34,55497,987],{"class":63},[34,55499,73],{"class":40},[34,55501,55502,55504,55506,55508,55510],{"class":36,"line":2437},[34,55503,55415],{"class":63},[34,55505,67],{"class":40},[34,55507,1106],{"class":63},[34,55509,1123],{"class":87},[34,55511,73],{"class":40},[34,55513,55514,55516,55518,55520,55522],{"class":36,"line":3230},[34,55515,55429],{"class":63},[34,55517,67],{"class":40},[34,55519,1370],{"class":63},[34,55521,1123],{"class":87},[34,55523,73],{"class":40},[34,55525,55526,55529,55531,55533],{"class":36,"line":3244},[34,55527,55528],{"class":63},"      background-color",[34,55530,67],{"class":40},[34,55532,596],{"class":63},[34,55534,73],{"class":40},[34,55536,55537],{"class":36,"line":3252},[34,55538,2840],{"class":40},[34,55540,55541],{"class":36,"line":3257},[34,55542,3053],{"emptyLinePlaceholder":726},[34,55544,55545,55547,55549],{"class":36,"line":3263},[34,55546,55464],{"class":149},[34,55548,7478],{"class":44},[34,55550,57],{"class":40},[34,55552,55553,55555,55557,55559],{"class":36,"line":3269},[34,55554,55403],{"class":63},[34,55556,67],{"class":40},[34,55558,55475],{"class":63},[34,55560,73],{"class":40},[34,55562,55563,55566,55568,55570,55572],{"class":36,"line":3274},[34,55564,55565],{"class":63},"      font-size",[34,55567,67],{"class":40},[34,55569,1695],{"class":63},[34,55571,88],{"class":87},[34,55573,73],{"class":40},[34,55575,55576,55578,55580,55582,55584],{"class":36,"line":8601},[34,55577,55482],{"class":63},[34,55579,67],{"class":40},[34,55581,1495],{"class":63},[34,55583,88],{"class":87},[34,55585,73],{"class":40},[34,55587,55588,55591,55593,55595,55597],{"class":36,"line":8625},[34,55589,55590],{"class":63},"      top",[34,55592,67],{"class":40},[34,55594,1114],{"class":63},[34,55596,88],{"class":87},[34,55598,73],{"class":40},[34,55600,55601],{"class":36,"line":8630},[34,55602,2840],{"class":40},[34,55604,55605],{"class":36,"line":8636},[34,55606,3053],{"emptyLinePlaceholder":726},[34,55608,55609,55612],{"class":36,"line":8663},[34,55610,55611],{"class":44},"    ul",[34,55613,57],{"class":40},[34,55615,55616,55618,55620,55622],{"class":36,"line":8668},[34,55617,55403],{"class":63},[34,55619,67],{"class":40},[34,55621,55475],{"class":63},[34,55623,73],{"class":40},[34,55625,55626,55628,55630,55632,55634],{"class":36,"line":8674},[34,55627,55590],{"class":63},[34,55629,67],{"class":40},[34,55631,1576],{"class":63},[34,55633,88],{"class":87},[34,55635,73],{"class":40},[34,55637,55638,55640,55642,55644,55646],{"class":36,"line":8686},[34,55639,55482],{"class":63},[34,55641,67],{"class":40},[34,55643,1495],{"class":63},[34,55645,88],{"class":87},[34,55647,73],{"class":40},[34,55649,55650,55653,55655,55657],{"class":36,"line":8698},[34,55651,55652],{"class":63},"      display",[34,55654,67],{"class":40},[34,55656,52125],{"class":63},[34,55658,73],{"class":40},[34,55660,55661,55664,55666,55668],{"class":36,"line":8710},[34,55662,55663],{"class":63},"      justify-content",[34,55665,67],{"class":40},[34,55667,52315],{"class":63},[34,55669,73],{"class":40},[34,55671,55672,55674,55676,55678],{"class":36,"line":10369},[34,55673,55403],{"class":63},[34,55675,67],{"class":40},[34,55677,55475],{"class":63},[34,55679,73],{"class":40},[34,55681,55682,55684,55686,55688,55690],{"class":36,"line":10394},[34,55683,55415],{"class":63},[34,55685,67],{"class":40},[34,55687,4645],{"class":63},[34,55689,88],{"class":87},[34,55691,73],{"class":40},[34,55693,55694,55696,55698,55700,55702],{"class":36,"line":10417},[34,55695,55429],{"class":63},[34,55697,67],{"class":40},[34,55699,1495],{"class":63},[34,55701,88],{"class":87},[34,55703,73],{"class":40},[34,55705,55706],{"class":36,"line":10441},[34,55707,2840],{"class":40},[34,55709,55710],{"class":36,"line":10446},[34,55711,3053],{"emptyLinePlaceholder":726},[34,55713,55714,55716,55719],{"class":36,"line":10451},[34,55715,55611],{"class":44},[34,55717,55718],{"class":44}," li",[34,55720,57],{"class":40},[34,55722,55723,55725,55727,55729,55731],{"class":36,"line":10456},[34,55724,55415],{"class":63},[34,55726,67],{"class":40},[34,55728,1495],{"class":63},[34,55730,88],{"class":87},[34,55732,73],{"class":40},[34,55734,55735,55737,55739,55741,55743],{"class":36,"line":10465},[34,55736,55429],{"class":63},[34,55738,67],{"class":40},[34,55740,1495],{"class":63},[34,55742,88],{"class":87},[34,55744,73],{"class":40},[34,55746,55747,55749,55751,55754,55756,55758,55760,55762,55764,55766,55768,55771],{"class":36,"line":10470},[34,55748,55528],{"class":63},[34,55750,67],{"class":40},[34,55752,55753],{"class":63},"rgba",[34,55755,801],{"class":40},[34,55757,987],{"class":63},[34,55759,13088],{"class":40},[34,55761,987],{"class":63},[34,55763,13088],{"class":40},[34,55765,987],{"class":63},[34,55767,13088],{"class":40},[34,55769,55770],{"class":63},".4",[34,55772,3372],{"class":40},[34,55774,55775,55778,55780,55782,55784],{"class":36,"line":10476},[34,55776,55777],{"class":63},"      border-radius",[34,55779,67],{"class":40},[34,55781,1241],{"class":63},[34,55783,88],{"class":87},[34,55785,73],{"class":40},[34,55787,55788],{"class":36,"line":10497},[34,55789,2840],{"class":40},[34,55791,55792],{"class":36,"line":10503},[34,55793,3053],{"emptyLinePlaceholder":726},[34,55795,55796,55799],{"class":36,"line":10517},[34,55797,55798],{"class":149},"    .activate",[34,55800,57],{"class":40},[34,55802,55803,55805,55807,55810],{"class":36,"line":10523},[34,55804,55528],{"class":63},[34,55806,67],{"class":40},[34,55808,55809],{"class":63},"#f7f7f7",[34,55811,73],{"class":40},[34,55813,55814],{"class":36,"line":10550},[34,55815,2840],{"class":40},[34,55817,55818,55820,55822],{"class":36,"line":10559},[34,55819,53063],{"class":40},[34,55821,45],{"class":44},[34,55823,48],{"class":40},[34,55825,55826,55828,55830],{"class":36,"line":10565},[34,55827,102],{"class":40},[34,55829,51983],{"class":44},[34,55831,48],{"class":40},[34,55833,55834],{"class":36,"line":10573},[34,55835,3053],{"emptyLinePlaceholder":726},[34,55837,55838,55840,55842],{"class":36,"line":10578},[34,55839,41],{"class":40},[34,55841,52446],{"class":44},[34,55843,48],{"class":40},[34,55845,55846,55848,55850,55852,55854,55856],{"class":36,"line":17256},[34,55847,52790],{"class":40},[34,55849,52258],{"class":44},[34,55851,54132],{"class":149},[34,55853,153],{"class":40},[34,55855,54137],{"class":156},[34,55857,48],{"class":40},[34,55859,55860,55862,55864,55866,55868,55871],{"class":36,"line":17262},[34,55861,51990],{"class":40},[34,55863,52258],{"class":44},[34,55865,54132],{"class":149},[34,55867,153],{"class":40},[34,55869,55870],{"class":156},"\"slider-wrapper\"",[34,55872,48],{"class":40},[34,55874,55875,55878,55880,55883,55885,55888,55891,55893,55895],{"class":36,"line":17285},[34,55876,55877],{"class":40},"      \u003C",[34,55879,2122],{"class":44},[34,55881,55882],{"class":149}," src",[34,55884,153],{"class":40},[34,55886,55887],{"class":156},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[34,55889,55890],{"class":149}," alt",[34,55892,153],{"class":40},[34,55894,8305],{"class":156},[34,55896,48],{"class":40},[34,55898,55899,55901,55903],{"class":36,"line":17291},[34,55900,52423],{"class":40},[34,55902,52258],{"class":44},[34,55904,48],{"class":40},[34,55906,55907,55909,55911,55913,55915,55918],{"class":36,"line":17314},[34,55908,51990],{"class":40},[34,55910,52258],{"class":44},[34,55912,54132],{"class":149},[34,55914,153],{"class":40},[34,55916,55917],{"class":156},"\"slider-footer\"",[34,55919,48],{"class":40},[34,55921,55922,55924,55926,55929,55931],{"class":36,"line":17328},[34,55923,55877],{"class":40},[34,55925,108],{"class":44},[34,55927,55928],{"class":40},">对人类来说会不会太超前了?\u003C\u002F",[34,55930,108],{"class":44},[34,55932,48],{"class":40},[34,55934,55935,55937,55939],{"class":36,"line":17348},[34,55936,55877],{"class":40},[34,55938,1800],{"class":44},[34,55940,48],{"class":40},[34,55942,55943,55946,55948,55950,55952,55955,55958,55960],{"class":36,"line":17354},[34,55944,55945],{"class":40},"        \u003C",[34,55947,755],{"class":44},[34,55949,54132],{"class":149},[34,55951,153],{"class":40},[34,55953,55954],{"class":156},"\"activate\"",[34,55956,55957],{"class":40},">\u003C\u002F",[34,55959,755],{"class":44},[34,55961,48],{"class":40},[34,55963,55964,55966,55968,55970,55972],{"class":36,"line":17365},[34,55965,55945],{"class":40},[34,55967,755],{"class":44},[34,55969,55957],{"class":40},[34,55971,755],{"class":44},[34,55973,48],{"class":40},[34,55975,55976,55978,55980,55982,55984],{"class":36,"line":17388},[34,55977,55945],{"class":40},[34,55979,755],{"class":44},[34,55981,55957],{"class":40},[34,55983,755],{"class":44},[34,55985,48],{"class":40},[34,55987,55988,55990,55992,55994,55996],{"class":36,"line":17410},[34,55989,55945],{"class":40},[34,55991,755],{"class":44},[34,55993,55957],{"class":40},[34,55995,755],{"class":44},[34,55997,48],{"class":40},[34,55999,56000,56002,56004,56006,56008],{"class":36,"line":17415},[34,56001,55945],{"class":40},[34,56003,755],{"class":44},[34,56005,55957],{"class":40},[34,56007,755],{"class":44},[34,56009,48],{"class":40},[34,56011,56012,56014,56016,56018,56020],{"class":36,"line":17421},[34,56013,55945],{"class":40},[34,56015,755],{"class":44},[34,56017,55957],{"class":40},[34,56019,755],{"class":44},[34,56021,48],{"class":40},[34,56023,56024,56026,56028,56030,56032],{"class":36,"line":17435},[34,56025,55945],{"class":40},[34,56027,755],{"class":44},[34,56029,55957],{"class":40},[34,56031,755],{"class":44},[34,56033,48],{"class":40},[34,56035,56036,56038,56040,56042,56044],{"class":36,"line":17448},[34,56037,55945],{"class":40},[34,56039,755],{"class":44},[34,56041,55957],{"class":40},[34,56043,755],{"class":44},[34,56045,48],{"class":40},[34,56047,56048,56051,56053],{"class":36,"line":17453},[34,56049,56050],{"class":40},"      \u003C\u002F",[34,56052,1800],{"class":44},[34,56054,48],{"class":40},[34,56056,56057,56059,56061],{"class":36,"line":17467},[34,56058,52423],{"class":40},[34,56060,52258],{"class":44},[34,56062,48],{"class":40},[34,56064,56065,56067,56069],{"class":36,"line":17472},[34,56066,53063],{"class":40},[34,56068,52258],{"class":44},[34,56070,48],{"class":40},[34,56072,56073,56075,56077],{"class":36,"line":17478},[34,56074,52790],{"class":40},[34,56076,52459],{"class":44},[34,56078,48],{"class":40},[34,56080,56081,56083,56086,56088],{"class":36,"line":17483},[34,56082,11874],{"class":87},[34,56084,56085],{"class":63}," arrImage",[34,56087,14217],{"class":87},[34,56089,56090],{"class":40}," [\n",[34,56092,56093,56096,56099,56102,56105,56108,56111],{"class":36,"line":17497},[34,56094,56095],{"class":40},"      { url: ",[34,56097,56098],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[34,56100,56101],{"class":40},", title: ",[34,56103,56104],{"class":156},"'对人类来说会不会太超前了?'",[34,56106,56107],{"class":40},", color: ",[34,56109,56110],{"class":156},"'rgba(100,67,68)'",[34,56112,56113],{"class":40}," },\n",[34,56115,56116,56118,56121,56123,56126,56128,56131],{"class":36,"line":17502},[34,56117,56095],{"class":40},[34,56119,56120],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[34,56122,56101],{"class":40},[34,56124,56125],{"class":156},"'开启剑与雪的黑暗传说!'",[34,56127,56107],{"class":40},[34,56129,56130],{"class":156},"'rgba(43,35,26)'",[34,56132,56113],{"class":40},[34,56134,56135,56137,56140,56142,56145,56147,56150],{"class":36,"line":17507},[34,56136,56095],{"class":40},[34,56138,56139],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[34,56141,56101],{"class":40},[34,56143,56144],{"class":156},"'真正的jo厨出现了!'",[34,56146,56107],{"class":40},[34,56148,56149],{"class":156},"'rgba(36,31,33)'",[34,56151,56113],{"class":40},[34,56153,56154,56156,56159,56161,56164,56166,56169],{"class":36,"line":17521},[34,56155,56095],{"class":40},[34,56157,56158],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[34,56160,56101],{"class":40},[34,56162,56163],{"class":156},"'李玉刚:让世界通过b站看到东方大国文化'",[34,56165,56107],{"class":40},[34,56167,56168],{"class":156},"'rgba(139,98,66)'",[34,56170,56113],{"class":40},[34,56172,56173,56175,56178,56180,56183,56185,56188],{"class":36,"line":17533},[34,56174,56095],{"class":40},[34,56176,56177],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[34,56179,56101],{"class":40},[34,56181,56182],{"class":156},"'快来分享你的寒假日常吧'",[34,56184,56107],{"class":40},[34,56186,56187],{"class":156},"'rgba(67,90,92)'",[34,56189,56113],{"class":40},[34,56191,56192,56194,56197,56199,56202,56204,56207],{"class":36,"line":17538},[34,56193,56095],{"class":40},[34,56195,56196],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[34,56198,56101],{"class":40},[34,56200,56201],{"class":156},"'哔哩哔哩小年YEAR'",[34,56203,56107],{"class":40},[34,56205,56206],{"class":156},"'rgba(166,131,143)'",[34,56208,56113],{"class":40},[34,56210,56211,56213,56216,56218,56221,56223,56226],{"class":36,"line":17551},[34,56212,56095],{"class":40},[34,56214,56215],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[34,56217,56101],{"class":40},[34,56219,56220],{"class":156},"'一站式解决你的电脑配置问题'",[34,56222,56107],{"class":40},[34,56224,56225],{"class":156},"'rgba(53,29,25)'",[34,56227,56113],{"class":40},[34,56229,56230,56232,56235,56237,56240,56242,56245],{"class":36,"line":17556},[34,56231,56095],{"class":40},[34,56233,56234],{"class":156},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[34,56236,56101],{"class":40},[34,56238,56239],{"class":156},"'谁不想和小猫咪贴贴呢?'",[34,56241,56107],{"class":40},[34,56243,56244],{"class":156},"'rgba(99,72,114)'",[34,56246,56247],{"class":40}," }\n",[34,56249,56250],{"class":36,"line":17561},[34,56251,53755],{"class":40},[34,56253,56254,56256,56259,56261,56263,56265,56267,56270],{"class":36,"line":17566},[34,56255,11874],{"class":87},[34,56257,56258],{"class":63}," img",[34,56260,14217],{"class":87},[34,56262,55041],{"class":40},[34,56264,55044],{"class":149},[34,56266,801],{"class":40},[34,56268,56269],{"class":156},"'.slider-wrapper img'",[34,56271,807],{"class":40},[34,56273,56274,56276,56278,56280,56282,56284,56286,56289],{"class":36,"line":17579},[34,56275,11874],{"class":87},[34,56277,7478],{"class":63},[34,56279,14217],{"class":87},[34,56281,55041],{"class":40},[34,56283,55044],{"class":149},[34,56285,801],{"class":40},[34,56287,56288],{"class":156},"'.slider-footer p'",[34,56290,807],{"class":40},[34,56292,56293,56295,56298,56300,56302,56304,56306,56309],{"class":36,"line":17584},[34,56294,11874],{"class":87},[34,56296,56297],{"class":63}," color",[34,56299,14217],{"class":87},[34,56301,55041],{"class":40},[34,56303,55044],{"class":149},[34,56305,801],{"class":40},[34,56307,56308],{"class":156},"'.slider-footer'",[34,56310,807],{"class":40},[34,56312,56313,56315,56318,56320,56322,56325,56327,56330],{"class":36,"line":33284},[34,56314,11874],{"class":87},[34,56316,56317],{"class":63}," lis",[34,56319,14217],{"class":87},[34,56321,55041],{"class":40},[34,56323,56324],{"class":149},"querySelectorAll",[34,56326,801],{"class":40},[34,56328,56329],{"class":156},"'.slider-footer ul li'",[34,56331,807],{"class":40},[34,56333,56334,56336,56338,56340],{"class":36,"line":33290},[34,56335,52865],{"class":87},[34,56337,10091],{"class":40},[34,56339,153],{"class":87},[34,56341,56342],{"class":63}," 1\n",[34,56344,56345,56347,56350,56352,56354,56356,56358],{"class":36,"line":33296},[34,56346,52865],{"class":87},[34,56348,56349],{"class":40}," timer ",[34,56351,153],{"class":87},[34,56353,55089],{"class":149},[34,56355,801],{"class":40},[34,56357,55094],{"class":87},[34,56359,55097],{"class":40},[34,56361,56362,56365,56367],{"class":36,"line":33302},[34,56363,56364],{"class":40},"      img.src ",[34,56366,153],{"class":87},[34,56368,56369],{"class":40}," arrImage[i].url\n",[34,56371,56372,56375,56377],{"class":36,"line":33308},[34,56373,56374],{"class":40},"      p.innerHTML ",[34,56376,153],{"class":87},[34,56378,56379],{"class":40}," arrImage[i].title\n",[34,56381,56382,56385,56387],{"class":36,"line":33319},[34,56383,56384],{"class":40},"      color.style.backgroundColor ",[34,56386,153],{"class":87},[34,56388,56389],{"class":40}," arrImage[i].color\n",[34,56391,56392],{"class":36,"line":33325},[34,56393,56394],{"class":205},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[34,56396,56397],{"class":36,"line":33345},[34,56398,56399],{"class":205},"      \u002F\u002F li.classList.add('activate')\n",[34,56401,56402],{"class":36,"line":33351},[34,56403,56404],{"class":205},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[34,56406,56407],{"class":36,"line":33362},[34,56408,56409],{"class":205},"      \u002F\u002F lis[i].classList.remove('activate')\n",[34,56411,56412,56415,56417,56419,56422,56425,56428,56430,56433],{"class":36,"line":33368},[34,56413,56414],{"class":40},"      document.",[34,56416,55044],{"class":149},[34,56418,801],{"class":40},[34,56420,56421],{"class":156},"'.activate'",[34,56423,56424],{"class":40},")?.classList.",[34,56426,56427],{"class":149},"toggle",[34,56429,801],{"class":40},[34,56431,56432],{"class":156},"'activate'",[34,56434,807],{"class":40},[34,56436,56437,56440,56442,56444,56446],{"class":36,"line":33374},[34,56438,56439],{"class":40},"      lis[i].classList.",[34,56441,5987],{"class":149},[34,56443,801],{"class":40},[34,56445,56432],{"class":156},[34,56447,807],{"class":40},[34,56449,56450],{"class":36,"line":33380},[34,56451,3053],{"emptyLinePlaceholder":726},[34,56453,56454,56457,56459,56461,56463,56465,56467,56469,56472],{"class":36,"line":33386},[34,56455,56456],{"class":40},"      i ",[34,56458,153],{"class":87},[34,56460,55128],{"class":40},[34,56462,1276],{"class":87},[34,56464,25771],{"class":63},[34,56466,14367],{"class":40},[34,56468,1123],{"class":87},[34,56470,56471],{"class":40}," arrImage.",[34,56473,56474],{"class":63},"length\n",[34,56476,56477],{"class":36,"line":33392},[34,56478,3053],{"emptyLinePlaceholder":726},[34,56480,56481,56483,56485],{"class":36,"line":33398},[34,56482,55180],{"class":40},[34,56484,7063],{"class":63},[34,56486,807],{"class":40},[34,56488,56489,56491,56493],{"class":36,"line":33404},[34,56490,53063],{"class":40},[34,56492,52459],{"class":44},[34,56494,48],{"class":40},[34,56496,56497,56499,56501],{"class":36,"line":33424},[34,56498,102],{"class":40},[34,56500,52446],{"class":44},[34,56502,48],{"class":40},[34,56504,56505],{"class":36,"line":33430},[34,56506,3053],{"emptyLinePlaceholder":726},[34,56508,56509,56511,56513],{"class":36,"line":33446},[34,56510,102],{"class":40},[34,56512,51286],{"class":44},[34,56514,48],{"class":40},[108,56516,56517],{},[2122,56518],{"alt":29,"src":56519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[108,56521,56522],{},"?.就是短路保护,确保输出正常进行",[108,56524,56525],{},"不要忘记取余%,有时候可以用",[108,56527,56528],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[752,56530,56531],{"start":51},[755,56532,56533],{},"法2",[24,56535,56537],{"className":51284,"code":56536,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,56538,56539,56549,56563,56567,56575,56589,56609,56621,56629,56635,56645,56655,56659,56663,56669,56679,56683,56687,56693,56703,56715,56727,56741,56745,56749,56755,56765,56775,56785,56797,56809,56819,56823,56827,56835,56845,56857,56869,56881,56885,56889,56895,56905,56917,56929,56939,56949,56959,56971,56983,56987,56991,56999,57011,57023,57049,57061,57065,57069,57075,57085,57089,57097,57105,57109,57117,57131,57145,57165,57173,57187,57199,57207,57225,57237,57249,57261,57273,57285,57297,57309,57317,57325,57333,57341,57352,57368,57384,57400,57416,57432,57448,57464,57480,57484,57489,57507,57525,57535,57540,57545,57556,57562,57577,57586,57590,57595,57604,57609,57618,57623,57628,57633,57656,57686,57690,57698,57702,57710,57718,57722],{"__ignoreMap":29},[34,56540,56541,56543,56545,56547],{"class":36,"line":37},[34,56542,51948],{"class":40},[34,56544,51951],{"class":44},[34,56546,51954],{"class":149},[34,56548,48],{"class":40},[34,56550,56551,56553,56555,56557,56559,56561],{"class":36,"line":51},[34,56552,41],{"class":40},[34,56554,51286],{"class":44},[34,56556,51965],{"class":149},[34,56558,153],{"class":40},[34,56560,51970],{"class":156},[34,56562,48],{"class":40},[34,56564,56565],{"class":36,"line":60},[34,56566,3053],{"emptyLinePlaceholder":726},[34,56568,56569,56571,56573],{"class":36,"line":76},[34,56570,41],{"class":40},[34,56572,51983],{"class":44},[34,56574,48],{"class":40},[34,56576,56577,56579,56581,56583,56585,56587],{"class":36,"line":93},[34,56578,52790],{"class":40},[34,56580,51993],{"class":44},[34,56582,51996],{"class":149},[34,56584,153],{"class":40},[34,56586,52001],{"class":156},[34,56588,48],{"class":40},[34,56590,56591,56593,56595,56597,56599,56601,56603,56605,56607],{"class":36,"line":99},[34,56592,52790],{"class":40},[34,56594,51993],{"class":44},[34,56596,15573],{"class":149},[34,56598,153],{"class":40},[34,56600,52040],{"class":156},[34,56602,52020],{"class":149},[34,56604,153],{"class":40},[34,56606,52047],{"class":156},[34,56608,48],{"class":40},[34,56610,56611,56613,56615,56617,56619],{"class":36,"line":353},[34,56612,52790],{"class":40},[34,56614,52056],{"class":44},[34,56616,52059],{"class":40},[34,56618,52056],{"class":44},[34,56620,48],{"class":40},[34,56622,56623,56625,56627],{"class":36,"line":359},[34,56624,52790],{"class":40},[34,56626,45],{"class":44},[34,56628,48],{"class":40},[34,56630,56631,56633],{"class":36,"line":579},[34,56632,7056],{"class":44},[34,56634,57],{"class":40},[34,56636,56637,56639,56641,56643],{"class":36,"line":589},[34,56638,55340],{"class":63},[34,56640,67],{"class":40},[34,56642,987],{"class":63},[34,56644,73],{"class":40},[34,56646,56647,56649,56651,56653],{"class":36,"line":601},[34,56648,55351],{"class":63},[34,56650,67],{"class":40},[34,56652,987],{"class":63},[34,56654,73],{"class":40},[34,56656,56657],{"class":36,"line":613},[34,56658,2840],{"class":40},[34,56660,56661],{"class":36,"line":618},[34,56662,3053],{"emptyLinePlaceholder":726},[34,56664,56665,56667],{"class":36,"line":628},[34,56666,55370],{"class":44},[34,56668,57],{"class":40},[34,56670,56671,56673,56675,56677],{"class":36,"line":640},[34,56672,55377],{"class":63},[34,56674,67],{"class":40},[34,56676,546],{"class":63},[34,56678,73],{"class":40},[34,56680,56681],{"class":36,"line":2301},[34,56682,2840],{"class":40},[34,56684,56685],{"class":36,"line":2307},[34,56686,3053],{"emptyLinePlaceholder":726},[34,56688,56689,56691],{"class":36,"line":2328},[34,56690,55396],{"class":149},[34,56692,57],{"class":40},[34,56694,56695,56697,56699,56701],{"class":36,"line":2333},[34,56696,55403],{"class":63},[34,56698,67],{"class":40},[34,56700,55408],{"class":63},[34,56702,73],{"class":40},[34,56704,56705,56707,56709,56711,56713],{"class":36,"line":2347},[34,56706,55415],{"class":63},[34,56708,67],{"class":40},[34,56710,55420],{"class":63},[34,56712,88],{"class":87},[34,56714,73],{"class":40},[34,56716,56717,56719,56721,56723,56725],{"class":36,"line":2352},[34,56718,55429],{"class":63},[34,56720,67],{"class":40},[34,56722,2199],{"class":63},[34,56724,88],{"class":87},[34,56726,73],{"class":40},[34,56728,56729,56731,56733,56735,56737,56739],{"class":36,"line":2381},[34,56730,55351],{"class":63},[34,56732,67],{"class":40},[34,56734,1106],{"class":63},[34,56736,88],{"class":87},[34,56738,52203],{"class":63},[34,56740,73],{"class":40},[34,56742,56743],{"class":36,"line":2386},[34,56744,2840],{"class":40},[34,56746,56747],{"class":36,"line":2403},[34,56748,3053],{"emptyLinePlaceholder":726},[34,56750,56751,56753],{"class":36,"line":2408},[34,56752,55464],{"class":149},[34,56754,57],{"class":40},[34,56756,56757,56759,56761,56763],{"class":36,"line":2413},[34,56758,55403],{"class":63},[34,56760,67],{"class":40},[34,56762,55475],{"class":63},[34,56764,73],{"class":40},[34,56766,56767,56769,56771,56773],{"class":36,"line":2418},[34,56768,55482],{"class":63},[34,56770,67],{"class":40},[34,56772,987],{"class":63},[34,56774,73],{"class":40},[34,56776,56777,56779,56781,56783],{"class":36,"line":2432},[34,56778,55493],{"class":63},[34,56780,67],{"class":40},[34,56782,987],{"class":63},[34,56784,73],{"class":40},[34,56786,56787,56789,56791,56793,56795],{"class":36,"line":2437},[34,56788,55415],{"class":63},[34,56790,67],{"class":40},[34,56792,1106],{"class":63},[34,56794,1123],{"class":87},[34,56796,73],{"class":40},[34,56798,56799,56801,56803,56805,56807],{"class":36,"line":3230},[34,56800,55429],{"class":63},[34,56802,67],{"class":40},[34,56804,1370],{"class":63},[34,56806,1123],{"class":87},[34,56808,73],{"class":40},[34,56810,56811,56813,56815,56817],{"class":36,"line":3244},[34,56812,55528],{"class":63},[34,56814,67],{"class":40},[34,56816,596],{"class":63},[34,56818,73],{"class":40},[34,56820,56821],{"class":36,"line":3252},[34,56822,2840],{"class":40},[34,56824,56825],{"class":36,"line":3257},[34,56826,3053],{"emptyLinePlaceholder":726},[34,56828,56829,56831,56833],{"class":36,"line":3263},[34,56830,55464],{"class":149},[34,56832,7478],{"class":44},[34,56834,57],{"class":40},[34,56836,56837,56839,56841,56843],{"class":36,"line":3269},[34,56838,55403],{"class":63},[34,56840,67],{"class":40},[34,56842,55475],{"class":63},[34,56844,73],{"class":40},[34,56846,56847,56849,56851,56853,56855],{"class":36,"line":3274},[34,56848,55565],{"class":63},[34,56850,67],{"class":40},[34,56852,1695],{"class":63},[34,56854,88],{"class":87},[34,56856,73],{"class":40},[34,56858,56859,56861,56863,56865,56867],{"class":36,"line":8601},[34,56860,55482],{"class":63},[34,56862,67],{"class":40},[34,56864,1495],{"class":63},[34,56866,88],{"class":87},[34,56868,73],{"class":40},[34,56870,56871,56873,56875,56877,56879],{"class":36,"line":8625},[34,56872,55590],{"class":63},[34,56874,67],{"class":40},[34,56876,1114],{"class":63},[34,56878,88],{"class":87},[34,56880,73],{"class":40},[34,56882,56883],{"class":36,"line":8630},[34,56884,2840],{"class":40},[34,56886,56887],{"class":36,"line":8636},[34,56888,3053],{"emptyLinePlaceholder":726},[34,56890,56891,56893],{"class":36,"line":8663},[34,56892,55611],{"class":44},[34,56894,57],{"class":40},[34,56896,56897,56899,56901,56903],{"class":36,"line":8668},[34,56898,55403],{"class":63},[34,56900,67],{"class":40},[34,56902,55475],{"class":63},[34,56904,73],{"class":40},[34,56906,56907,56909,56911,56913,56915],{"class":36,"line":8674},[34,56908,55590],{"class":63},[34,56910,67],{"class":40},[34,56912,1576],{"class":63},[34,56914,88],{"class":87},[34,56916,73],{"class":40},[34,56918,56919,56921,56923,56925,56927],{"class":36,"line":8686},[34,56920,55482],{"class":63},[34,56922,67],{"class":40},[34,56924,1495],{"class":63},[34,56926,88],{"class":87},[34,56928,73],{"class":40},[34,56930,56931,56933,56935,56937],{"class":36,"line":8698},[34,56932,55652],{"class":63},[34,56934,67],{"class":40},[34,56936,52125],{"class":63},[34,56938,73],{"class":40},[34,56940,56941,56943,56945,56947],{"class":36,"line":8710},[34,56942,55663],{"class":63},[34,56944,67],{"class":40},[34,56946,52315],{"class":63},[34,56948,73],{"class":40},[34,56950,56951,56953,56955,56957],{"class":36,"line":10369},[34,56952,55403],{"class":63},[34,56954,67],{"class":40},[34,56956,55475],{"class":63},[34,56958,73],{"class":40},[34,56960,56961,56963,56965,56967,56969],{"class":36,"line":10394},[34,56962,55415],{"class":63},[34,56964,67],{"class":40},[34,56966,4645],{"class":63},[34,56968,88],{"class":87},[34,56970,73],{"class":40},[34,56972,56973,56975,56977,56979,56981],{"class":36,"line":10417},[34,56974,55429],{"class":63},[34,56976,67],{"class":40},[34,56978,1495],{"class":63},[34,56980,88],{"class":87},[34,56982,73],{"class":40},[34,56984,56985],{"class":36,"line":10441},[34,56986,2840],{"class":40},[34,56988,56989],{"class":36,"line":10446},[34,56990,3053],{"emptyLinePlaceholder":726},[34,56992,56993,56995,56997],{"class":36,"line":10451},[34,56994,55611],{"class":44},[34,56996,55718],{"class":44},[34,56998,57],{"class":40},[34,57000,57001,57003,57005,57007,57009],{"class":36,"line":10456},[34,57002,55415],{"class":63},[34,57004,67],{"class":40},[34,57006,1495],{"class":63},[34,57008,88],{"class":87},[34,57010,73],{"class":40},[34,57012,57013,57015,57017,57019,57021],{"class":36,"line":10465},[34,57014,55429],{"class":63},[34,57016,67],{"class":40},[34,57018,1495],{"class":63},[34,57020,88],{"class":87},[34,57022,73],{"class":40},[34,57024,57025,57027,57029,57031,57033,57035,57037,57039,57041,57043,57045,57047],{"class":36,"line":10470},[34,57026,55528],{"class":63},[34,57028,67],{"class":40},[34,57030,55753],{"class":63},[34,57032,801],{"class":40},[34,57034,987],{"class":63},[34,57036,13088],{"class":40},[34,57038,987],{"class":63},[34,57040,13088],{"class":40},[34,57042,987],{"class":63},[34,57044,13088],{"class":40},[34,57046,55770],{"class":63},[34,57048,3372],{"class":40},[34,57050,57051,57053,57055,57057,57059],{"class":36,"line":10476},[34,57052,55777],{"class":63},[34,57054,67],{"class":40},[34,57056,1241],{"class":63},[34,57058,88],{"class":87},[34,57060,73],{"class":40},[34,57062,57063],{"class":36,"line":10497},[34,57064,2840],{"class":40},[34,57066,57067],{"class":36,"line":10503},[34,57068,3053],{"emptyLinePlaceholder":726},[34,57070,57071,57073],{"class":36,"line":10517},[34,57072,55798],{"class":149},[34,57074,57],{"class":40},[34,57076,57077,57079,57081,57083],{"class":36,"line":10523},[34,57078,55528],{"class":63},[34,57080,67],{"class":40},[34,57082,55809],{"class":63},[34,57084,73],{"class":40},[34,57086,57087],{"class":36,"line":10550},[34,57088,2840],{"class":40},[34,57090,57091,57093,57095],{"class":36,"line":10559},[34,57092,53063],{"class":40},[34,57094,45],{"class":44},[34,57096,48],{"class":40},[34,57098,57099,57101,57103],{"class":36,"line":10565},[34,57100,102],{"class":40},[34,57102,51983],{"class":44},[34,57104,48],{"class":40},[34,57106,57107],{"class":36,"line":10573},[34,57108,3053],{"emptyLinePlaceholder":726},[34,57110,57111,57113,57115],{"class":36,"line":10578},[34,57112,41],{"class":40},[34,57114,52446],{"class":44},[34,57116,48],{"class":40},[34,57118,57119,57121,57123,57125,57127,57129],{"class":36,"line":17256},[34,57120,52790],{"class":40},[34,57122,52258],{"class":44},[34,57124,54132],{"class":149},[34,57126,153],{"class":40},[34,57128,54137],{"class":156},[34,57130,48],{"class":40},[34,57132,57133,57135,57137,57139,57141,57143],{"class":36,"line":17262},[34,57134,51990],{"class":40},[34,57136,52258],{"class":44},[34,57138,54132],{"class":149},[34,57140,153],{"class":40},[34,57142,55870],{"class":156},[34,57144,48],{"class":40},[34,57146,57147,57149,57151,57153,57155,57157,57159,57161,57163],{"class":36,"line":17285},[34,57148,55877],{"class":40},[34,57150,2122],{"class":44},[34,57152,55882],{"class":149},[34,57154,153],{"class":40},[34,57156,55887],{"class":156},[34,57158,55890],{"class":149},[34,57160,153],{"class":40},[34,57162,8305],{"class":156},[34,57164,48],{"class":40},[34,57166,57167,57169,57171],{"class":36,"line":17291},[34,57168,52423],{"class":40},[34,57170,52258],{"class":44},[34,57172,48],{"class":40},[34,57174,57175,57177,57179,57181,57183,57185],{"class":36,"line":17314},[34,57176,51990],{"class":40},[34,57178,52258],{"class":44},[34,57180,54132],{"class":149},[34,57182,153],{"class":40},[34,57184,55917],{"class":156},[34,57186,48],{"class":40},[34,57188,57189,57191,57193,57195,57197],{"class":36,"line":17328},[34,57190,55877],{"class":40},[34,57192,108],{"class":44},[34,57194,55928],{"class":40},[34,57196,108],{"class":44},[34,57198,48],{"class":40},[34,57200,57201,57203,57205],{"class":36,"line":17348},[34,57202,55877],{"class":40},[34,57204,1800],{"class":44},[34,57206,48],{"class":40},[34,57208,57209,57211,57213,57215,57217,57219,57221,57223],{"class":36,"line":17354},[34,57210,55945],{"class":40},[34,57212,755],{"class":44},[34,57214,54132],{"class":149},[34,57216,153],{"class":40},[34,57218,55954],{"class":156},[34,57220,55957],{"class":40},[34,57222,755],{"class":44},[34,57224,48],{"class":40},[34,57226,57227,57229,57231,57233,57235],{"class":36,"line":17365},[34,57228,55945],{"class":40},[34,57230,755],{"class":44},[34,57232,55957],{"class":40},[34,57234,755],{"class":44},[34,57236,48],{"class":40},[34,57238,57239,57241,57243,57245,57247],{"class":36,"line":17388},[34,57240,55945],{"class":40},[34,57242,755],{"class":44},[34,57244,55957],{"class":40},[34,57246,755],{"class":44},[34,57248,48],{"class":40},[34,57250,57251,57253,57255,57257,57259],{"class":36,"line":17410},[34,57252,55945],{"class":40},[34,57254,755],{"class":44},[34,57256,55957],{"class":40},[34,57258,755],{"class":44},[34,57260,48],{"class":40},[34,57262,57263,57265,57267,57269,57271],{"class":36,"line":17415},[34,57264,55945],{"class":40},[34,57266,755],{"class":44},[34,57268,55957],{"class":40},[34,57270,755],{"class":44},[34,57272,48],{"class":40},[34,57274,57275,57277,57279,57281,57283],{"class":36,"line":17421},[34,57276,55945],{"class":40},[34,57278,755],{"class":44},[34,57280,55957],{"class":40},[34,57282,755],{"class":44},[34,57284,48],{"class":40},[34,57286,57287,57289,57291,57293,57295],{"class":36,"line":17435},[34,57288,55945],{"class":40},[34,57290,755],{"class":44},[34,57292,55957],{"class":40},[34,57294,755],{"class":44},[34,57296,48],{"class":40},[34,57298,57299,57301,57303,57305,57307],{"class":36,"line":17448},[34,57300,55945],{"class":40},[34,57302,755],{"class":44},[34,57304,55957],{"class":40},[34,57306,755],{"class":44},[34,57308,48],{"class":40},[34,57310,57311,57313,57315],{"class":36,"line":17453},[34,57312,56050],{"class":40},[34,57314,1800],{"class":44},[34,57316,48],{"class":40},[34,57318,57319,57321,57323],{"class":36,"line":17467},[34,57320,52423],{"class":40},[34,57322,52258],{"class":44},[34,57324,48],{"class":40},[34,57326,57327,57329,57331],{"class":36,"line":17472},[34,57328,53063],{"class":40},[34,57330,52258],{"class":44},[34,57332,48],{"class":40},[34,57334,57335,57337,57339],{"class":36,"line":17478},[34,57336,52790],{"class":40},[34,57338,52459],{"class":44},[34,57340,48],{"class":40},[34,57342,57343,57345,57348,57350],{"class":36,"line":17483},[34,57344,11874],{"class":87},[34,57346,57347],{"class":63}," sliderData",[34,57349,14217],{"class":87},[34,57351,56090],{"class":40},[34,57353,57354,57356,57358,57360,57362,57364,57366],{"class":36,"line":17497},[34,57355,56095],{"class":40},[34,57357,56098],{"class":156},[34,57359,56101],{"class":40},[34,57361,56104],{"class":156},[34,57363,56107],{"class":40},[34,57365,56110],{"class":156},[34,57367,56113],{"class":40},[34,57369,57370,57372,57374,57376,57378,57380,57382],{"class":36,"line":17502},[34,57371,56095],{"class":40},[34,57373,56120],{"class":156},[34,57375,56101],{"class":40},[34,57377,56125],{"class":156},[34,57379,56107],{"class":40},[34,57381,56130],{"class":156},[34,57383,56113],{"class":40},[34,57385,57386,57388,57390,57392,57394,57396,57398],{"class":36,"line":17507},[34,57387,56095],{"class":40},[34,57389,56139],{"class":156},[34,57391,56101],{"class":40},[34,57393,56144],{"class":156},[34,57395,56107],{"class":40},[34,57397,56149],{"class":156},[34,57399,56113],{"class":40},[34,57401,57402,57404,57406,57408,57410,57412,57414],{"class":36,"line":17521},[34,57403,56095],{"class":40},[34,57405,56158],{"class":156},[34,57407,56101],{"class":40},[34,57409,56163],{"class":156},[34,57411,56107],{"class":40},[34,57413,56168],{"class":156},[34,57415,56113],{"class":40},[34,57417,57418,57420,57422,57424,57426,57428,57430],{"class":36,"line":17533},[34,57419,56095],{"class":40},[34,57421,56177],{"class":156},[34,57423,56101],{"class":40},[34,57425,56182],{"class":156},[34,57427,56107],{"class":40},[34,57429,56187],{"class":156},[34,57431,56113],{"class":40},[34,57433,57434,57436,57438,57440,57442,57444,57446],{"class":36,"line":17538},[34,57435,56095],{"class":40},[34,57437,56196],{"class":156},[34,57439,56101],{"class":40},[34,57441,56201],{"class":156},[34,57443,56107],{"class":40},[34,57445,56206],{"class":156},[34,57447,56113],{"class":40},[34,57449,57450,57452,57454,57456,57458,57460,57462],{"class":36,"line":17551},[34,57451,56095],{"class":40},[34,57453,56215],{"class":156},[34,57455,56101],{"class":40},[34,57457,56220],{"class":156},[34,57459,56107],{"class":40},[34,57461,56225],{"class":156},[34,57463,56113],{"class":40},[34,57465,57466,57468,57470,57472,57474,57476,57478],{"class":36,"line":17556},[34,57467,56095],{"class":40},[34,57469,56234],{"class":156},[34,57471,56101],{"class":40},[34,57473,56239],{"class":156},[34,57475,56107],{"class":40},[34,57477,56244],{"class":156},[34,57479,56247],{"class":40},[34,57481,57482],{"class":36,"line":17561},[34,57483,53755],{"class":40},[34,57485,57486],{"class":36,"line":17566},[34,57487,57488],{"class":205},"    \u002F\u002F 1.获取元素\n",[34,57490,57491,57493,57495,57497,57499,57501,57503,57505],{"class":36,"line":17579},[34,57492,11874],{"class":87},[34,57494,56258],{"class":63},[34,57496,14217],{"class":87},[34,57498,55041],{"class":40},[34,57500,55044],{"class":149},[34,57502,801],{"class":40},[34,57504,56269],{"class":156},[34,57506,807],{"class":40},[34,57508,57509,57511,57513,57515,57517,57519,57521,57523],{"class":36,"line":17584},[34,57510,11874],{"class":87},[34,57512,7478],{"class":63},[34,57514,14217],{"class":87},[34,57516,55041],{"class":40},[34,57518,55044],{"class":149},[34,57520,801],{"class":40},[34,57522,56288],{"class":156},[34,57524,807],{"class":40},[34,57526,57527,57529,57531,57533],{"class":36,"line":33284},[34,57528,52865],{"class":87},[34,57530,10091],{"class":40},[34,57532,153],{"class":87},[34,57534,47984],{"class":63},[34,57536,57537],{"class":36,"line":33290},[34,57538,57539],{"class":205},"    \u002F\u002F 2.开启定时器\n",[34,57541,57542],{"class":36,"line":33296},[34,57543,57544],{"class":205},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[34,57546,57547,57550,57552,57554],{"class":36,"line":33302},[34,57548,57549],{"class":149},"    setInterval",[34,57551,801],{"class":40},[34,57553,55094],{"class":87},[34,57555,55097],{"class":40},[34,57557,57558,57560],{"class":36,"line":33308},[34,57559,55102],{"class":40},[34,57561,3355],{"class":87},[34,57563,57564,57566,57568,57570,57573,57575],{"class":36,"line":33319},[34,57565,55125],{"class":87},[34,57567,55128],{"class":40},[34,57569,2364],{"class":87},[34,57571,57572],{"class":40}," sliderData.",[34,57574,52614],{"class":63},[34,57576,13095],{"class":40},[34,57578,57579,57582,57584],{"class":36,"line":33325},[34,57580,57581],{"class":40},"        i ",[34,57583,153],{"class":87},[34,57585,47984],{"class":63},[34,57587,57588],{"class":36,"line":33345},[34,57589,53044],{"class":40},[34,57591,57592],{"class":36,"line":33351},[34,57593,57594],{"class":205},"      \u002F\u002F 更换图片路径\n",[34,57596,57597,57599,57601],{"class":36,"line":33362},[34,57598,56364],{"class":40},[34,57600,153],{"class":87},[34,57602,57603],{"class":40}," sliderData[i].url\n",[34,57605,57606],{"class":36,"line":33368},[34,57607,57608],{"class":205},"      \u002F\u002F 把文字写到p里面\n",[34,57610,57611,57613,57615],{"class":36,"line":33374},[34,57612,56374],{"class":40},[34,57614,153],{"class":87},[34,57616,57617],{"class":40}," sliderData[i].title\n",[34,57619,57620],{"class":36,"line":33380},[34,57621,57622],{"class":205},"      \u002F\u002F 小圆点\n",[34,57624,57625],{"class":36,"line":33386},[34,57626,57627],{"class":205},"      \u002F\u002F 先删除以前的active\n",[34,57629,57630],{"class":36,"line":33392},[34,57631,57632],{"class":205},"      \u002F\u002F 只让当前li添加active\n",[34,57634,57635,57637,57639,57641,57644,57647,57650,57652,57654],{"class":36,"line":33398},[34,57636,56414],{"class":40},[34,57638,55044],{"class":149},[34,57640,801],{"class":40},[34,57642,57643],{"class":156},"'.slider-footer .activate'",[34,57645,57646],{"class":40},").classList.",[34,57648,57649],{"class":149},"remove",[34,57651,801],{"class":40},[34,57653,56432],{"class":156},[34,57655,807],{"class":40},[34,57657,57658,57660,57662,57664,57667,57669,57671,57673,57676,57678,57680,57682,57684],{"class":36,"line":33404},[34,57659,56414],{"class":40},[34,57661,55044],{"class":149},[34,57663,801],{"class":40},[34,57665,57666],{"class":156},"`.slider-footer ul li:nth-child(${",[34,57668,1236],{"class":40},[34,57670,46217],{"class":87},[34,57672,25771],{"class":63},[34,57674,57675],{"class":156},"})`",[34,57677,57646],{"class":40},[34,57679,5987],{"class":149},[34,57681,801],{"class":40},[34,57683,56432],{"class":156},[34,57685,807],{"class":40},[34,57687,57688],{"class":36,"line":33424},[34,57689,3053],{"emptyLinePlaceholder":726},[34,57691,57692,57694,57696],{"class":36,"line":33430},[34,57693,55180],{"class":40},[34,57695,7063],{"class":63},[34,57697,807],{"class":40},[34,57699,57700],{"class":36,"line":33446},[34,57701,3053],{"emptyLinePlaceholder":726},[34,57703,57704,57706,57708],{"class":36,"line":33452},[34,57705,53063],{"class":40},[34,57707,52459],{"class":44},[34,57709,48],{"class":40},[34,57711,57712,57714,57716],{"class":36,"line":33466},[34,57713,102],{"class":40},[34,57715,52446],{"class":44},[34,57717,48],{"class":40},[34,57719,57720],{"class":36,"line":33472},[34,57721,3053],{"emptyLinePlaceholder":726},[34,57723,57724,57726,57728],{"class":36,"line":33487},[34,57725,102],{"class":40},[34,57727,51286],{"class":44},[34,57729,48],{"class":40},[19,57731,57733],{"id":57732},"_317-重要知识点","3.1.7 重要知识点",[108,57735,57736,57737],{},"浏览器在渲染文本时， ",[111,57738,57739],{},"没有空格或换行符就没有“断行点”",[108,57741,57742],{},[2122,57743],{"alt":29,"src":57744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[108,57746,57747],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[108,57749,57750],{},[2122,57751],{"alt":29,"src":57752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[108,57754,57755],{},[2122,57756],{"alt":29,"src":57757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57759,57761],{"id":57760},"_32-dom事件基础","3.2 DOM事件基础",[19,57763,57765],{"id":57764},"_321-事件监听","3.2.1 事件监听",[108,57767,57768],{},[2122,57769],{"alt":29,"src":57770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[108,57772,57773],{},"事件监听有响应的发生",[108,57775,57776],{},[2122,57777],{"alt":29,"src":57778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[108,57780,57781],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[108,57783,57784],{},"对于有名函数,要执行的函数名后边不要加()",[19,57786,57788],{"id":57787},"_322-随机点名案例","3.2.2 随机点名案例",[24,57790,57792],{"className":51284,"code":57791,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,57793,57794,57804,57818,57822,57830,57844,57864,57876,57884,57890,57900,57910,57914,57918,57925,57936,57940,57944,57950,57962,57976,57986,57998,58011,58015,58019,58026,58030,58043,58055,58067,58071,58075,58079,58086,58096,58100,58104,58113,58125,58137,58152,58156,58164,58172,58176,58184,58197,58211,58224,58244,58252,58267,58287,58307,58315,58319,58327,58332,58368,58388,58393,58412,58417,58428,58433,58444,58449,58468,58483,58488,58514,58524,58533,58538,58554,58559,58564,58569,58584,58588,58592,58597,58616,58633,58641,58646,58661,58665,58669,58677,58685,58689],{"__ignoreMap":29},[34,57795,57796,57798,57800,57802],{"class":36,"line":37},[34,57797,51948],{"class":40},[34,57799,51951],{"class":44},[34,57801,51954],{"class":149},[34,57803,48],{"class":40},[34,57805,57806,57808,57810,57812,57814,57816],{"class":36,"line":51},[34,57807,41],{"class":40},[34,57809,51286],{"class":44},[34,57811,51965],{"class":149},[34,57813,153],{"class":40},[34,57815,51970],{"class":156},[34,57817,48],{"class":40},[34,57819,57820],{"class":36,"line":60},[34,57821,3053],{"emptyLinePlaceholder":726},[34,57823,57824,57826,57828],{"class":36,"line":76},[34,57825,41],{"class":40},[34,57827,51983],{"class":44},[34,57829,48],{"class":40},[34,57831,57832,57834,57836,57838,57840,57842],{"class":36,"line":93},[34,57833,52790],{"class":40},[34,57835,51993],{"class":44},[34,57837,51996],{"class":149},[34,57839,153],{"class":40},[34,57841,52001],{"class":156},[34,57843,48],{"class":40},[34,57845,57846,57848,57850,57852,57854,57856,57858,57860,57862],{"class":36,"line":99},[34,57847,52790],{"class":40},[34,57849,51993],{"class":44},[34,57851,15573],{"class":149},[34,57853,153],{"class":40},[34,57855,52040],{"class":156},[34,57857,52020],{"class":149},[34,57859,153],{"class":40},[34,57861,52047],{"class":156},[34,57863,48],{"class":40},[34,57865,57866,57868,57870,57872,57874],{"class":36,"line":353},[34,57867,52790],{"class":40},[34,57869,52056],{"class":44},[34,57871,52059],{"class":40},[34,57873,52056],{"class":44},[34,57875,48],{"class":40},[34,57877,57878,57880,57882],{"class":36,"line":359},[34,57879,52790],{"class":40},[34,57881,45],{"class":44},[34,57883,48],{"class":40},[34,57885,57886,57888],{"class":36,"line":579},[34,57887,7056],{"class":44},[34,57889,57],{"class":40},[34,57891,57892,57894,57896,57898],{"class":36,"line":589},[34,57893,55351],{"class":63},[34,57895,67],{"class":40},[34,57897,987],{"class":63},[34,57899,73],{"class":40},[34,57901,57902,57904,57906,57908],{"class":36,"line":601},[34,57903,55340],{"class":63},[34,57905,67],{"class":40},[34,57907,987],{"class":63},[34,57909,73],{"class":40},[34,57911,57912],{"class":36,"line":613},[34,57913,2840],{"class":40},[34,57915,57916],{"class":36,"line":618},[34,57917,3053],{"emptyLinePlaceholder":726},[34,57919,57920,57923],{"class":36,"line":628},[34,57921,57922],{"class":44},"    h2",[34,57924,57],{"class":40},[34,57926,57927,57930,57932,57934],{"class":36,"line":640},[34,57928,57929],{"class":63},"      text-align",[34,57931,67],{"class":40},[34,57933,52239],{"class":63},[34,57935,73],{"class":40},[34,57937,57938],{"class":36,"line":2301},[34,57939,2840],{"class":40},[34,57941,57942],{"class":36,"line":2307},[34,57943,3053],{"emptyLinePlaceholder":726},[34,57945,57946,57948],{"class":36,"line":2328},[34,57947,55396],{"class":149},[34,57949,57],{"class":40},[34,57951,57952,57954,57956,57958,57960],{"class":36,"line":2333},[34,57953,55415],{"class":63},[34,57955,67],{"class":40},[34,57957,2199],{"class":63},[34,57959,88],{"class":87},[34,57961,73],{"class":40},[34,57963,57964,57966,57968,57970,57972,57974],{"class":36,"line":2347},[34,57965,55351],{"class":63},[34,57967,67],{"class":40},[34,57969,1451],{"class":63},[34,57971,88],{"class":87},[34,57973,52203],{"class":63},[34,57975,73],{"class":40},[34,57977,57978,57980,57982,57984],{"class":36,"line":2352},[34,57979,55652],{"class":63},[34,57981,67],{"class":40},[34,57983,52125],{"class":63},[34,57985,73],{"class":40},[34,57987,57988,57990,57992,57994,57996],{"class":36,"line":2381},[34,57989,55565],{"class":63},[34,57991,67],{"class":40},[34,57993,1619],{"class":63},[34,57995,88],{"class":87},[34,57997,73],{"class":40},[34,57999,58000,58003,58005,58007,58009],{"class":36,"line":2386},[34,58001,58002],{"class":63},"      line-height",[34,58004,67],{"class":40},[34,58006,1196],{"class":63},[34,58008,88],{"class":87},[34,58010,73],{"class":40},[34,58012,58013],{"class":36,"line":2403},[34,58014,2840],{"class":40},[34,58016,58017],{"class":36,"line":2408},[34,58018,3053],{"emptyLinePlaceholder":726},[34,58020,58021,58024],{"class":36,"line":2413},[34,58022,58023],{"class":149},"    .qs",[34,58025,57],{"class":40},[34,58027,58028],{"class":36,"line":2418},[34,58029,3053],{"emptyLinePlaceholder":726},[34,58031,58032,58034,58036,58039,58041],{"class":36,"line":2432},[34,58033,55415],{"class":63},[34,58035,67],{"class":40},[34,58037,58038],{"class":63},"450",[34,58040,88],{"class":87},[34,58042,73],{"class":40},[34,58044,58045,58047,58049,58051,58053],{"class":36,"line":2437},[34,58046,55429],{"class":63},[34,58048,67],{"class":40},[34,58050,1196],{"class":63},[34,58052,88],{"class":87},[34,58054,73],{"class":40},[34,58056,58057,58060,58062,58065],{"class":36,"line":3230},[34,58058,58059],{"class":63},"      color",[34,58061,67],{"class":40},[34,58063,58064],{"class":63},"red",[34,58066,73],{"class":40},[34,58068,58069],{"class":36,"line":3244},[34,58070,3053],{"emptyLinePlaceholder":726},[34,58072,58073],{"class":36,"line":3252},[34,58074,2840],{"class":40},[34,58076,58077],{"class":36,"line":3257},[34,58078,3053],{"emptyLinePlaceholder":726},[34,58080,58081,58084],{"class":36,"line":3263},[34,58082,58083],{"class":149},"    .btns",[34,58085,57],{"class":40},[34,58087,58088,58090,58092,58094],{"class":36,"line":3269},[34,58089,57929],{"class":63},[34,58091,67],{"class":40},[34,58093,52239],{"class":63},[34,58095,73],{"class":40},[34,58097,58098],{"class":36,"line":3274},[34,58099,2840],{"class":40},[34,58101,58102],{"class":36,"line":8601},[34,58103,3053],{"emptyLinePlaceholder":726},[34,58105,58106,58108,58111],{"class":36,"line":8625},[34,58107,58083],{"class":149},[34,58109,58110],{"class":44}," button",[34,58112,57],{"class":40},[34,58114,58115,58117,58119,58121,58123],{"class":36,"line":8630},[34,58116,55415],{"class":63},[34,58118,67],{"class":40},[34,58120,1611],{"class":63},[34,58122,88],{"class":87},[34,58124,73],{"class":40},[34,58126,58127,58129,58131,58133,58135],{"class":36,"line":8636},[34,58128,55429],{"class":63},[34,58130,67],{"class":40},[34,58132,1068],{"class":63},[34,58134,88],{"class":87},[34,58136,73],{"class":40},[34,58138,58139,58141,58143,58145,58148,58150],{"class":36,"line":8663},[34,58140,55351],{"class":63},[34,58142,67],{"class":40},[34,58144,987],{"class":63},[34,58146,58147],{"class":63}," 50",[34,58149,88],{"class":87},[34,58151,73],{"class":40},[34,58153,58154],{"class":36,"line":8668},[34,58155,2840],{"class":40},[34,58157,58158,58160,58162],{"class":36,"line":8674},[34,58159,53063],{"class":40},[34,58161,45],{"class":44},[34,58163,48],{"class":40},[34,58165,58166,58168,58170],{"class":36,"line":8686},[34,58167,102],{"class":40},[34,58169,51983],{"class":44},[34,58171,48],{"class":40},[34,58173,58174],{"class":36,"line":8698},[34,58175,3053],{"emptyLinePlaceholder":726},[34,58177,58178,58180,58182],{"class":36,"line":8710},[34,58179,41],{"class":40},[34,58181,52446],{"class":44},[34,58183,48],{"class":40},[34,58185,58186,58188,58190,58193,58195],{"class":36,"line":10369},[34,58187,52790],{"class":40},[34,58189,14],{"class":44},[34,58191,58192],{"class":40},">随机点名\u003C\u002F",[34,58194,14],{"class":44},[34,58196,48],{"class":40},[34,58198,58199,58201,58203,58205,58207,58209],{"class":36,"line":10394},[34,58200,52790],{"class":40},[34,58202,52258],{"class":44},[34,58204,54132],{"class":149},[34,58206,153],{"class":40},[34,58208,54137],{"class":156},[34,58210,48],{"class":40},[34,58212,58213,58215,58217,58220,58222],{"class":36,"line":10417},[34,58214,51990],{"class":40},[34,58216,34],{"class":44},[34,58218,58219],{"class":40},">名字是：\u003C\u002F",[34,58221,34],{"class":44},[34,58223,48],{"class":40},[34,58225,58226,58228,58230,58232,58234,58237,58240,58242],{"class":36,"line":10441},[34,58227,51990],{"class":40},[34,58229,52258],{"class":44},[34,58231,54132],{"class":149},[34,58233,153],{"class":40},[34,58235,58236],{"class":156},"\"qs\"",[34,58238,58239],{"class":40},">这里显示姓名\u003C\u002F",[34,58241,52258],{"class":44},[34,58243,48],{"class":40},[34,58245,58246,58248,58250],{"class":36,"line":10446},[34,58247,53063],{"class":40},[34,58249,52258],{"class":44},[34,58251,48],{"class":40},[34,58253,58254,58256,58258,58260,58262,58265],{"class":36,"line":10451},[34,58255,52790],{"class":40},[34,58257,52258],{"class":44},[34,58259,54132],{"class":149},[34,58261,153],{"class":40},[34,58263,58264],{"class":156},"\"btns\"",[34,58266,48],{"class":40},[34,58268,58269,58271,58273,58275,58277,58280,58283,58285],{"class":36,"line":10456},[34,58270,51990],{"class":40},[34,58272,54532],{"class":44},[34,58274,54132],{"class":149},[34,58276,153],{"class":40},[34,58278,58279],{"class":156},"\"start\"",[34,58281,58282],{"class":40},">开始\u003C\u002F",[34,58284,54532],{"class":44},[34,58286,48],{"class":40},[34,58288,58289,58291,58293,58295,58297,58300,58303,58305],{"class":36,"line":10465},[34,58290,51990],{"class":40},[34,58292,54532],{"class":44},[34,58294,54132],{"class":149},[34,58296,153],{"class":40},[34,58298,58299],{"class":156},"\"end\"",[34,58301,58302],{"class":40},">结束\u003C\u002F",[34,58304,54532],{"class":44},[34,58306,48],{"class":40},[34,58308,58309,58311,58313],{"class":36,"line":10470},[34,58310,53063],{"class":40},[34,58312,52258],{"class":44},[34,58314,48],{"class":40},[34,58316,58317],{"class":36,"line":10476},[34,58318,3053],{"emptyLinePlaceholder":726},[34,58320,58321,58323,58325],{"class":36,"line":10497},[34,58322,52790],{"class":40},[34,58324,52459],{"class":44},[34,58326,48],{"class":40},[34,58328,58329],{"class":36,"line":10503},[34,58330,58331],{"class":205},"    \u002F\u002F 数据数组\n",[34,58333,58334,58336,58339,58341,58343,58346,58348,58351,58353,58356,58358,58361,58363,58366],{"class":36,"line":10517},[34,58335,11874],{"class":87},[34,58337,58338],{"class":63}," arr",[34,58340,14217],{"class":87},[34,58342,52872],{"class":40},[34,58344,58345],{"class":156},"'马超'",[34,58347,13088],{"class":40},[34,58349,58350],{"class":156},"'黄忠'",[34,58352,13088],{"class":40},[34,58354,58355],{"class":156},"'赵云'",[34,58357,13088],{"class":40},[34,58359,58360],{"class":156},"'关羽'",[34,58362,13088],{"class":40},[34,58364,58365],{"class":156},"'张飞'",[34,58367,33897],{"class":40},[34,58369,58370,58372,58375,58377,58379,58381,58383,58386],{"class":36,"line":10523},[34,58371,11874],{"class":87},[34,58373,58374],{"class":63}," qs",[34,58376,14217],{"class":87},[34,58378,55041],{"class":40},[34,58380,55044],{"class":149},[34,58382,801],{"class":40},[34,58384,58385],{"class":156},"'.qs'",[34,58387,807],{"class":40},[34,58389,58390],{"class":36,"line":10550},[34,58391,58392],{"class":205},"    \u002F\u002F 1.业务1.开始按钮模块\n",[34,58394,58395,58397,58399,58401,58403,58405,58407,58410],{"class":36,"line":10559},[34,58396,11874],{"class":87},[34,58398,4837],{"class":63},[34,58400,14217],{"class":87},[34,58402,55041],{"class":40},[34,58404,55044],{"class":149},[34,58406,801],{"class":40},[34,58408,58409],{"class":156},"'.start'",[34,58411,807],{"class":40},[34,58413,58414],{"class":36,"line":10565},[34,58415,58416],{"class":205},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[34,58418,58419,58421,58424,58426],{"class":36,"line":10573},[34,58420,52865],{"class":87},[34,58422,58423],{"class":40}," timerId ",[34,58425,153],{"class":87},[34,58427,47984],{"class":63},[34,58429,58430],{"class":36,"line":10578},[34,58431,58432],{"class":205},"    \u002F\u002F 随机号要全局变量\n",[34,58434,58435,58437,58440,58442],{"class":36,"line":17256},[34,58436,52865],{"class":87},[34,58438,58439],{"class":40}," random ",[34,58441,153],{"class":87},[34,58443,47984],{"class":63},[34,58445,58446],{"class":36,"line":17262},[34,58447,58448],{"class":205},"    \u002F\u002F 1.1 添加点击事件\n",[34,58450,58451,58454,58457,58459,58462,58464,58466],{"class":36,"line":17285},[34,58452,58453],{"class":40},"    start.",[34,58455,58456],{"class":149},"addEventListener",[34,58458,801],{"class":40},[34,58460,58461],{"class":156},"'click'",[34,58463,13088],{"class":40},[34,58465,55094],{"class":87},[34,58467,55097],{"class":40},[34,58469,58470,58473,58475,58477,58479,58481],{"class":36,"line":17291},[34,58471,58472],{"class":40},"      timerId ",[34,58474,153],{"class":87},[34,58476,55089],{"class":149},[34,58478,801],{"class":40},[34,58480,55094],{"class":87},[34,58482,55097],{"class":40},[34,58484,58485],{"class":36,"line":17314},[34,58486,58487],{"class":205},"        \u002F\u002F 随机数\n",[34,58489,58490,58493,58495,58498,58501,58504,58506,58508,58510,58512],{"class":36,"line":17328},[34,58491,58492],{"class":40},"        random ",[34,58494,153],{"class":87},[34,58496,58497],{"class":149}," parseInt",[34,58499,58500],{"class":40},"(Math.",[34,58502,58503],{"class":149},"random",[34,58505,13703],{"class":40},[34,58507,1250],{"class":87},[34,58509,52611],{"class":40},[34,58511,52614],{"class":63},[34,58513,807],{"class":40},[34,58515,58516,58519,58521],{"class":36,"line":17348},[34,58517,58518],{"class":40},"        qs.innerHTML ",[34,58520,153],{"class":87},[34,58522,58523],{"class":40}," arr[random]\n",[34,58525,58526,58529,58531],{"class":36,"line":17354},[34,58527,58528],{"class":40},"      }, ",[34,58530,1068],{"class":63},[34,58532,807],{"class":40},[34,58534,58535],{"class":36,"line":17365},[34,58536,58537],{"class":205},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[34,58539,58540,58542,58545,58547,58550,58552],{"class":36,"line":17388},[34,58541,55125],{"class":87},[34,58543,58544],{"class":40}," (arr.",[34,58546,52614],{"class":63},[34,58548,58549],{"class":87}," ===",[34,58551,25771],{"class":63},[34,58553,13095],{"class":40},[34,58555,58556],{"class":36,"line":17410},[34,58557,58558],{"class":205},"        \u002F\u002F start.disabled = true\n",[34,58560,58561],{"class":36,"line":17415},[34,58562,58563],{"class":205},"        \u002F\u002F end.disabled = true\n",[34,58565,58566],{"class":36,"line":17421},[34,58567,58568],{"class":205},"        \u002F\u002F 可以合起来写\n",[34,58570,58571,58574,58576,58579,58581],{"class":36,"line":17435},[34,58572,58573],{"class":40},"        start.disabled ",[34,58575,153],{"class":87},[34,58577,58578],{"class":40}," end.disabled ",[34,58580,153],{"class":87},[34,58582,58583],{"class":63}," true\n",[34,58585,58586],{"class":36,"line":17448},[34,58587,53044],{"class":40},[34,58589,58590],{"class":36,"line":17453},[34,58591,34112],{"class":40},[34,58593,58594],{"class":36,"line":17467},[34,58595,58596],{"class":205},"    \u002F\u002F 1.2 关闭按钮模块\n",[34,58598,58599,58601,58603,58605,58607,58609,58611,58614],{"class":36,"line":17472},[34,58600,11874],{"class":87},[34,58602,4853],{"class":63},[34,58604,14217],{"class":87},[34,58606,55041],{"class":40},[34,58608,55044],{"class":149},[34,58610,801],{"class":40},[34,58612,58613],{"class":156},"'.end'",[34,58615,807],{"class":40},[34,58617,58618,58621,58623,58625,58627,58629,58631],{"class":36,"line":17478},[34,58619,58620],{"class":40},"    end.",[34,58622,58456],{"class":149},[34,58624,801],{"class":40},[34,58626,58461],{"class":156},[34,58628,13088],{"class":40},[34,58630,55094],{"class":87},[34,58632,55097],{"class":40},[34,58634,58635,58638],{"class":36,"line":17483},[34,58636,58637],{"class":149},"      clearInterval",[34,58639,58640],{"class":40},"(timerId)\n",[34,58642,58643],{"class":36,"line":17497},[34,58644,58645],{"class":205},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[34,58647,58648,58651,58654,58657,58659],{"class":36,"line":17502},[34,58649,58650],{"class":40},"      arr.",[34,58652,58653],{"class":149},"splice",[34,58655,58656],{"class":40},"(random, ",[34,58658,1013],{"class":63},[34,58660,807],{"class":40},[34,58662,58663],{"class":36,"line":17507},[34,58664,34112],{"class":40},[34,58666,58667],{"class":36,"line":17521},[34,58668,3053],{"emptyLinePlaceholder":726},[34,58670,58671,58673,58675],{"class":36,"line":17533},[34,58672,53063],{"class":40},[34,58674,52459],{"class":44},[34,58676,48],{"class":40},[34,58678,58679,58681,58683],{"class":36,"line":17538},[34,58680,102],{"class":40},[34,58682,52446],{"class":44},[34,58684,48],{"class":40},[34,58686,58687],{"class":36,"line":17551},[34,58688,3053],{"emptyLinePlaceholder":726},[34,58690,58691,58693,58695],{"class":36,"line":17556},[34,58692,102],{"class":40},[34,58694,51286],{"class":44},[34,58696,48],{"class":40},[108,58698,58699],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[19,58701,58703],{"id":58702},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[24,58705,58707],{"className":51284,"code":58706,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,58708,58709,58719,58733,58737,58745,58759,58779,58791,58799,58803,58811,58823,58831,58850,58867,58883,58893,58897,58905,58913,58917],{"__ignoreMap":29},[34,58710,58711,58713,58715,58717],{"class":36,"line":37},[34,58712,51948],{"class":40},[34,58714,51951],{"class":44},[34,58716,51954],{"class":149},[34,58718,48],{"class":40},[34,58720,58721,58723,58725,58727,58729,58731],{"class":36,"line":51},[34,58722,41],{"class":40},[34,58724,51286],{"class":44},[34,58726,51965],{"class":149},[34,58728,153],{"class":40},[34,58730,51970],{"class":156},[34,58732,48],{"class":40},[34,58734,58735],{"class":36,"line":60},[34,58736,3053],{"emptyLinePlaceholder":726},[34,58738,58739,58741,58743],{"class":36,"line":76},[34,58740,41],{"class":40},[34,58742,51983],{"class":44},[34,58744,48],{"class":40},[34,58746,58747,58749,58751,58753,58755,58757],{"class":36,"line":93},[34,58748,52790],{"class":40},[34,58750,51993],{"class":44},[34,58752,51996],{"class":149},[34,58754,153],{"class":40},[34,58756,52001],{"class":156},[34,58758,48],{"class":40},[34,58760,58761,58763,58765,58767,58769,58771,58773,58775,58777],{"class":36,"line":99},[34,58762,52790],{"class":40},[34,58764,51993],{"class":44},[34,58766,15573],{"class":149},[34,58768,153],{"class":40},[34,58770,52040],{"class":156},[34,58772,52020],{"class":149},[34,58774,153],{"class":40},[34,58776,52047],{"class":156},[34,58778,48],{"class":40},[34,58780,58781,58783,58785,58787,58789],{"class":36,"line":353},[34,58782,52790],{"class":40},[34,58784,52056],{"class":44},[34,58786,52059],{"class":40},[34,58788,52056],{"class":44},[34,58790,48],{"class":40},[34,58792,58793,58795,58797],{"class":36,"line":359},[34,58794,102],{"class":40},[34,58796,51983],{"class":44},[34,58798,48],{"class":40},[34,58800,58801],{"class":36,"line":579},[34,58802,3053],{"emptyLinePlaceholder":726},[34,58804,58805,58807,58809],{"class":36,"line":589},[34,58806,41],{"class":40},[34,58808,52446],{"class":44},[34,58810,48],{"class":40},[34,58812,58813,58815,58817,58819,58821],{"class":36,"line":601},[34,58814,52790],{"class":40},[34,58816,54532],{"class":44},[34,58818,54538],{"class":40},[34,58820,54532],{"class":44},[34,58822,48],{"class":40},[34,58824,58825,58827,58829],{"class":36,"line":613},[34,58826,52790],{"class":40},[34,58828,52459],{"class":44},[34,58830,48],{"class":40},[34,58832,58833,58835,58837,58839,58841,58843,58845,58848],{"class":36,"line":618},[34,58834,11874],{"class":87},[34,58836,55036],{"class":63},[34,58838,14217],{"class":87},[34,58840,55041],{"class":40},[34,58842,55044],{"class":149},[34,58844,801],{"class":40},[34,58846,58847],{"class":156},"'button'",[34,58849,807],{"class":40},[34,58851,58852,58855,58857,58859,58861,58863,58865],{"class":36,"line":628},[34,58853,58854],{"class":40},"    btn.",[34,58856,58456],{"class":149},[34,58858,801],{"class":40},[34,58860,58461],{"class":156},[34,58862,13088],{"class":40},[34,58864,55094],{"class":87},[34,58866,55097],{"class":40},[34,58868,58869,58872,58874,58876,58879,58881],{"class":36,"line":640},[34,58870,58871],{"class":87},"      const",[34,58873,2893],{"class":63},[34,58875,14217],{"class":87},[34,58877,58878],{"class":40}," Math.",[34,58880,58503],{"class":149},[34,58882,2629],{"class":40},[34,58884,58885,58888,58891],{"class":36,"line":2301},[34,58886,58887],{"class":40},"      console.",[34,58889,58890],{"class":149},"log",[34,58892,814],{"class":40},[34,58894,58895],{"class":36,"line":2307},[34,58896,34112],{"class":40},[34,58898,58899,58901,58903],{"class":36,"line":2328},[34,58900,53063],{"class":40},[34,58902,52459],{"class":44},[34,58904,48],{"class":40},[34,58906,58907,58909,58911],{"class":36,"line":2333},[34,58908,102],{"class":40},[34,58910,52446],{"class":44},[34,58912,48],{"class":40},[34,58914,58915],{"class":36,"line":2347},[34,58916,3053],{"emptyLinePlaceholder":726},[34,58918,58919,58921,58923],{"class":36,"line":2352},[34,58920,102],{"class":40},[34,58922,51286],{"class":44},[34,58924,48],{"class":40},[108,58926,58927],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[108,58929,58930],{},"常量不可以重新赋值",[108,58932,58933],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[24,58935,58937],{"className":51284,"code":58936,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,58938,58939,58949,58963,58967,58975,58989,59009,59021,59029,59033,59041,59053,59061,59072,59090,59106,59120,59128,59132,59140,59148,59152],{"__ignoreMap":29},[34,58940,58941,58943,58945,58947],{"class":36,"line":37},[34,58942,51948],{"class":40},[34,58944,51951],{"class":44},[34,58946,51954],{"class":149},[34,58948,48],{"class":40},[34,58950,58951,58953,58955,58957,58959,58961],{"class":36,"line":51},[34,58952,41],{"class":40},[34,58954,51286],{"class":44},[34,58956,51965],{"class":149},[34,58958,153],{"class":40},[34,58960,51970],{"class":156},[34,58962,48],{"class":40},[34,58964,58965],{"class":36,"line":60},[34,58966,3053],{"emptyLinePlaceholder":726},[34,58968,58969,58971,58973],{"class":36,"line":76},[34,58970,41],{"class":40},[34,58972,51983],{"class":44},[34,58974,48],{"class":40},[34,58976,58977,58979,58981,58983,58985,58987],{"class":36,"line":93},[34,58978,52790],{"class":40},[34,58980,51993],{"class":44},[34,58982,51996],{"class":149},[34,58984,153],{"class":40},[34,58986,52001],{"class":156},[34,58988,48],{"class":40},[34,58990,58991,58993,58995,58997,58999,59001,59003,59005,59007],{"class":36,"line":99},[34,58992,52790],{"class":40},[34,58994,51993],{"class":44},[34,58996,15573],{"class":149},[34,58998,153],{"class":40},[34,59000,52040],{"class":156},[34,59002,52020],{"class":149},[34,59004,153],{"class":40},[34,59006,52047],{"class":156},[34,59008,48],{"class":40},[34,59010,59011,59013,59015,59017,59019],{"class":36,"line":353},[34,59012,52790],{"class":40},[34,59014,52056],{"class":44},[34,59016,52059],{"class":40},[34,59018,52056],{"class":44},[34,59020,48],{"class":40},[34,59022,59023,59025,59027],{"class":36,"line":359},[34,59024,102],{"class":40},[34,59026,51983],{"class":44},[34,59028,48],{"class":40},[34,59030,59031],{"class":36,"line":579},[34,59032,3053],{"emptyLinePlaceholder":726},[34,59034,59035,59037,59039],{"class":36,"line":589},[34,59036,41],{"class":40},[34,59038,52446],{"class":44},[34,59040,48],{"class":40},[34,59042,59043,59045,59047,59049,59051],{"class":36,"line":601},[34,59044,52790],{"class":40},[34,59046,54532],{"class":44},[34,59048,54538],{"class":40},[34,59050,54532],{"class":44},[34,59052,48],{"class":40},[34,59054,59055,59057,59059],{"class":36,"line":613},[34,59056,52790],{"class":40},[34,59058,52459],{"class":44},[34,59060,48],{"class":40},[34,59062,59063,59065,59067,59069],{"class":36,"line":618},[34,59064,11874],{"class":87},[34,59066,2893],{"class":63},[34,59068,14217],{"class":87},[34,59070,59071],{"class":63}," 10\n",[34,59073,59074,59076,59078,59080,59082,59084,59086,59088],{"class":36,"line":628},[34,59075,11874],{"class":87},[34,59077,55036],{"class":63},[34,59079,14217],{"class":87},[34,59081,55041],{"class":40},[34,59083,55044],{"class":149},[34,59085,801],{"class":40},[34,59087,58847],{"class":156},[34,59089,807],{"class":40},[34,59091,59092,59094,59096,59098,59100,59102,59104],{"class":36,"line":640},[34,59093,58854],{"class":40},[34,59095,58456],{"class":149},[34,59097,801],{"class":40},[34,59099,58461],{"class":156},[34,59101,13088],{"class":40},[34,59103,55094],{"class":87},[34,59105,55097],{"class":40},[34,59107,59108,59110,59112,59114,59116,59118],{"class":36,"line":2301},[34,59109,58871],{"class":87},[34,59111,2893],{"class":63},[34,59113,14217],{"class":87},[34,59115,58878],{"class":40},[34,59117,58503],{"class":149},[34,59119,2629],{"class":40},[34,59121,59122,59124,59126],{"class":36,"line":2307},[34,59123,58887],{"class":40},[34,59125,58890],{"class":149},[34,59127,814],{"class":40},[34,59129,59130],{"class":36,"line":2328},[34,59131,34112],{"class":40},[34,59133,59134,59136,59138],{"class":36,"line":2333},[34,59135,53063],{"class":40},[34,59137,52459],{"class":44},[34,59139,48],{"class":40},[34,59141,59142,59144,59146],{"class":36,"line":2347},[34,59143,102],{"class":40},[34,59145,52446],{"class":44},[34,59147,48],{"class":40},[34,59149,59150],{"class":36,"line":2352},[34,59151,3053],{"emptyLinePlaceholder":726},[34,59153,59154,59156,59158],{"class":36,"line":2381},[34,59155,102],{"class":40},[34,59157,51286],{"class":44},[34,59159,48],{"class":40},[108,59161,59162],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[24,59164,59166],{"className":51284,"code":59165,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,59167,59168,59178,59192,59196,59204,59218,59238,59250,59258,59262,59270,59282,59290,59300,59318,59334,59347,59355,59359,59367,59375,59379],{"__ignoreMap":29},[34,59169,59170,59172,59174,59176],{"class":36,"line":37},[34,59171,51948],{"class":40},[34,59173,51951],{"class":44},[34,59175,51954],{"class":149},[34,59177,48],{"class":40},[34,59179,59180,59182,59184,59186,59188,59190],{"class":36,"line":51},[34,59181,41],{"class":40},[34,59183,51286],{"class":44},[34,59185,51965],{"class":149},[34,59187,153],{"class":40},[34,59189,51970],{"class":156},[34,59191,48],{"class":40},[34,59193,59194],{"class":36,"line":60},[34,59195,3053],{"emptyLinePlaceholder":726},[34,59197,59198,59200,59202],{"class":36,"line":76},[34,59199,41],{"class":40},[34,59201,51983],{"class":44},[34,59203,48],{"class":40},[34,59205,59206,59208,59210,59212,59214,59216],{"class":36,"line":93},[34,59207,52790],{"class":40},[34,59209,51993],{"class":44},[34,59211,51996],{"class":149},[34,59213,153],{"class":40},[34,59215,52001],{"class":156},[34,59217,48],{"class":40},[34,59219,59220,59222,59224,59226,59228,59230,59232,59234,59236],{"class":36,"line":99},[34,59221,52790],{"class":40},[34,59223,51993],{"class":44},[34,59225,15573],{"class":149},[34,59227,153],{"class":40},[34,59229,52040],{"class":156},[34,59231,52020],{"class":149},[34,59233,153],{"class":40},[34,59235,52047],{"class":156},[34,59237,48],{"class":40},[34,59239,59240,59242,59244,59246,59248],{"class":36,"line":353},[34,59241,52790],{"class":40},[34,59243,52056],{"class":44},[34,59245,52059],{"class":40},[34,59247,52056],{"class":44},[34,59249,48],{"class":40},[34,59251,59252,59254,59256],{"class":36,"line":359},[34,59253,102],{"class":40},[34,59255,51983],{"class":44},[34,59257,48],{"class":40},[34,59259,59260],{"class":36,"line":579},[34,59261,3053],{"emptyLinePlaceholder":726},[34,59263,59264,59266,59268],{"class":36,"line":589},[34,59265,41],{"class":40},[34,59267,52446],{"class":44},[34,59269,48],{"class":40},[34,59271,59272,59274,59276,59278,59280],{"class":36,"line":601},[34,59273,52790],{"class":40},[34,59275,54532],{"class":44},[34,59277,54538],{"class":40},[34,59279,54532],{"class":44},[34,59281,48],{"class":40},[34,59283,59284,59286,59288],{"class":36,"line":613},[34,59285,52790],{"class":40},[34,59287,52459],{"class":44},[34,59289,48],{"class":40},[34,59291,59292,59294,59296,59298],{"class":36,"line":618},[34,59293,11874],{"class":87},[34,59295,2893],{"class":63},[34,59297,14217],{"class":87},[34,59299,59071],{"class":63},[34,59301,59302,59304,59306,59308,59310,59312,59314,59316],{"class":36,"line":628},[34,59303,11874],{"class":87},[34,59305,55036],{"class":63},[34,59307,14217],{"class":87},[34,59309,55041],{"class":40},[34,59311,55044],{"class":149},[34,59313,801],{"class":40},[34,59315,58847],{"class":156},[34,59317,807],{"class":40},[34,59319,59320,59322,59324,59326,59328,59330,59332],{"class":36,"line":640},[34,59321,58854],{"class":40},[34,59323,58456],{"class":149},[34,59325,801],{"class":40},[34,59327,58461],{"class":156},[34,59329,13088],{"class":40},[34,59331,55094],{"class":87},[34,59333,55097],{"class":40},[34,59335,59336,59339,59341,59343,59345],{"class":36,"line":2301},[34,59337,59338],{"class":40},"      num ",[34,59340,153],{"class":87},[34,59342,58878],{"class":40},[34,59344,58503],{"class":149},[34,59346,2629],{"class":40},[34,59348,59349,59351,59353],{"class":36,"line":2307},[34,59350,58887],{"class":40},[34,59352,58890],{"class":149},[34,59354,814],{"class":40},[34,59356,59357],{"class":36,"line":2328},[34,59358,34112],{"class":40},[34,59360,59361,59363,59365],{"class":36,"line":2333},[34,59362,53063],{"class":40},[34,59364,52459],{"class":44},[34,59366,48],{"class":40},[34,59368,59369,59371,59373],{"class":36,"line":2347},[34,59370,102],{"class":40},[34,59372,52446],{"class":44},[34,59374,48],{"class":40},[34,59376,59377],{"class":36,"line":2352},[34,59378,3053],{"emptyLinePlaceholder":726},[34,59380,59381,59383,59385],{"class":36,"line":2381},[34,59382,102],{"class":40},[34,59384,51286],{"class":44},[34,59386,48],{"class":40},[108,59388,59389],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[19,59391,59393],{"id":59392},"_324-事件监听版本","3.2.4 事件监听版本",[108,59395,59396],{},[2122,59397],{"alt":29,"src":59398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[108,59400,59401],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[108,59403,59404],{},"这种方式会覆盖前边的事件监听:",[24,59406,59408],{"className":51284,"code":59407,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,59409,59410,59420,59434,59438,59446,59460,59480,59492,59500,59504,59512,59524,59532,59550,59564,59575,59579,59591,59601,59605,59613,59621,59625],{"__ignoreMap":29},[34,59411,59412,59414,59416,59418],{"class":36,"line":37},[34,59413,51948],{"class":40},[34,59415,51951],{"class":44},[34,59417,51954],{"class":149},[34,59419,48],{"class":40},[34,59421,59422,59424,59426,59428,59430,59432],{"class":36,"line":51},[34,59423,41],{"class":40},[34,59425,51286],{"class":44},[34,59427,51965],{"class":149},[34,59429,153],{"class":40},[34,59431,51970],{"class":156},[34,59433,48],{"class":40},[34,59435,59436],{"class":36,"line":60},[34,59437,3053],{"emptyLinePlaceholder":726},[34,59439,59440,59442,59444],{"class":36,"line":76},[34,59441,41],{"class":40},[34,59443,51983],{"class":44},[34,59445,48],{"class":40},[34,59447,59448,59450,59452,59454,59456,59458],{"class":36,"line":93},[34,59449,52790],{"class":40},[34,59451,51993],{"class":44},[34,59453,51996],{"class":149},[34,59455,153],{"class":40},[34,59457,52001],{"class":156},[34,59459,48],{"class":40},[34,59461,59462,59464,59466,59468,59470,59472,59474,59476,59478],{"class":36,"line":99},[34,59463,52790],{"class":40},[34,59465,51993],{"class":44},[34,59467,15573],{"class":149},[34,59469,153],{"class":40},[34,59471,52040],{"class":156},[34,59473,52020],{"class":149},[34,59475,153],{"class":40},[34,59477,52047],{"class":156},[34,59479,48],{"class":40},[34,59481,59482,59484,59486,59488,59490],{"class":36,"line":353},[34,59483,52790],{"class":40},[34,59485,52056],{"class":44},[34,59487,52059],{"class":40},[34,59489,52056],{"class":44},[34,59491,48],{"class":40},[34,59493,59494,59496,59498],{"class":36,"line":359},[34,59495,102],{"class":40},[34,59497,51983],{"class":44},[34,59499,48],{"class":40},[34,59501,59502],{"class":36,"line":579},[34,59503,3053],{"emptyLinePlaceholder":726},[34,59505,59506,59508,59510],{"class":36,"line":589},[34,59507,41],{"class":40},[34,59509,52446],{"class":44},[34,59511,48],{"class":40},[34,59513,59514,59516,59518,59520,59522],{"class":36,"line":601},[34,59515,52790],{"class":40},[34,59517,54532],{"class":44},[34,59519,54538],{"class":40},[34,59521,54532],{"class":44},[34,59523,48],{"class":40},[34,59525,59526,59528,59530],{"class":36,"line":613},[34,59527,52790],{"class":40},[34,59529,52459],{"class":44},[34,59531,48],{"class":40},[34,59533,59534,59536,59538,59540,59542,59544,59546,59548],{"class":36,"line":618},[34,59535,11874],{"class":87},[34,59537,55036],{"class":63},[34,59539,14217],{"class":87},[34,59541,55041],{"class":40},[34,59543,55044],{"class":149},[34,59545,801],{"class":40},[34,59547,58847],{"class":156},[34,59549,807],{"class":40},[34,59551,59552,59554,59557,59559,59562],{"class":36,"line":628},[34,59553,58854],{"class":40},[34,59555,59556],{"class":149},"onclick",[34,59558,14217],{"class":87},[34,59560,59561],{"class":87}," function",[34,59563,55097],{"class":40},[34,59565,59566,59569,59571,59573],{"class":36,"line":640},[34,59567,59568],{"class":149},"      alert",[34,59570,801],{"class":40},[34,59572,1267],{"class":63},[34,59574,807],{"class":40},[34,59576,59577],{"class":36,"line":2301},[34,59578,2840],{"class":40},[34,59580,59581,59583,59585,59587,59589],{"class":36,"line":2307},[34,59582,58854],{"class":40},[34,59584,59556],{"class":149},[34,59586,14217],{"class":87},[34,59588,59561],{"class":87},[34,59590,55097],{"class":40},[34,59592,59593,59595,59597,59599],{"class":36,"line":2328},[34,59594,59568],{"class":149},[34,59596,801],{"class":40},[34,59598,1545],{"class":63},[34,59600,807],{"class":40},[34,59602,59603],{"class":36,"line":2333},[34,59604,2840],{"class":40},[34,59606,59607,59609,59611],{"class":36,"line":2347},[34,59608,53063],{"class":40},[34,59610,52459],{"class":44},[34,59612,48],{"class":40},[34,59614,59615,59617,59619],{"class":36,"line":2352},[34,59616,102],{"class":40},[34,59618,52446],{"class":44},[34,59620,48],{"class":40},[34,59622,59623],{"class":36,"line":2381},[34,59624,3053],{"emptyLinePlaceholder":726},[34,59626,59627,59629,59631],{"class":36,"line":2386},[34,59628,102],{"class":40},[34,59630,51286],{"class":44},[34,59632,48],{"class":40},[108,59634,59635],{},"只要点击就输出结果为22,前边11被覆盖了",[24,59637,59639],{"className":51284,"code":59638,"language":51286,"meta":29,"style":29},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[31,59640,59641,59646,59651,59655,59660,59665],{"__ignoreMap":29},[34,59642,59643],{"class":36,"line":37},[34,59644,59645],{"class":40},"  btn.addEventListener('click', function () {\n",[34,59647,59648],{"class":36,"line":51},[34,59649,59650],{"class":40},"      alert(11)\n",[34,59652,59653],{"class":36,"line":60},[34,59654,34112],{"class":40},[34,59656,59657],{"class":36,"line":76},[34,59658,59659],{"class":40},"    btn.addEventListener('click', function () {\n",[34,59661,59662],{"class":36,"line":93},[34,59663,59664],{"class":40},"      alert(22)\n",[34,59666,59667],{"class":36,"line":99},[34,59668,34112],{"class":40},[108,59670,59671],{},"点击第一次输出11,第二次点击为22",[19,59673,59675],{"id":59674},"_325-事件类型","3.2.5 事件类型",[108,59677,59678],{},[2122,59679],{"alt":29,"src":59680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22650,59682,59684],{"id":59683},"_3251-鼠标事件","3.2.5.1 鼠标事件",[108,59686,59687],{},"补充知识:",[108,59689,59690],{},"轮播图自动播放模块,可以使用",[108,59692,59693],{},"let timerId = setInterval(function () {",[108,59695,59696],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[108,59698,59699],{},"用js方法模拟进行点击事件,click必须加()",[108,59701,59702],{},"next.click()",[108,59704,59705],{},"}, 1000)",[108,59707,59708],{},[2122,59709],{"alt":29,"src":59710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[24,59712,59714],{"className":53713,"code":59713,"language":53715,"meta":29,"style":29},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,59715,59716,59720,59730,59744,59748,59756,59771,59791,59811,59824,59832,59837,59842,59846,59850,59855,59860,59865,59870,59874,59878,59883,59888,59893,59897,59901,59906,59910,59915,59920,59924,59928,59933,59938,59943,59948,59953,59957,59961,59966,59971,59976,59981,59986,59990,59994,59999,60004,60009,60014,60019,60024,60029,60034,60039,60044,60048,60052,60057,60062,60066,60070,60075,60080,60084,60089,60094,60098,60102,60107,60111,60116,60121,60125,60130,60134,60138,60143,60148,60153,60158,60163,60168,60173,60177,60181,60185,60190,60195,60200,60205,60209,60217,60225,60229,60237,60252,60266,60287,60295,60309,60322,60337,60356,60368,60380,60392,60404,60416,60428,60440,60448,60463,60487,60511,60519,60527,60535,60543,60548,60553,60558,60563,60568,60573,60578,60583,60588,60593,60597,60602,60607,60612,60617,60622,60627,60632,60637,60642,60646,60651,60656,60661,60666,60671,60676,60681,60686,60691,60696,60701,60706,60710,60714,60719,60724,60729,60733,60738,60743,60748,60753,60758,60762,60767,60771,60775,60779,60783,60787,60791,60796,60801,60806,60811,60816,60821,60826,60831,60836,60840,60844,60849,60854,60859,60864,60869,60873,60878,60883,60888,60893,60898,60903,60907,60911,60916,60920,60925,60929,60934,60939,60944,60949,60954,60959,60963,60971,60979,60983],{"__ignoreMap":29},[34,59717,59718],{"class":36,"line":37},[34,59719,3053],{"emptyLinePlaceholder":726},[34,59721,59722,59724,59726,59728],{"class":36,"line":51},[34,59723,51948],{"class":40},[34,59725,51951],{"class":87},[34,59727,51954],{"class":63},[34,59729,48],{"class":40},[34,59731,59732,59734,59736,59738,59740,59742],{"class":36,"line":60},[34,59733,41],{"class":40},[34,59735,51286],{"class":44},[34,59737,51965],{"class":149},[34,59739,153],{"class":40},[34,59741,51970],{"class":156},[34,59743,48],{"class":40},[34,59745,59746],{"class":36,"line":76},[34,59747,3053],{"emptyLinePlaceholder":726},[34,59749,59750,59752,59754],{"class":36,"line":93},[34,59751,41],{"class":40},[34,59753,51983],{"class":44},[34,59755,48],{"class":40},[34,59757,59758,59760,59762,59764,59766,59768],{"class":36,"line":99},[34,59759,52790],{"class":40},[34,59761,51993],{"class":44},[34,59763,51996],{"class":149},[34,59765,153],{"class":40},[34,59767,52001],{"class":156},[34,59769,59770],{"class":40}," \u002F>\n",[34,59772,59773,59775,59777,59779,59781,59783,59785,59787,59789],{"class":36,"line":353},[34,59774,52790],{"class":40},[34,59776,51993],{"class":44},[34,59778,52012],{"class":149},[34,59780,153],{"class":40},[34,59782,52017],{"class":156},[34,59784,52020],{"class":149},[34,59786,153],{"class":40},[34,59788,52025],{"class":156},[34,59790,59770],{"class":40},[34,59792,59793,59795,59797,59799,59801,59803,59805,59807,59809],{"class":36,"line":359},[34,59794,52790],{"class":40},[34,59796,51993],{"class":44},[34,59798,15573],{"class":149},[34,59800,153],{"class":40},[34,59802,52040],{"class":156},[34,59804,52020],{"class":149},[34,59806,153],{"class":40},[34,59808,52047],{"class":156},[34,59810,59770],{"class":40},[34,59812,59813,59815,59817,59820,59822],{"class":36,"line":579},[34,59814,52790],{"class":40},[34,59816,52056],{"class":44},[34,59818,59819],{"class":40},">轮播图点击切换\u003C\u002F",[34,59821,52056],{"class":44},[34,59823,48],{"class":40},[34,59825,59826,59828,59830],{"class":36,"line":589},[34,59827,52790],{"class":40},[34,59829,45],{"class":44},[34,59831,48],{"class":40},[34,59833,59834],{"class":36,"line":601},[34,59835,59836],{"class":40},"    * {\n",[34,59838,59839],{"class":36,"line":613},[34,59840,59841],{"class":40},"      box-sizing: border-box;\n",[34,59843,59844],{"class":36,"line":618},[34,59845,2840],{"class":40},[34,59847,59848],{"class":36,"line":628},[34,59849,3053],{"emptyLinePlaceholder":726},[34,59851,59852],{"class":36,"line":640},[34,59853,59854],{"class":40},"    .slider {\n",[34,59856,59857],{"class":36,"line":2301},[34,59858,59859],{"class":40},"      width: 560px;\n",[34,59861,59862],{"class":36,"line":2307},[34,59863,59864],{"class":40},"      height: 400px;\n",[34,59866,59867],{"class":36,"line":2328},[34,59868,59869],{"class":40},"      overflow: hidden;\n",[34,59871,59872],{"class":36,"line":2333},[34,59873,2840],{"class":40},[34,59875,59876],{"class":36,"line":2347},[34,59877,3053],{"emptyLinePlaceholder":726},[34,59879,59880],{"class":36,"line":2352},[34,59881,59882],{"class":40},"    .slider-wrapper {\n",[34,59884,59885],{"class":36,"line":2381},[34,59886,59887],{"class":40},"      width: 100%;\n",[34,59889,59890],{"class":36,"line":2386},[34,59891,59892],{"class":40},"      height: 320px;\n",[34,59894,59895],{"class":36,"line":2403},[34,59896,2840],{"class":40},[34,59898,59899],{"class":36,"line":2408},[34,59900,3053],{"emptyLinePlaceholder":726},[34,59902,59903],{"class":36,"line":2413},[34,59904,59905],{"class":40},"    .slider-wrapper img {\n",[34,59907,59908],{"class":36,"line":2418},[34,59909,59887],{"class":40},[34,59911,59912],{"class":36,"line":2432},[34,59913,59914],{"class":40},"      height: 100%;\n",[34,59916,59917],{"class":36,"line":2437},[34,59918,59919],{"class":40},"      display: block;\n",[34,59921,59922],{"class":36,"line":3230},[34,59923,2840],{"class":40},[34,59925,59926],{"class":36,"line":3244},[34,59927,3053],{"emptyLinePlaceholder":726},[34,59929,59930],{"class":36,"line":3252},[34,59931,59932],{"class":40},"    .slider-footer {\n",[34,59934,59935],{"class":36,"line":3257},[34,59936,59937],{"class":40},"      height: 80px;\n",[34,59939,59940],{"class":36,"line":3263},[34,59941,59942],{"class":40},"      background-color: rgb(100, 67, 68);\n",[34,59944,59945],{"class":36,"line":3269},[34,59946,59947],{"class":40},"      padding: 12px 12px 0 12px;\n",[34,59949,59950],{"class":36,"line":3274},[34,59951,59952],{"class":40},"      position: relative;\n",[34,59954,59955],{"class":36,"line":8601},[34,59956,2840],{"class":40},[34,59958,59959],{"class":36,"line":8625},[34,59960,3053],{"emptyLinePlaceholder":726},[34,59962,59963],{"class":36,"line":8630},[34,59964,59965],{"class":40},"    .slider-footer .toggle {\n",[34,59967,59968],{"class":36,"line":8636},[34,59969,59970],{"class":40},"      position: absolute;\n",[34,59972,59973],{"class":36,"line":8663},[34,59974,59975],{"class":40},"      right: 0;\n",[34,59977,59978],{"class":36,"line":8668},[34,59979,59980],{"class":40},"      top: 12px;\n",[34,59982,59983],{"class":36,"line":8674},[34,59984,59985],{"class":40},"      display: flex;\n",[34,59987,59988],{"class":36,"line":8686},[34,59989,2840],{"class":40},[34,59991,59992],{"class":36,"line":8698},[34,59993,3053],{"emptyLinePlaceholder":726},[34,59995,59996],{"class":36,"line":8710},[34,59997,59998],{"class":40},"    .slider-footer .toggle button {\n",[34,60000,60001],{"class":36,"line":10369},[34,60002,60003],{"class":40},"      margin-right: 12px;\n",[34,60005,60006],{"class":36,"line":10394},[34,60007,60008],{"class":40},"      width: 28px;\n",[34,60010,60011],{"class":36,"line":10417},[34,60012,60013],{"class":40},"      height: 28px;\n",[34,60015,60016],{"class":36,"line":10441},[34,60017,60018],{"class":40},"      appearance: none;\n",[34,60020,60021],{"class":36,"line":10446},[34,60022,60023],{"class":40},"      border: none;\n",[34,60025,60026],{"class":36,"line":10451},[34,60027,60028],{"class":40},"      background: rgba(255, 255, 255, 0.1);\n",[34,60030,60031],{"class":36,"line":10456},[34,60032,60033],{"class":40},"      color: #fff;\n",[34,60035,60036],{"class":36,"line":10465},[34,60037,60038],{"class":40},"      border-radius: 4px;\n",[34,60040,60041],{"class":36,"line":10470},[34,60042,60043],{"class":40},"      cursor: pointer;\n",[34,60045,60046],{"class":36,"line":10476},[34,60047,2840],{"class":40},[34,60049,60050],{"class":36,"line":10497},[34,60051,3053],{"emptyLinePlaceholder":726},[34,60053,60054],{"class":36,"line":10503},[34,60055,60056],{"class":40},"    .slider-footer .toggle button:hover {\n",[34,60058,60059],{"class":36,"line":10517},[34,60060,60061],{"class":40},"      background: rgba(255, 255, 255, 0.2);\n",[34,60063,60064],{"class":36,"line":10523},[34,60065,2840],{"class":40},[34,60067,60068],{"class":36,"line":10550},[34,60069,3053],{"emptyLinePlaceholder":726},[34,60071,60072],{"class":36,"line":10559},[34,60073,60074],{"class":40},"    .slider-footer p {\n",[34,60076,60077],{"class":36,"line":10565},[34,60078,60079],{"class":40},"      margin: 0;\n",[34,60081,60082],{"class":36,"line":10573},[34,60083,60033],{"class":40},[34,60085,60086],{"class":36,"line":10578},[34,60087,60088],{"class":40},"      font-size: 18px;\n",[34,60090,60091],{"class":36,"line":17256},[34,60092,60093],{"class":40},"      margin-bottom: 10px;\n",[34,60095,60096],{"class":36,"line":17262},[34,60097,2840],{"class":40},[34,60099,60100],{"class":36,"line":17285},[34,60101,3053],{"emptyLinePlaceholder":726},[34,60103,60104],{"class":36,"line":17291},[34,60105,60106],{"class":40},"    .slider-indicator {\n",[34,60108,60109],{"class":36,"line":17314},[34,60110,60079],{"class":40},[34,60112,60113],{"class":36,"line":17328},[34,60114,60115],{"class":40},"      padding: 0;\n",[34,60117,60118],{"class":36,"line":17348},[34,60119,60120],{"class":40},"      list-style: none;\n",[34,60122,60123],{"class":36,"line":17354},[34,60124,59985],{"class":40},[34,60126,60127],{"class":36,"line":17365},[34,60128,60129],{"class":40},"      align-items: center;\n",[34,60131,60132],{"class":36,"line":17388},[34,60133,2840],{"class":40},[34,60135,60136],{"class":36,"line":17410},[34,60137,3053],{"emptyLinePlaceholder":726},[34,60139,60140],{"class":36,"line":17415},[34,60141,60142],{"class":40},"    .slider-indicator li {\n",[34,60144,60145],{"class":36,"line":17421},[34,60146,60147],{"class":40},"      width: 8px;\n",[34,60149,60150],{"class":36,"line":17435},[34,60151,60152],{"class":40},"      height: 8px;\n",[34,60154,60155],{"class":36,"line":17448},[34,60156,60157],{"class":40},"      margin: 4px;\n",[34,60159,60160],{"class":36,"line":17453},[34,60161,60162],{"class":40},"      border-radius: 50%;\n",[34,60164,60165],{"class":36,"line":17467},[34,60166,60167],{"class":40},"      background: #fff;\n",[34,60169,60170],{"class":36,"line":17472},[34,60171,60172],{"class":40},"      opacity: 0.4;\n",[34,60174,60175],{"class":36,"line":17478},[34,60176,60043],{"class":40},[34,60178,60179],{"class":36,"line":17483},[34,60180,2840],{"class":40},[34,60182,60183],{"class":36,"line":17497},[34,60184,3053],{"emptyLinePlaceholder":726},[34,60186,60187],{"class":36,"line":17502},[34,60188,60189],{"class":40},"    .slider-indicator li.active {\n",[34,60191,60192],{"class":36,"line":17507},[34,60193,60194],{"class":40},"      width: 12px;\n",[34,60196,60197],{"class":36,"line":17521},[34,60198,60199],{"class":40},"      height: 12px;\n",[34,60201,60202],{"class":36,"line":17533},[34,60203,60204],{"class":40},"      opacity: 1;\n",[34,60206,60207],{"class":36,"line":17538},[34,60208,2840],{"class":40},[34,60210,60211,60213,60215],{"class":36,"line":17551},[34,60212,53063],{"class":40},[34,60214,45],{"class":44},[34,60216,48],{"class":40},[34,60218,60219,60221,60223],{"class":36,"line":17556},[34,60220,102],{"class":40},[34,60222,51983],{"class":44},[34,60224,48],{"class":40},[34,60226,60227],{"class":36,"line":17561},[34,60228,3053],{"emptyLinePlaceholder":726},[34,60230,60231,60233,60235],{"class":36,"line":17566},[34,60232,41],{"class":40},[34,60234,52446],{"class":44},[34,60236,48],{"class":40},[34,60238,60239,60241,60243,60245,60247,60250],{"class":36,"line":17579},[34,60240,52790],{"class":40},[34,60242,52258],{"class":44},[34,60244,54132],{"class":149},[34,60246,153],{"class":40},[34,60248,60249],{"class":156},"\"slider\"",[34,60251,48],{"class":40},[34,60253,60254,60256,60258,60260,60262,60264],{"class":36,"line":17584},[34,60255,51990],{"class":40},[34,60257,52258],{"class":44},[34,60259,54132],{"class":149},[34,60261,153],{"class":40},[34,60263,55870],{"class":156},[34,60265,48],{"class":40},[34,60267,60268,60270,60272,60274,60276,60279,60281,60283,60285],{"class":36,"line":33284},[34,60269,55877],{"class":40},[34,60271,2122],{"class":44},[34,60273,55882],{"class":149},[34,60275,153],{"class":40},[34,60277,60278],{"class":156},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[34,60280,55890],{"class":149},[34,60282,153],{"class":40},[34,60284,8305],{"class":156},[34,60286,59770],{"class":40},[34,60288,60289,60291,60293],{"class":36,"line":33290},[34,60290,52423],{"class":40},[34,60292,52258],{"class":44},[34,60294,48],{"class":40},[34,60296,60297,60299,60301,60303,60305,60307],{"class":36,"line":33296},[34,60298,51990],{"class":40},[34,60300,52258],{"class":44},[34,60302,54132],{"class":149},[34,60304,153],{"class":40},[34,60306,55917],{"class":156},[34,60308,48],{"class":40},[34,60310,60311,60313,60315,60318,60320],{"class":36,"line":33302},[34,60312,55877],{"class":40},[34,60314,108],{"class":44},[34,60316,60317],{"class":40},">对人类来说会不会太超前了？\u003C\u002F",[34,60319,108],{"class":44},[34,60321,48],{"class":40},[34,60323,60324,60326,60328,60330,60332,60335],{"class":36,"line":33308},[34,60325,55877],{"class":40},[34,60327,1800],{"class":44},[34,60329,54132],{"class":149},[34,60331,153],{"class":40},[34,60333,60334],{"class":156},"\"slider-indicator\"",[34,60336,48],{"class":40},[34,60338,60339,60341,60343,60345,60347,60350,60352,60354],{"class":36,"line":33319},[34,60340,55945],{"class":40},[34,60342,755],{"class":44},[34,60344,54132],{"class":149},[34,60346,153],{"class":40},[34,60348,60349],{"class":156},"\"active\"",[34,60351,55957],{"class":40},[34,60353,755],{"class":44},[34,60355,48],{"class":40},[34,60357,60358,60360,60362,60364,60366],{"class":36,"line":33325},[34,60359,55945],{"class":40},[34,60361,755],{"class":44},[34,60363,55957],{"class":40},[34,60365,755],{"class":44},[34,60367,48],{"class":40},[34,60369,60370,60372,60374,60376,60378],{"class":36,"line":33345},[34,60371,55945],{"class":40},[34,60373,755],{"class":44},[34,60375,55957],{"class":40},[34,60377,755],{"class":44},[34,60379,48],{"class":40},[34,60381,60382,60384,60386,60388,60390],{"class":36,"line":33351},[34,60383,55945],{"class":40},[34,60385,755],{"class":44},[34,60387,55957],{"class":40},[34,60389,755],{"class":44},[34,60391,48],{"class":40},[34,60393,60394,60396,60398,60400,60402],{"class":36,"line":33362},[34,60395,55945],{"class":40},[34,60397,755],{"class":44},[34,60399,55957],{"class":40},[34,60401,755],{"class":44},[34,60403,48],{"class":40},[34,60405,60406,60408,60410,60412,60414],{"class":36,"line":33368},[34,60407,55945],{"class":40},[34,60409,755],{"class":44},[34,60411,55957],{"class":40},[34,60413,755],{"class":44},[34,60415,48],{"class":40},[34,60417,60418,60420,60422,60424,60426],{"class":36,"line":33374},[34,60419,55945],{"class":40},[34,60421,755],{"class":44},[34,60423,55957],{"class":40},[34,60425,755],{"class":44},[34,60427,48],{"class":40},[34,60429,60430,60432,60434,60436,60438],{"class":36,"line":33380},[34,60431,55945],{"class":40},[34,60433,755],{"class":44},[34,60435,55957],{"class":40},[34,60437,755],{"class":44},[34,60439,48],{"class":40},[34,60441,60442,60444,60446],{"class":36,"line":33386},[34,60443,56050],{"class":40},[34,60445,1800],{"class":44},[34,60447,48],{"class":40},[34,60449,60450,60452,60454,60456,60458,60461],{"class":36,"line":33392},[34,60451,55877],{"class":40},[34,60453,52258],{"class":44},[34,60455,54132],{"class":149},[34,60457,153],{"class":40},[34,60459,60460],{"class":156},"\"toggle\"",[34,60462,48],{"class":40},[34,60464,60465,60467,60469,60471,60473,60476,60478,60481,60483,60485],{"class":36,"line":33398},[34,60466,55945],{"class":40},[34,60468,54532],{"class":44},[34,60470,54132],{"class":149},[34,60472,153],{"class":40},[34,60474,60475],{"class":156},"\"prev\"",[34,60477,1753],{"class":40},[34,60479,60480],{"class":63},"&lt;",[34,60482,102],{"class":40},[34,60484,54532],{"class":44},[34,60486,48],{"class":40},[34,60488,60489,60491,60493,60495,60497,60500,60502,60505,60507,60509],{"class":36,"line":33404},[34,60490,55945],{"class":40},[34,60492,54532],{"class":44},[34,60494,54132],{"class":149},[34,60496,153],{"class":40},[34,60498,60499],{"class":156},"\"next\"",[34,60501,1753],{"class":40},[34,60503,60504],{"class":63},"&gt;",[34,60506,102],{"class":40},[34,60508,54532],{"class":44},[34,60510,48],{"class":40},[34,60512,60513,60515,60517],{"class":36,"line":33424},[34,60514,56050],{"class":40},[34,60516,52258],{"class":44},[34,60518,48],{"class":40},[34,60520,60521,60523,60525],{"class":36,"line":33430},[34,60522,52423],{"class":40},[34,60524,52258],{"class":44},[34,60526,48],{"class":40},[34,60528,60529,60531,60533],{"class":36,"line":33446},[34,60530,53063],{"class":40},[34,60532,52258],{"class":44},[34,60534,48],{"class":40},[34,60536,60537,60539,60541],{"class":36,"line":33452},[34,60538,52790],{"class":40},[34,60540,52459],{"class":44},[34,60542,48],{"class":40},[34,60544,60545],{"class":36,"line":33466},[34,60546,60547],{"class":40},"    \u002F\u002F 1. 初始数据\n",[34,60549,60550],{"class":36,"line":33472},[34,60551,60552],{"class":40},"    const data = [\n",[34,60554,60555],{"class":36,"line":33487},[34,60556,60557],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[34,60559,60560],{"class":36,"line":33493},[34,60561,60562],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[34,60564,60565],{"class":36,"line":33502},[34,60566,60567],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[34,60569,60570],{"class":36,"line":33508},[34,60571,60572],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[34,60574,60575],{"class":36,"line":33517},[34,60576,60577],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[34,60579,60580],{"class":36,"line":33523},[34,60581,60582],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[34,60584,60585],{"class":36,"line":33529},[34,60586,60587],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[34,60589,60590],{"class":36,"line":33538},[34,60591,60592],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[34,60594,60595],{"class":36,"line":33544},[34,60596,53755],{"class":40},[34,60598,60599],{"class":36,"line":33555},[34,60600,60601],{"class":40},"    \u002F\u002F 获取元素\n",[34,60603,60604],{"class":36,"line":33561},[34,60605,60606],{"class":40},"    const img = document.querySelector('.slider-wrapper img')\n",[34,60608,60609],{"class":36,"line":33580},[34,60610,60611],{"class":40},"    const p = document.querySelector('.slider-footer p')\n",[34,60613,60614],{"class":36,"line":33586},[34,60615,60616],{"class":40},"    const footer = document.querySelector('.slider-footer')\n",[34,60618,60619],{"class":36,"line":33597},[34,60620,60621],{"class":40},"    \u002F\u002F 1. 右按钮业务\n",[34,60623,60624],{"class":36,"line":33603},[34,60625,60626],{"class":40},"    \u002F\u002F 1.1 获取右侧按钮 \n",[34,60628,60629],{"class":36,"line":33623},[34,60630,60631],{"class":40},"    const next = document.querySelector('.next')\n",[34,60633,60634],{"class":36,"line":33639},[34,60635,60636],{"class":40},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[34,60638,60639],{"class":36,"line":33645},[34,60640,60641],{"class":40},"    \u002F\u002F 1.2 注册点击事件\n",[34,60643,60644],{"class":36,"line":33659},[34,60645,3053],{"emptyLinePlaceholder":726},[34,60647,60648],{"class":36,"line":33665},[34,60649,60650],{"class":40},"    next.addEventListener('click', function () {\n",[34,60652,60653],{"class":36,"line":33671},[34,60654,60655],{"class":40},"      \u002F\u002F console.log(11)\n",[34,60657,60658],{"class":36,"line":33682},[34,60659,60660],{"class":40},"      i++\n",[34,60662,60663],{"class":36,"line":33688},[34,60664,60665],{"class":40},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[34,60667,60668],{"class":36,"line":33694},[34,60669,60670],{"class":40},"      \u002F\u002F if (i >= 8) {\n",[34,60672,60673],{"class":36,"line":33704},[34,60674,60675],{"class":40},"      \u002F\u002F   i = 0\n",[34,60677,60678],{"class":36,"line":33710},[34,60679,60680],{"class":40},"      \u002F\u002F }\n",[34,60682,60683],{"class":36,"line":33721},[34,60684,60685],{"class":40},"      i = i >= data.length ? 0 : i\n",[34,60687,60688],{"class":36,"line":33727},[34,60689,60690],{"class":40},"      \u002F\u002F 1.3 得到对应的对象\n",[34,60692,60693],{"class":36,"line":33737},[34,60694,60695],{"class":40},"      \u002F\u002F console.log(data[i])\n",[34,60697,60698],{"class":36,"line":33742},[34,60699,60700],{"class":40},"      \u002F\u002F 调用函数\n",[34,60702,60703],{"class":36,"line":33748},[34,60704,60705],{"class":40},"      toggle()\n",[34,60707,60708],{"class":36,"line":33797},[34,60709,34112],{"class":40},[34,60711,60712],{"class":36,"line":33844},[34,60713,3053],{"emptyLinePlaceholder":726},[34,60715,60716],{"class":36,"line":33849},[34,60717,60718],{"class":40},"    \u002F\u002F 2. 左侧按钮业务\n",[34,60720,60721],{"class":36,"line":33855},[34,60722,60723],{"class":40},"    \u002F\u002F 2.1 获取左侧按钮 \n",[34,60725,60726],{"class":36,"line":33874},[34,60727,60728],{"class":40},"    const prev = document.querySelector('.prev')\n",[34,60730,60731],{"class":36,"line":33880},[34,60732,60641],{"class":40},[34,60734,60735],{"class":36,"line":33900},[34,60736,60737],{"class":40},"    prev.addEventListener('click', function () {\n",[34,60739,60740],{"class":36,"line":33906},[34,60741,60742],{"class":40},"      i--\n",[34,60744,60745],{"class":36,"line":33912},[34,60746,60747],{"class":40},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[34,60749,60750],{"class":36,"line":33922},[34,60751,60752],{"class":40},"      \u002F\u002F if (i \u003C 0) {\n",[34,60754,60755],{"class":36,"line":33927},[34,60756,60757],{"class":40},"      \u002F\u002F   i = 7\n",[34,60759,60760],{"class":36,"line":33933},[34,60761,60680],{"class":40},[34,60763,60764],{"class":36,"line":33949},[34,60765,60766],{"class":40},"      i = i \u003C 0 ? data.length - 1 : i\n",[34,60768,60769],{"class":36,"line":33994},[34,60770,60690],{"class":40},[34,60772,60773],{"class":36,"line":34000},[34,60774,60695],{"class":40},[34,60776,60777],{"class":36,"line":34006},[34,60778,60700],{"class":40},[34,60780,60781],{"class":36,"line":34012},[34,60782,60705],{"class":40},[34,60784,60785],{"class":36,"line":34023},[34,60786,34112],{"class":40},[34,60788,60789],{"class":36,"line":34029},[34,60790,3053],{"emptyLinePlaceholder":726},[34,60792,60793],{"class":36,"line":34035},[34,60794,60795],{"class":40},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[34,60797,60798],{"class":36,"line":34041},[34,60799,60800],{"class":40},"    function toggle() {\n",[34,60802,60803],{"class":36,"line":34059},[34,60804,60805],{"class":40},"      \u002F\u002F 1.4 渲染对应的数据\n",[34,60807,60808],{"class":36,"line":34073},[34,60809,60810],{"class":40},"      img.src = data[i].url\n",[34,60812,60813],{"class":36,"line":34082},[34,60814,60815],{"class":40},"      p.innerHTML = data[i].title\n",[34,60817,60818],{"class":36,"line":34091},[34,60819,60820],{"class":40},"      footer.style.backgroundColor = data[i].color\n",[34,60822,60823],{"class":36,"line":34100},[34,60824,60825],{"class":40},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[34,60827,60828],{"class":36,"line":34109},[34,60829,60830],{"class":40},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[34,60832,60833],{"class":36,"line":34115},[34,60834,60835],{"class":40},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[34,60837,60838],{"class":36,"line":34121},[34,60839,2840],{"class":40},[34,60841,60842],{"class":36,"line":34129},[34,60843,3053],{"emptyLinePlaceholder":726},[34,60845,60846],{"class":36,"line":34134},[34,60847,60848],{"class":40},"    \u002F\u002F 3. 自动播放模块\n",[34,60850,60851],{"class":36,"line":34140},[34,60852,60853],{"class":40},"    let timerId = setInterval(function () {\n",[34,60855,60856],{"class":36,"line":34151},[34,60857,60858],{"class":40},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[34,60860,60861],{"class":36,"line":34157},[34,60862,60863],{"class":40},"      next.click()\n",[34,60865,60866],{"class":36,"line":34177},[34,60867,60868],{"class":40},"    }, 1000)\n",[34,60870,60871],{"class":36,"line":34183},[34,60872,3053],{"emptyLinePlaceholder":726},[34,60874,60875],{"class":36,"line":34189},[34,60876,60877],{"class":40},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[34,60879,60880],{"class":36,"line":34195},[34,60881,60882],{"class":40},"    const slider = document.querySelector('.slider')\n",[34,60884,60885],{"class":36,"line":34212},[34,60886,60887],{"class":40},"    \u002F\u002F 注册事件\n",[34,60889,60890],{"class":36,"line":34218},[34,60891,60892],{"class":40},"    slider.addEventListener('mouseenter', function () {\n",[34,60894,60895],{"class":36,"line":34224},[34,60896,60897],{"class":40},"      \u002F\u002F 停止定时器\n",[34,60899,60900],{"class":36,"line":34230},[34,60901,60902],{"class":40},"      clearInterval(timerId)\n",[34,60904,60905],{"class":36,"line":34236},[34,60906,34112],{"class":40},[34,60908,60909],{"class":36,"line":34242},[34,60910,3053],{"emptyLinePlaceholder":726},[34,60912,60913],{"class":36,"line":34269},[34,60914,60915],{"class":40},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[34,60917,60918],{"class":36,"line":34293},[34,60919,60887],{"class":40},[34,60921,60922],{"class":36,"line":34299},[34,60923,60924],{"class":40},"    slider.addEventListener('mouseleave', function () {\n",[34,60926,60927],{"class":36,"line":34305},[34,60928,60897],{"class":40},[34,60930,60931],{"class":36,"line":34311},[34,60932,60933],{"class":40},"      if (timerId) clearInterval(timerId)\n",[34,60935,60936],{"class":36,"line":34322},[34,60937,60938],{"class":40},"      \u002F\u002F 开启定时器\n",[34,60940,60941],{"class":36,"line":34333},[34,60942,60943],{"class":40},"      timerId = setInterval(function () {\n",[34,60945,60946],{"class":36,"line":34339},[34,60947,60948],{"class":40},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[34,60950,60951],{"class":36,"line":34356},[34,60952,60953],{"class":40},"        next.click()\n",[34,60955,60956],{"class":36,"line":34379},[34,60957,60958],{"class":40},"      }, 1000)\n",[34,60960,60961],{"class":36,"line":34402},[34,60962,34112],{"class":40},[34,60964,60965,60967,60969],{"class":36,"line":34408},[34,60966,53063],{"class":40},[34,60968,52459],{"class":44},[34,60970,48],{"class":40},[34,60972,60973,60975,60977],{"class":36,"line":34413},[34,60974,102],{"class":40},[34,60976,52446],{"class":44},[34,60978,48],{"class":40},[34,60980,60981],{"class":36,"line":34422},[34,60982,3053],{"emptyLinePlaceholder":726},[34,60984,60985,60987,60989],{"class":36,"line":34432},[34,60986,102],{"class":40},[34,60988,51286],{"class":44},[34,60990,48],{"class":40},[22650,60992,60994],{"id":60993},"_3252-焦点事件","3.2.5.2 焦点事件",[108,60996,60997],{},"小米搜索框案例：",[24,60999,61001],{"className":51284,"code":61000,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,61002,61003,61013,61027,61031,61039,61053,61073,61093,61105,61113,61119,61129,61139,61151,61155,61159,61166,61170,61181,61185,61189,61196,61207,61220,61234,61238,61242,61251,61263,61275,61289,61302,61315,61333,61344,61348,61352,61361,61378,61382,61386,61393,61403,61413,61424,61437,61449,61465,61476,61488,61492,61496,61504,61515,61532,61544,61556,61567,61571,61575,61585,61596,61600,61608,61612,61620,61624,61632,61647,61670,61685,61715,61742,61769,61796,61823,61850,61877,61886,61894,61902,61907,61927,61947,61952,61957,61975,61980,61990,61995,62009,62014,62019,62036,62045,62057,62061,62069,62077,62081],{"__ignoreMap":29},[34,61004,61005,61007,61009,61011],{"class":36,"line":37},[34,61006,51948],{"class":40},[34,61008,51951],{"class":44},[34,61010,51954],{"class":149},[34,61012,48],{"class":40},[34,61014,61015,61017,61019,61021,61023,61025],{"class":36,"line":51},[34,61016,41],{"class":40},[34,61018,51286],{"class":44},[34,61020,51965],{"class":149},[34,61022,153],{"class":40},[34,61024,51970],{"class":156},[34,61026,48],{"class":40},[34,61028,61029],{"class":36,"line":60},[34,61030,3053],{"emptyLinePlaceholder":726},[34,61032,61033,61035,61037],{"class":36,"line":76},[34,61034,41],{"class":40},[34,61036,51983],{"class":44},[34,61038,48],{"class":40},[34,61040,61041,61043,61045,61047,61049,61051],{"class":36,"line":93},[34,61042,51990],{"class":40},[34,61044,51993],{"class":44},[34,61046,51996],{"class":149},[34,61048,153],{"class":40},[34,61050,52001],{"class":156},[34,61052,48],{"class":40},[34,61054,61055,61057,61059,61061,61063,61065,61067,61069,61071],{"class":36,"line":99},[34,61056,51990],{"class":40},[34,61058,51993],{"class":44},[34,61060,52012],{"class":149},[34,61062,153],{"class":40},[34,61064,52017],{"class":156},[34,61066,52020],{"class":149},[34,61068,153],{"class":40},[34,61070,52025],{"class":156},[34,61072,48],{"class":40},[34,61074,61075,61077,61079,61081,61083,61085,61087,61089,61091],{"class":36,"line":353},[34,61076,51990],{"class":40},[34,61078,51993],{"class":44},[34,61080,15573],{"class":149},[34,61082,153],{"class":40},[34,61084,52040],{"class":156},[34,61086,52020],{"class":149},[34,61088,153],{"class":40},[34,61090,52047],{"class":156},[34,61092,48],{"class":40},[34,61094,61095,61097,61099,61101,61103],{"class":36,"line":359},[34,61096,51990],{"class":40},[34,61098,52056],{"class":44},[34,61100,52059],{"class":40},[34,61102,52056],{"class":44},[34,61104,48],{"class":40},[34,61106,61107,61109,61111],{"class":36,"line":579},[34,61108,51990],{"class":40},[34,61110,45],{"class":44},[34,61112,48],{"class":40},[34,61114,61115,61117],{"class":36,"line":589},[34,61116,52076],{"class":44},[34,61118,57],{"class":40},[34,61120,61121,61123,61125,61127],{"class":36,"line":601},[34,61122,52083],{"class":63},[34,61124,67],{"class":40},[34,61126,987],{"class":63},[34,61128,73],{"class":40},[34,61130,61131,61133,61135,61137],{"class":36,"line":613},[34,61132,52094],{"class":63},[34,61134,67],{"class":40},[34,61136,987],{"class":63},[34,61138,73],{"class":40},[34,61140,61141,61144,61146,61149],{"class":36,"line":618},[34,61142,61143],{"class":63},"            box-sizing",[34,61145,67],{"class":40},[34,61147,61148],{"class":63},"border-box",[34,61150,73],{"class":40},[34,61152,61153],{"class":36,"line":628},[34,61154,3182],{"class":40},[34,61156,61157],{"class":36,"line":640},[34,61158,3053],{"emptyLinePlaceholder":726},[34,61160,61161,61164],{"class":36,"line":2301},[34,61162,61163],{"class":44},"        ul",[34,61165,57],{"class":40},[34,61167,61168],{"class":36,"line":2307},[34,61169,3053],{"emptyLinePlaceholder":726},[34,61171,61172,61175,61177,61179],{"class":36,"line":2328},[34,61173,61174],{"class":63},"            list-style",[34,61176,67],{"class":40},[34,61178,546],{"class":63},[34,61180,73],{"class":40},[34,61182,61183],{"class":36,"line":2333},[34,61184,3182],{"class":40},[34,61186,61187],{"class":36,"line":2347},[34,61188,3053],{"emptyLinePlaceholder":726},[34,61190,61191,61194],{"class":36,"line":2352},[34,61192,61193],{"class":149},"        .mi",[34,61195,57],{"class":40},[34,61197,61198,61201,61203,61205],{"class":36,"line":2381},[34,61199,61200],{"class":63},"            position",[34,61202,67],{"class":40},[34,61204,55408],{"class":63},[34,61206,73],{"class":40},[34,61208,61209,61211,61213,61216,61218],{"class":36,"line":2386},[34,61210,52132],{"class":63},[34,61212,67],{"class":40},[34,61214,61215],{"class":63},"223",[34,61217,88],{"class":87},[34,61219,73],{"class":40},[34,61221,61222,61224,61226,61228,61230,61232],{"class":36,"line":2403},[34,61223,52083],{"class":63},[34,61225,67],{"class":40},[34,61227,1106],{"class":63},[34,61229,88],{"class":87},[34,61231,52203],{"class":63},[34,61233,73],{"class":40},[34,61235,61236],{"class":36,"line":2408},[34,61237,3182],{"class":40},[34,61239,61240],{"class":36,"line":2413},[34,61241,3053],{"emptyLinePlaceholder":726},[34,61243,61244,61246,61249],{"class":36,"line":2418},[34,61245,61193],{"class":149},[34,61247,61248],{"class":44}," input",[34,61250,57],{"class":40},[34,61252,61253,61255,61257,61259,61261],{"class":36,"line":2432},[34,61254,52132],{"class":63},[34,61256,67],{"class":40},[34,61258,61215],{"class":63},[34,61260,88],{"class":87},[34,61262,73],{"class":40},[34,61264,61265,61267,61269,61271,61273],{"class":36,"line":2437},[34,61266,52146],{"class":63},[34,61268,67],{"class":40},[34,61270,1402],{"class":63},[34,61272,88],{"class":87},[34,61274,73],{"class":40},[34,61276,61277,61279,61281,61283,61285,61287],{"class":36,"line":3230},[34,61278,52094],{"class":63},[34,61280,67],{"class":40},[34,61282,987],{"class":63},[34,61284,2691],{"class":63},[34,61286,88],{"class":87},[34,61288,73],{"class":40},[34,61290,61291,61294,61296,61298,61300],{"class":36,"line":3244},[34,61292,61293],{"class":63},"            font-size",[34,61295,67],{"class":40},[34,61297,1344],{"class":63},[34,61299,88],{"class":87},[34,61301,73],{"class":40},[34,61303,61304,61307,61309,61311,61313],{"class":36,"line":3252},[34,61305,61306],{"class":63},"            line-height",[34,61308,67],{"class":40},[34,61310,1402],{"class":63},[34,61312,88],{"class":87},[34,61314,73],{"class":40},[34,61316,61317,61320,61322,61324,61326,61328,61331],{"class":36,"line":3257},[34,61318,61319],{"class":63},"            border",[34,61321,67],{"class":40},[34,61323,1013],{"class":63},[34,61325,88],{"class":87},[34,61327,52168],{"class":63},[34,61329,61330],{"class":63}," #e0e0e0",[34,61332,73],{"class":40},[34,61334,61335,61338,61340,61342],{"class":36,"line":3263},[34,61336,61337],{"class":63},"            outline",[34,61339,67],{"class":40},[34,61341,546],{"class":63},[34,61343,73],{"class":40},[34,61345,61346],{"class":36,"line":3269},[34,61347,3182],{"class":40},[34,61349,61350],{"class":36,"line":3274},[34,61351,3053],{"emptyLinePlaceholder":726},[34,61353,61354,61356,61359],{"class":36,"line":8601},[34,61355,61193],{"class":149},[34,61357,61358],{"class":149}," .search",[34,61360,57],{"class":40},[34,61362,61363,61365,61367,61369,61371,61373,61376],{"class":36,"line":8625},[34,61364,61319],{"class":63},[34,61366,67],{"class":40},[34,61368,1013],{"class":63},[34,61370,88],{"class":87},[34,61372,52168],{"class":63},[34,61374,61375],{"class":63}," #ff6700",[34,61377,73],{"class":40},[34,61379,61380],{"class":36,"line":8630},[34,61381,3182],{"class":40},[34,61383,61384],{"class":36,"line":8636},[34,61385,3053],{"emptyLinePlaceholder":726},[34,61387,61388,61391],{"class":36,"line":8663},[34,61389,61390],{"class":149},"        .result-list",[34,61392,57],{"class":40},[34,61394,61395,61397,61399,61401],{"class":36,"line":8668},[34,61396,52120],{"class":63},[34,61398,67],{"class":40},[34,61400,546],{"class":63},[34,61402,73],{"class":40},[34,61404,61405,61407,61409,61411],{"class":36,"line":8674},[34,61406,61200],{"class":63},[34,61408,67],{"class":40},[34,61410,55475],{"class":63},[34,61412,73],{"class":40},[34,61414,61415,61418,61420,61422],{"class":36,"line":8686},[34,61416,61417],{"class":63},"            left",[34,61419,67],{"class":40},[34,61421,987],{"class":63},[34,61423,73],{"class":40},[34,61425,61426,61429,61431,61433,61435],{"class":36,"line":8698},[34,61427,61428],{"class":63},"            top",[34,61430,67],{"class":40},[34,61432,1402],{"class":63},[34,61434,88],{"class":87},[34,61436,73],{"class":40},[34,61438,61439,61441,61443,61445,61447],{"class":36,"line":8710},[34,61440,52132],{"class":63},[34,61442,67],{"class":40},[34,61444,61215],{"class":63},[34,61446,88],{"class":87},[34,61448,73],{"class":40},[34,61450,61451,61453,61455,61457,61459,61461,61463],{"class":36,"line":10369},[34,61452,61319],{"class":63},[34,61454,67],{"class":40},[34,61456,1013],{"class":63},[34,61458,88],{"class":87},[34,61460,52168],{"class":63},[34,61462,61375],{"class":63},[34,61464,73],{"class":40},[34,61466,61467,61470,61472,61474],{"class":36,"line":10394},[34,61468,61469],{"class":63},"            border-top",[34,61471,67],{"class":40},[34,61473,987],{"class":63},[34,61475,73],{"class":40},[34,61477,61478,61481,61483,61486],{"class":36,"line":10417},[34,61479,61480],{"class":63},"            background",[34,61482,67],{"class":40},[34,61484,61485],{"class":63},"#fff",[34,61487,73],{"class":40},[34,61489,61490],{"class":36,"line":10441},[34,61491,3182],{"class":40},[34,61493,61494],{"class":36,"line":10446},[34,61495,3053],{"emptyLinePlaceholder":726},[34,61497,61498,61500,61502],{"class":36,"line":10451},[34,61499,61390],{"class":149},[34,61501,2058],{"class":44},[34,61503,57],{"class":40},[34,61505,61506,61508,61510,61513],{"class":36,"line":10456},[34,61507,52120],{"class":63},[34,61509,67],{"class":40},[34,61511,61512],{"class":63},"block",[34,61514,73],{"class":40},[34,61516,61517,61519,61521,61523,61525,61528,61530],{"class":36,"line":10465},[34,61518,52094],{"class":63},[34,61520,67],{"class":40},[34,61522,1139],{"class":63},[34,61524,88],{"class":87},[34,61526,61527],{"class":63}," 15",[34,61529,88],{"class":87},[34,61531,73],{"class":40},[34,61533,61534,61536,61538,61540,61542],{"class":36,"line":10470},[34,61535,61293],{"class":63},[34,61537,67],{"class":40},[34,61539,1293],{"class":63},[34,61541,88],{"class":87},[34,61543,73],{"class":40},[34,61545,61546,61549,61551,61554],{"class":36,"line":10476},[34,61547,61548],{"class":63},"            color",[34,61550,67],{"class":40},[34,61552,61553],{"class":63},"#424242",[34,61555,73],{"class":40},[34,61557,61558,61561,61563,61565],{"class":36,"line":10497},[34,61559,61560],{"class":63},"            text-decoration",[34,61562,67],{"class":40},[34,61564,546],{"class":63},[34,61566,73],{"class":40},[34,61568,61569],{"class":36,"line":10503},[34,61570,3182],{"class":40},[34,61572,61573],{"class":36,"line":10517},[34,61574,3053],{"emptyLinePlaceholder":726},[34,61576,61577,61579,61581,61583],{"class":36,"line":10523},[34,61578,61390],{"class":149},[34,61580,2058],{"class":44},[34,61582,584],{"class":149},[34,61584,57],{"class":40},[34,61586,61587,61589,61591,61594],{"class":36,"line":10550},[34,61588,52287],{"class":63},[34,61590,67],{"class":40},[34,61592,61593],{"class":63},"#eee",[34,61595,73],{"class":40},[34,61597,61598],{"class":36,"line":10559},[34,61599,3182],{"class":40},[34,61601,61602,61604,61606],{"class":36,"line":10565},[34,61603,52423],{"class":40},[34,61605,45],{"class":44},[34,61607,48],{"class":40},[34,61609,61610],{"class":36,"line":10573},[34,61611,3053],{"emptyLinePlaceholder":726},[34,61613,61614,61616,61618],{"class":36,"line":10578},[34,61615,102],{"class":40},[34,61617,51983],{"class":44},[34,61619,48],{"class":40},[34,61621,61622],{"class":36,"line":17256},[34,61623,3053],{"emptyLinePlaceholder":726},[34,61625,61626,61628,61630],{"class":36,"line":17262},[34,61627,41],{"class":40},[34,61629,52446],{"class":44},[34,61631,48],{"class":40},[34,61633,61634,61636,61638,61640,61642,61645],{"class":36,"line":17285},[34,61635,51990],{"class":40},[34,61637,52258],{"class":44},[34,61639,54132],{"class":149},[34,61641,153],{"class":40},[34,61643,61644],{"class":156},"\"mi\"",[34,61646,48],{"class":40},[34,61648,61649,61651,61653,61655,61657,61660,61663,61665,61668],{"class":36,"line":17291},[34,61650,55945],{"class":40},[34,61652,669],{"class":44},[34,61654,54469],{"class":149},[34,61656,153],{"class":40},[34,61658,61659],{"class":156},"\"search\"",[34,61661,61662],{"class":149}," placeholder",[34,61664,153],{"class":40},[34,61666,61667],{"class":156},"\"小米笔记本\"",[34,61669,48],{"class":40},[34,61671,61672,61674,61676,61678,61680,61683],{"class":36,"line":17314},[34,61673,55945],{"class":40},[34,61675,1800],{"class":44},[34,61677,54132],{"class":149},[34,61679,153],{"class":40},[34,61681,61682],{"class":156},"\"result-list\"",[34,61684,48],{"class":40},[34,61686,61687,61690,61692,61695,61697,61699,61701,61704,61707,61709,61711,61713],{"class":36,"line":17328},[34,61688,61689],{"class":40},"            \u003C",[34,61691,755],{"class":44},[34,61693,61694],{"class":40},">\u003C",[34,61696,520],{"class":44},[34,61698,267],{"class":149},[34,61700,153],{"class":40},[34,61702,61703],{"class":156},"\"#\"",[34,61705,61706],{"class":40},">全部商品\u003C\u002F",[34,61708,520],{"class":44},[34,61710,55957],{"class":40},[34,61712,755],{"class":44},[34,61714,48],{"class":40},[34,61716,61717,61719,61721,61723,61725,61727,61729,61731,61734,61736,61738,61740],{"class":36,"line":17348},[34,61718,61689],{"class":40},[34,61720,755],{"class":44},[34,61722,61694],{"class":40},[34,61724,520],{"class":44},[34,61726,267],{"class":149},[34,61728,153],{"class":40},[34,61730,61703],{"class":156},[34,61732,61733],{"class":40},">小米11\u003C\u002F",[34,61735,520],{"class":44},[34,61737,55957],{"class":40},[34,61739,755],{"class":44},[34,61741,48],{"class":40},[34,61743,61744,61746,61748,61750,61752,61754,61756,61758,61761,61763,61765,61767],{"class":36,"line":17354},[34,61745,61689],{"class":40},[34,61747,755],{"class":44},[34,61749,61694],{"class":40},[34,61751,520],{"class":44},[34,61753,267],{"class":149},[34,61755,153],{"class":40},[34,61757,61703],{"class":156},[34,61759,61760],{"class":40},">小米10S\u003C\u002F",[34,61762,520],{"class":44},[34,61764,55957],{"class":40},[34,61766,755],{"class":44},[34,61768,48],{"class":40},[34,61770,61771,61773,61775,61777,61779,61781,61783,61785,61788,61790,61792,61794],{"class":36,"line":17365},[34,61772,61689],{"class":40},[34,61774,755],{"class":44},[34,61776,61694],{"class":40},[34,61778,520],{"class":44},[34,61780,267],{"class":149},[34,61782,153],{"class":40},[34,61784,61703],{"class":156},[34,61786,61787],{"class":40},">小米笔记本\u003C\u002F",[34,61789,520],{"class":44},[34,61791,55957],{"class":40},[34,61793,755],{"class":44},[34,61795,48],{"class":40},[34,61797,61798,61800,61802,61804,61806,61808,61810,61812,61815,61817,61819,61821],{"class":36,"line":17388},[34,61799,61689],{"class":40},[34,61801,755],{"class":44},[34,61803,61694],{"class":40},[34,61805,520],{"class":44},[34,61807,267],{"class":149},[34,61809,153],{"class":40},[34,61811,61703],{"class":156},[34,61813,61814],{"class":40},">小米手机\u003C\u002F",[34,61816,520],{"class":44},[34,61818,55957],{"class":40},[34,61820,755],{"class":44},[34,61822,48],{"class":40},[34,61824,61825,61827,61829,61831,61833,61835,61837,61839,61842,61844,61846,61848],{"class":36,"line":17410},[34,61826,61689],{"class":40},[34,61828,755],{"class":44},[34,61830,61694],{"class":40},[34,61832,520],{"class":44},[34,61834,267],{"class":149},[34,61836,153],{"class":40},[34,61838,61703],{"class":156},[34,61840,61841],{"class":40},">黑鲨4\u003C\u002F",[34,61843,520],{"class":44},[34,61845,55957],{"class":40},[34,61847,755],{"class":44},[34,61849,48],{"class":40},[34,61851,61852,61854,61856,61858,61860,61862,61864,61866,61869,61871,61873,61875],{"class":36,"line":17415},[34,61853,61689],{"class":40},[34,61855,755],{"class":44},[34,61857,61694],{"class":40},[34,61859,520],{"class":44},[34,61861,267],{"class":149},[34,61863,153],{"class":40},[34,61865,61703],{"class":156},[34,61867,61868],{"class":40},">空调\u003C\u002F",[34,61870,520],{"class":44},[34,61872,55957],{"class":40},[34,61874,755],{"class":44},[34,61876,48],{"class":40},[34,61878,61879,61882,61884],{"class":36,"line":17421},[34,61880,61881],{"class":40},"        \u003C\u002F",[34,61883,1800],{"class":44},[34,61885,48],{"class":40},[34,61887,61888,61890,61892],{"class":36,"line":17435},[34,61889,52423],{"class":40},[34,61891,52258],{"class":44},[34,61893,48],{"class":40},[34,61895,61896,61898,61900],{"class":36,"line":17448},[34,61897,51990],{"class":40},[34,61899,52459],{"class":44},[34,61901,48],{"class":40},[34,61903,61904],{"class":36,"line":17453},[34,61905,61906],{"class":205},"        \u002F\u002F 1. 获取元素\n",[34,61908,61909,61912,61914,61916,61918,61920,61922,61925],{"class":36,"line":17467},[34,61910,61911],{"class":87},"        const",[34,61913,61248],{"class":63},[34,61915,14217],{"class":87},[34,61917,55041],{"class":40},[34,61919,55044],{"class":149},[34,61921,801],{"class":40},[34,61923,61924],{"class":156},"'[type=search]'",[34,61926,807],{"class":40},[34,61928,61929,61931,61934,61936,61938,61940,61942,61945],{"class":36,"line":17472},[34,61930,61911],{"class":87},[34,61932,61933],{"class":63}," ul",[34,61935,14217],{"class":87},[34,61937,55041],{"class":40},[34,61939,55044],{"class":149},[34,61941,801],{"class":40},[34,61943,61944],{"class":156},"'.result-list'",[34,61946,807],{"class":40},[34,61948,61949],{"class":36,"line":17478},[34,61950,61951],{"class":205},"        \u002F\u002F console.log(input)\n",[34,61953,61954],{"class":36,"line":17483},[34,61955,61956],{"class":205},"        \u002F\u002F 2. 监听事件 获得焦点\n",[34,61958,61959,61962,61964,61966,61969,61971,61973],{"class":36,"line":17497},[34,61960,61961],{"class":40},"        input.",[34,61963,58456],{"class":149},[34,61965,801],{"class":40},[34,61967,61968],{"class":156},"'focus'",[34,61970,13088],{"class":40},[34,61972,55094],{"class":87},[34,61974,55097],{"class":40},[34,61976,61977],{"class":36,"line":17502},[34,61978,61979],{"class":205},"            \u002F\u002F ul显示\n",[34,61981,61982,61985,61987],{"class":36,"line":17507},[34,61983,61984],{"class":40},"            ul.style.display ",[34,61986,153],{"class":87},[34,61988,61989],{"class":156}," 'block'\n",[34,61991,61992],{"class":36,"line":17521},[34,61993,61994],{"class":205},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[34,61996,61997,62000,62002,62004,62007],{"class":36,"line":17533},[34,61998,61999],{"class":40},"            input.classList.",[34,62001,5987],{"class":149},[34,62003,801],{"class":40},[34,62005,62006],{"class":156},"'search'",[34,62008,807],{"class":40},[34,62010,62011],{"class":36,"line":17538},[34,62012,62013],{"class":40},"        })\n",[34,62015,62016],{"class":36,"line":17551},[34,62017,62018],{"class":205},"        \u002F\u002F 3. 监听事件 失去焦点\n",[34,62020,62021,62023,62025,62027,62030,62032,62034],{"class":36,"line":17556},[34,62022,61961],{"class":40},[34,62024,58456],{"class":149},[34,62026,801],{"class":40},[34,62028,62029],{"class":156},"'blur'",[34,62031,13088],{"class":40},[34,62033,55094],{"class":87},[34,62035,55097],{"class":40},[34,62037,62038,62040,62042],{"class":36,"line":17561},[34,62039,61984],{"class":40},[34,62041,153],{"class":87},[34,62043,62044],{"class":156}," 'none'\n",[34,62046,62047,62049,62051,62053,62055],{"class":36,"line":17566},[34,62048,61999],{"class":40},[34,62050,57649],{"class":149},[34,62052,801],{"class":40},[34,62054,62006],{"class":156},[34,62056,807],{"class":40},[34,62058,62059],{"class":36,"line":17579},[34,62060,62013],{"class":40},[34,62062,62063,62065,62067],{"class":36,"line":17584},[34,62064,52423],{"class":40},[34,62066,52459],{"class":44},[34,62068,48],{"class":40},[34,62070,62071,62073,62075],{"class":36,"line":33284},[34,62072,102],{"class":40},[34,62074,52446],{"class":44},[34,62076,48],{"class":40},[34,62078,62079],{"class":36,"line":33290},[34,62080,3053],{"emptyLinePlaceholder":726},[34,62082,62083,62085,62087],{"class":36,"line":33296},[34,62084,102],{"class":40},[34,62086,51286],{"class":44},[34,62088,48],{"class":40},[22650,62090,62092],{"id":62091},"_3253-键盘事件","3.2.5.3 键盘事件",[108,62094,62095],{},"评论字数统计案例",[108,62097,62098],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[108,62100,62101],{},"牢记focus伪类选择器",[51993,62103],{"charSet":62104},"UTF-8",[51993,62106],{"name":62107,"content":62108},"viewport","width=device-width, initial-scale=1.0",[52056,62110,62111],{},"Document",[45,62113,62114],{},"\n\ninput {\n\nwidth: 200px;\n\ntransition: all .3;\n\n}\n\n\u002F\\* 获得了光标 \\*\u002F\n\ninput:focus {\n\nwidth: 300px;\n\n}\n\n",[669,62116],{"type":5840},[1800,62118,62119,62122],{},[755,62120,62121],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[755,62123,62124],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[24,62126,62128],{"className":51284,"code":62127,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,62129,62130,62140,62154,62158,62166,62180,62200,62220,62233,62241,62248,62261,62275,62285,62295,62299,62303,62310,62322,62334,62346,62358,62387,62400,62404,62408,62417,62428,62440,62451,62462,62474,62485,62497,62513,62525,62529,62533,62543,62554,62564,62576,62580,62584,62592,62603,62613,62624,62636,62649,62661,62673,62677,62681,62690,62702,62713,62726,62737,62751,62755,62759,62766,62778,62790,62800,62804,62808,62817,62829,62839,62843,62847,62858,62868,62887,62900,62904,62908,62918,62928,62932,62936,62947,62958,62970,62982,62986,62990,63001,63011,63025,63029,63033,63044,63054,63066,63070,63078,63086,63090,63098,63113,63132,63172,63185,63193,63207,63227,63235,63250,63272,63290,63305,63325,63345,63365,63373,63381,63389,63397,63417,63437,63442,63459,63468,63472,63477,63493,63501,63505,63510,63527,63532,63557,63561,63565,63570,63575,63583,63591,63595],{"__ignoreMap":29},[34,62131,62132,62134,62136,62138],{"class":36,"line":37},[34,62133,51948],{"class":40},[34,62135,51951],{"class":44},[34,62137,51954],{"class":149},[34,62139,48],{"class":40},[34,62141,62142,62144,62146,62148,62150,62152],{"class":36,"line":51},[34,62143,41],{"class":40},[34,62145,51286],{"class":44},[34,62147,51965],{"class":149},[34,62149,153],{"class":40},[34,62151,51970],{"class":156},[34,62153,48],{"class":40},[34,62155,62156],{"class":36,"line":60},[34,62157,3053],{"emptyLinePlaceholder":726},[34,62159,62160,62162,62164],{"class":36,"line":76},[34,62161,41],{"class":40},[34,62163,51983],{"class":44},[34,62165,48],{"class":40},[34,62167,62168,62170,62172,62174,62176,62178],{"class":36,"line":93},[34,62169,52790],{"class":40},[34,62171,51993],{"class":44},[34,62173,51996],{"class":149},[34,62175,153],{"class":40},[34,62177,52001],{"class":156},[34,62179,48],{"class":40},[34,62181,62182,62184,62186,62188,62190,62192,62194,62196,62198],{"class":36,"line":99},[34,62183,52790],{"class":40},[34,62185,51993],{"class":44},[34,62187,52012],{"class":149},[34,62189,153],{"class":40},[34,62191,52017],{"class":156},[34,62193,52020],{"class":149},[34,62195,153],{"class":40},[34,62197,52025],{"class":156},[34,62199,48],{"class":40},[34,62201,62202,62204,62206,62208,62210,62212,62214,62216,62218],{"class":36,"line":353},[34,62203,52790],{"class":40},[34,62205,51993],{"class":44},[34,62207,15573],{"class":149},[34,62209,153],{"class":40},[34,62211,52040],{"class":156},[34,62213,52020],{"class":149},[34,62215,153],{"class":40},[34,62217,52047],{"class":156},[34,62219,48],{"class":40},[34,62221,62222,62224,62226,62229,62231],{"class":36,"line":359},[34,62223,52790],{"class":40},[34,62225,52056],{"class":44},[34,62227,62228],{"class":40},">评论回车发布\u003C\u002F",[34,62230,52056],{"class":44},[34,62232,48],{"class":40},[34,62234,62235,62237,62239],{"class":36,"line":579},[34,62236,52790],{"class":40},[34,62238,45],{"class":44},[34,62240,48],{"class":40},[34,62242,62243,62246],{"class":36,"line":589},[34,62244,62245],{"class":149},"    .wrapper",[34,62247,57],{"class":40},[34,62249,62250,62253,62255,62257,62259],{"class":36,"line":601},[34,62251,62252],{"class":63},"      min-width",[34,62254,67],{"class":40},[34,62256,4640],{"class":63},[34,62258,88],{"class":87},[34,62260,73],{"class":40},[34,62262,62263,62266,62268,62271,62273],{"class":36,"line":613},[34,62264,62265],{"class":63},"      max-width",[34,62267,67],{"class":40},[34,62269,62270],{"class":63},"800",[34,62272,88],{"class":87},[34,62274,73],{"class":40},[34,62276,62277,62279,62281,62283],{"class":36,"line":618},[34,62278,55652],{"class":63},[34,62280,67],{"class":40},[34,62282,52125],{"class":63},[34,62284,73],{"class":40},[34,62286,62287,62289,62291,62293],{"class":36,"line":628},[34,62288,55663],{"class":63},[34,62290,67],{"class":40},[34,62292,52227],{"class":63},[34,62294,73],{"class":40},[34,62296,62297],{"class":36,"line":640},[34,62298,2840],{"class":40},[34,62300,62301],{"class":36,"line":2301},[34,62302,3053],{"emptyLinePlaceholder":726},[34,62304,62305,62308],{"class":36,"line":2307},[34,62306,62307],{"class":149},"    .avatar",[34,62309,57],{"class":40},[34,62311,62312,62314,62316,62318,62320],{"class":36,"line":2328},[34,62313,55415],{"class":63},[34,62315,67],{"class":40},[34,62317,1402],{"class":63},[34,62319,88],{"class":87},[34,62321,73],{"class":40},[34,62323,62324,62326,62328,62330,62332],{"class":36,"line":2333},[34,62325,55429],{"class":63},[34,62327,67],{"class":40},[34,62329,1402],{"class":63},[34,62331,88],{"class":87},[34,62333,73],{"class":40},[34,62335,62336,62338,62340,62342,62344],{"class":36,"line":2347},[34,62337,55777],{"class":63},[34,62339,67],{"class":40},[34,62341,1451],{"class":63},[34,62343,1123],{"class":87},[34,62345,73],{"class":40},[34,62347,62348,62351,62353,62356],{"class":36,"line":2352},[34,62349,62350],{"class":63},"      overflow",[34,62352,67],{"class":40},[34,62354,62355],{"class":63},"hidden",[34,62357,73],{"class":40},[34,62359,62360,62363,62365,62368,62370,62373,62375,62378,62380,62382,62385],{"class":36,"line":2381},[34,62361,62362],{"class":63},"      background",[34,62364,67],{"class":40},[34,62366,62367],{"class":63},"url",[34,62369,801],{"class":40},[34,62371,62372],{"class":5869},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[34,62374,14367],{"class":40},[34,62376,62377],{"class":63},"no-repeat",[34,62379,17796],{"class":63},[34,62381,25631],{"class":40},[34,62383,62384],{"class":63},"cover",[34,62386,73],{"class":40},[34,62388,62389,62392,62394,62396,62398],{"class":36,"line":2386},[34,62390,62391],{"class":63},"      margin-right",[34,62393,67],{"class":40},[34,62395,1495],{"class":63},[34,62397,88],{"class":87},[34,62399,73],{"class":40},[34,62401,62402],{"class":36,"line":2403},[34,62403,2840],{"class":40},[34,62405,62406],{"class":36,"line":2408},[34,62407,3053],{"emptyLinePlaceholder":726},[34,62409,62410,62412,62415],{"class":36,"line":2413},[34,62411,62245],{"class":149},[34,62413,62414],{"class":44}," textarea",[34,62416,57],{"class":40},[34,62418,62419,62422,62424,62426],{"class":36,"line":2418},[34,62420,62421],{"class":63},"      outline",[34,62423,67],{"class":40},[34,62425,546],{"class":63},[34,62427,73],{"class":40},[34,62429,62430,62433,62435,62438],{"class":36,"line":2432},[34,62431,62432],{"class":63},"      border-color",[34,62434,67],{"class":40},[34,62436,62437],{"class":63},"transparent",[34,62439,73],{"class":40},[34,62441,62442,62445,62447,62449],{"class":36,"line":2437},[34,62443,62444],{"class":63},"      resize",[34,62446,67],{"class":40},[34,62448,546],{"class":63},[34,62450,73],{"class":40},[34,62452,62453,62455,62457,62460],{"class":36,"line":3230},[34,62454,62362],{"class":63},[34,62456,67],{"class":40},[34,62458,62459],{"class":63},"#f5f5f5",[34,62461,73],{"class":40},[34,62463,62464,62466,62468,62470,62472],{"class":36,"line":3244},[34,62465,55777],{"class":63},[34,62467,67],{"class":40},[34,62469,1088],{"class":63},[34,62471,88],{"class":87},[34,62473,73],{"class":40},[34,62475,62476,62479,62481,62483],{"class":36,"line":3252},[34,62477,62478],{"class":63},"      flex",[34,62480,67],{"class":40},[34,62482,1013],{"class":63},[34,62484,73],{"class":40},[34,62486,62487,62489,62491,62493,62495],{"class":36,"line":3257},[34,62488,55340],{"class":63},[34,62490,67],{"class":40},[34,62492,1241],{"class":63},[34,62494,88],{"class":87},[34,62496,73],{"class":40},[34,62498,62499,62502,62504,62506,62509,62511],{"class":36,"line":3263},[34,62500,62501],{"class":63},"      transition",[34,62503,67],{"class":40},[34,62505,28772],{"class":63},[34,62507,62508],{"class":63}," 0.5",[34,62510,1490],{"class":87},[34,62512,73],{"class":40},[34,62514,62515,62517,62519,62521,62523],{"class":36,"line":3269},[34,62516,55429],{"class":63},[34,62518,67],{"class":40},[34,62520,1744],{"class":63},[34,62522,88],{"class":87},[34,62524,73],{"class":40},[34,62526,62527],{"class":36,"line":3274},[34,62528,2840],{"class":40},[34,62530,62531],{"class":36,"line":8601},[34,62532,3053],{"emptyLinePlaceholder":726},[34,62534,62535,62537,62539,62541],{"class":36,"line":8625},[34,62536,62245],{"class":149},[34,62538,62414],{"class":44},[34,62540,672],{"class":149},[34,62542,57],{"class":40},[34,62544,62545,62547,62549,62552],{"class":36,"line":8630},[34,62546,62432],{"class":63},[34,62548,67],{"class":40},[34,62550,62551],{"class":63},"#e4e4e4",[34,62553,73],{"class":40},[34,62555,62556,62558,62560,62562],{"class":36,"line":8636},[34,62557,62362],{"class":63},[34,62559,67],{"class":40},[34,62561,61485],{"class":63},[34,62563,73],{"class":40},[34,62565,62566,62568,62570,62572,62574],{"class":36,"line":8663},[34,62567,55429],{"class":63},[34,62569,67],{"class":40},[34,62571,1451],{"class":63},[34,62573,88],{"class":87},[34,62575,73],{"class":40},[34,62577,62578],{"class":36,"line":8668},[34,62579,2840],{"class":40},[34,62581,62582],{"class":36,"line":8674},[34,62583,3053],{"emptyLinePlaceholder":726},[34,62585,62586,62588,62590],{"class":36,"line":8686},[34,62587,62245],{"class":149},[34,62589,58110],{"class":44},[34,62591,57],{"class":40},[34,62593,62594,62596,62598,62601],{"class":36,"line":8698},[34,62595,62362],{"class":63},[34,62597,67],{"class":40},[34,62599,62600],{"class":63},"#00aeec",[34,62602,73],{"class":40},[34,62604,62605,62607,62609,62611],{"class":36,"line":8710},[34,62606,58059],{"class":63},[34,62608,67],{"class":40},[34,62610,61485],{"class":63},[34,62612,73],{"class":40},[34,62614,62615,62618,62620,62622],{"class":36,"line":10369},[34,62616,62617],{"class":63},"      border",[34,62619,67],{"class":40},[34,62621,546],{"class":63},[34,62623,73],{"class":40},[34,62625,62626,62628,62630,62632,62634],{"class":36,"line":10394},[34,62627,55777],{"class":63},[34,62629,67],{"class":40},[34,62631,1088],{"class":63},[34,62633,88],{"class":87},[34,62635,73],{"class":40},[34,62637,62638,62641,62643,62645,62647],{"class":36,"line":10417},[34,62639,62640],{"class":63},"      margin-left",[34,62642,67],{"class":40},[34,62644,1241],{"class":63},[34,62646,88],{"class":87},[34,62648,73],{"class":40},[34,62650,62651,62653,62655,62657,62659],{"class":36,"line":10441},[34,62652,55415],{"class":63},[34,62654,67],{"class":40},[34,62656,1151],{"class":63},[34,62658,88],{"class":87},[34,62660,73],{"class":40},[34,62662,62663,62666,62668,62671],{"class":36,"line":10446},[34,62664,62665],{"class":63},"      cursor",[34,62667,67],{"class":40},[34,62669,62670],{"class":63},"pointer",[34,62672,73],{"class":40},[34,62674,62675],{"class":36,"line":10451},[34,62676,2840],{"class":40},[34,62678,62679],{"class":36,"line":10456},[34,62680,3053],{"emptyLinePlaceholder":726},[34,62682,62683,62685,62688],{"class":36,"line":10465},[34,62684,62245],{"class":149},[34,62686,62687],{"class":149}," .total",[34,62689,57],{"class":40},[34,62691,62692,62694,62696,62698,62700],{"class":36,"line":10470},[34,62693,62391],{"class":63},[34,62695,67],{"class":40},[34,62697,1407],{"class":63},[34,62699,88],{"class":87},[34,62701,73],{"class":40},[34,62703,62704,62706,62708,62711],{"class":36,"line":10476},[34,62705,58059],{"class":63},[34,62707,67],{"class":40},[34,62709,62710],{"class":63},"#999",[34,62712,73],{"class":40},[34,62714,62715,62718,62720,62722,62724],{"class":36,"line":10497},[34,62716,62717],{"class":63},"      margin-top",[34,62719,67],{"class":40},[34,62721,1114],{"class":63},[34,62723,88],{"class":87},[34,62725,73],{"class":40},[34,62727,62728,62731,62733,62735],{"class":36,"line":10503},[34,62729,62730],{"class":63},"      opacity",[34,62732,67],{"class":40},[34,62734,987],{"class":63},[34,62736,73],{"class":40},[34,62738,62739,62741,62743,62745,62747,62749],{"class":36,"line":10517},[34,62740,62501],{"class":63},[34,62742,67],{"class":40},[34,62744,28772],{"class":63},[34,62746,62508],{"class":63},[34,62748,1490],{"class":87},[34,62750,73],{"class":40},[34,62752,62753],{"class":36,"line":10523},[34,62754,2840],{"class":40},[34,62756,62757],{"class":36,"line":10550},[34,62758,3053],{"emptyLinePlaceholder":726},[34,62760,62761,62764],{"class":36,"line":10559},[34,62762,62763],{"class":149},"    .list",[34,62765,57],{"class":40},[34,62767,62768,62770,62772,62774,62776],{"class":36,"line":10565},[34,62769,62252],{"class":63},[34,62771,67],{"class":40},[34,62773,4640],{"class":63},[34,62775,88],{"class":87},[34,62777,73],{"class":40},[34,62779,62780,62782,62784,62786,62788],{"class":36,"line":10573},[34,62781,62265],{"class":63},[34,62783,67],{"class":40},[34,62785,62270],{"class":63},[34,62787,88],{"class":87},[34,62789,73],{"class":40},[34,62791,62792,62794,62796,62798],{"class":36,"line":10578},[34,62793,55652],{"class":63},[34,62795,67],{"class":40},[34,62797,52125],{"class":63},[34,62799,73],{"class":40},[34,62801,62802],{"class":36,"line":17256},[34,62803,2840],{"class":40},[34,62805,62806],{"class":36,"line":17262},[34,62807,3053],{"emptyLinePlaceholder":726},[34,62809,62810,62812,62815],{"class":36,"line":17285},[34,62811,62763],{"class":149},[34,62813,62814],{"class":149}," .item",[34,62816,57],{"class":40},[34,62818,62819,62821,62823,62825,62827],{"class":36,"line":17291},[34,62820,55415],{"class":63},[34,62822,67],{"class":40},[34,62824,1106],{"class":63},[34,62826,1123],{"class":87},[34,62828,73],{"class":40},[34,62830,62831,62833,62835,62837],{"class":36,"line":17314},[34,62832,55652],{"class":63},[34,62834,67],{"class":40},[34,62836,52125],{"class":63},[34,62838,73],{"class":40},[34,62840,62841],{"class":36,"line":17328},[34,62842,2840],{"class":40},[34,62844,62845],{"class":36,"line":17348},[34,62846,3053],{"emptyLinePlaceholder":726},[34,62848,62849,62851,62853,62856],{"class":36,"line":17354},[34,62850,62763],{"class":149},[34,62852,62814],{"class":149},[34,62854,62855],{"class":149}," .info",[34,62857,57],{"class":40},[34,62859,62860,62862,62864,62866],{"class":36,"line":17365},[34,62861,62478],{"class":63},[34,62863,67],{"class":40},[34,62865,1013],{"class":63},[34,62867,73],{"class":40},[34,62869,62870,62873,62875,62877,62879,62882,62885],{"class":36,"line":17388},[34,62871,62872],{"class":63},"      border-bottom",[34,62874,67],{"class":40},[34,62876,1013],{"class":63},[34,62878,88],{"class":87},[34,62880,62881],{"class":63}," dashed",[34,62883,62884],{"class":63}," #e4e4e4",[34,62886,73],{"class":40},[34,62888,62889,62892,62894,62896,62898],{"class":36,"line":17410},[34,62890,62891],{"class":63},"      padding-bottom",[34,62893,67],{"class":40},[34,62895,1241],{"class":63},[34,62897,88],{"class":87},[34,62899,73],{"class":40},[34,62901,62902],{"class":36,"line":17415},[34,62903,2840],{"class":40},[34,62905,62906],{"class":36,"line":17421},[34,62907,3053],{"emptyLinePlaceholder":726},[34,62909,62910,62912,62914,62916],{"class":36,"line":17435},[34,62911,62763],{"class":149},[34,62913,62814],{"class":149},[34,62915,7478],{"class":44},[34,62917,57],{"class":40},[34,62919,62920,62922,62924,62926],{"class":36,"line":17448},[34,62921,55351],{"class":63},[34,62923,67],{"class":40},[34,62925,987],{"class":63},[34,62927,73],{"class":40},[34,62929,62930],{"class":36,"line":17453},[34,62931,2840],{"class":40},[34,62933,62934],{"class":36,"line":17467},[34,62935,3053],{"emptyLinePlaceholder":726},[34,62937,62938,62940,62942,62945],{"class":36,"line":17472},[34,62939,62763],{"class":149},[34,62941,62814],{"class":149},[34,62943,62944],{"class":149}," .name",[34,62946,57],{"class":40},[34,62948,62949,62951,62953,62956],{"class":36,"line":17478},[34,62950,58059],{"class":63},[34,62952,67],{"class":40},[34,62954,62955],{"class":63},"#FB7299",[34,62957,73],{"class":40},[34,62959,62960,62962,62964,62966,62968],{"class":36,"line":17483},[34,62961,55565],{"class":63},[34,62963,67],{"class":40},[34,62965,1344],{"class":63},[34,62967,88],{"class":87},[34,62969,73],{"class":40},[34,62971,62972,62975,62977,62980],{"class":36,"line":17497},[34,62973,62974],{"class":63},"      font-weight",[34,62976,67],{"class":40},[34,62978,62979],{"class":63},"bold",[34,62981,73],{"class":40},[34,62983,62984],{"class":36,"line":17502},[34,62985,2840],{"class":40},[34,62987,62988],{"class":36,"line":17507},[34,62989,3053],{"emptyLinePlaceholder":726},[34,62991,62992,62994,62996,62999],{"class":36,"line":17521},[34,62993,62763],{"class":149},[34,62995,62814],{"class":149},[34,62997,62998],{"class":149}," .text",[34,63000,57],{"class":40},[34,63002,63003,63005,63007,63009],{"class":36,"line":17533},[34,63004,58059],{"class":63},[34,63006,67],{"class":40},[34,63008,534],{"class":63},[34,63010,73],{"class":40},[34,63012,63013,63015,63017,63019,63021,63023],{"class":36,"line":17538},[34,63014,55340],{"class":63},[34,63016,67],{"class":40},[34,63018,1241],{"class":63},[34,63020,88],{"class":87},[34,63022,4746],{"class":63},[34,63024,73],{"class":40},[34,63026,63027],{"class":36,"line":17551},[34,63028,2840],{"class":40},[34,63030,63031],{"class":36,"line":17556},[34,63032,3053],{"emptyLinePlaceholder":726},[34,63034,63035,63037,63039,63042],{"class":36,"line":17561},[34,63036,62763],{"class":149},[34,63038,62814],{"class":149},[34,63040,63041],{"class":149}," .time",[34,63043,57],{"class":40},[34,63045,63046,63048,63050,63052],{"class":36,"line":17566},[34,63047,58059],{"class":63},[34,63049,67],{"class":40},[34,63051,62710],{"class":63},[34,63053,73],{"class":40},[34,63055,63056,63058,63060,63062,63064],{"class":36,"line":17579},[34,63057,55565],{"class":63},[34,63059,67],{"class":40},[34,63061,1293],{"class":63},[34,63063,88],{"class":87},[34,63065,73],{"class":40},[34,63067,63068],{"class":36,"line":17584},[34,63069,2840],{"class":40},[34,63071,63072,63074,63076],{"class":36,"line":33284},[34,63073,53063],{"class":40},[34,63075,45],{"class":44},[34,63077,48],{"class":40},[34,63079,63080,63082,63084],{"class":36,"line":33290},[34,63081,102],{"class":40},[34,63083,51983],{"class":44},[34,63085,48],{"class":40},[34,63087,63088],{"class":36,"line":33296},[34,63089,3053],{"emptyLinePlaceholder":726},[34,63091,63092,63094,63096],{"class":36,"line":33302},[34,63093,41],{"class":40},[34,63095,52446],{"class":44},[34,63097,48],{"class":40},[34,63099,63100,63102,63104,63106,63108,63111],{"class":36,"line":33308},[34,63101,52790],{"class":40},[34,63103,52258],{"class":44},[34,63105,54132],{"class":149},[34,63107,153],{"class":40},[34,63109,63110],{"class":156},"\"wrapper\"",[34,63112,48],{"class":40},[34,63114,63115,63117,63119,63121,63123,63126,63128,63130],{"class":36,"line":33319},[34,63116,51990],{"class":40},[34,63118,1236],{"class":44},[34,63120,54132],{"class":149},[34,63122,153],{"class":40},[34,63124,63125],{"class":156},"\"avatar\"",[34,63127,55957],{"class":40},[34,63129,1236],{"class":44},[34,63131,48],{"class":40},[34,63133,63134,63136,63138,63140,63142,63145,63147,63149,63152,63154,63156,63158,63161,63163,63166,63168,63170],{"class":36,"line":33325},[34,63135,51990],{"class":40},[34,63137,54933],{"class":44},[34,63139,15612],{"class":149},[34,63141,153],{"class":40},[34,63143,63144],{"class":156},"\"tx\"",[34,63146,61662],{"class":149},[34,63148,153],{"class":40},[34,63150,63151],{"class":156},"\"发一条友善的评论\"",[34,63153,54956],{"class":149},[34,63155,153],{"class":40},[34,63157,4354],{"class":156},[34,63159,63160],{"class":149}," maxlength",[34,63162,153],{"class":40},[34,63164,63165],{"class":156},"\"200\"",[34,63167,55957],{"class":40},[34,63169,54933],{"class":44},[34,63171,48],{"class":40},[34,63173,63174,63176,63178,63181,63183],{"class":36,"line":33345},[34,63175,51990],{"class":40},[34,63177,54532],{"class":44},[34,63179,63180],{"class":40},">发布\u003C\u002F",[34,63182,54532],{"class":44},[34,63184,48],{"class":40},[34,63186,63187,63189,63191],{"class":36,"line":33351},[34,63188,53063],{"class":40},[34,63190,52258],{"class":44},[34,63192,48],{"class":40},[34,63194,63195,63197,63199,63201,63203,63205],{"class":36,"line":33362},[34,63196,52790],{"class":40},[34,63198,52258],{"class":44},[34,63200,54132],{"class":149},[34,63202,153],{"class":40},[34,63204,63110],{"class":156},[34,63206,48],{"class":40},[34,63208,63209,63211,63213,63215,63217,63220,63223,63225],{"class":36,"line":33368},[34,63210,51990],{"class":40},[34,63212,34],{"class":44},[34,63214,54132],{"class":149},[34,63216,153],{"class":40},[34,63218,63219],{"class":156},"\"total\"",[34,63221,63222],{"class":40},">0\u002F200字\u003C\u002F",[34,63224,34],{"class":44},[34,63226,48],{"class":40},[34,63228,63229,63231,63233],{"class":36,"line":33374},[34,63230,53063],{"class":40},[34,63232,52258],{"class":44},[34,63234,48],{"class":40},[34,63236,63237,63239,63241,63243,63245,63248],{"class":36,"line":33380},[34,63238,52790],{"class":40},[34,63240,52258],{"class":44},[34,63242,54132],{"class":149},[34,63244,153],{"class":40},[34,63246,63247],{"class":156},"\"list\"",[34,63249,48],{"class":40},[34,63251,63252,63254,63256,63258,63260,63263,63265,63267,63270],{"class":36,"line":33386},[34,63253,51990],{"class":40},[34,63255,52258],{"class":44},[34,63257,54132],{"class":149},[34,63259,153],{"class":40},[34,63261,63262],{"class":156},"\"item\"",[34,63264,150],{"class":149},[34,63266,153],{"class":40},[34,63268,63269],{"class":156},"\"display: none;\"",[34,63271,48],{"class":40},[34,63273,63274,63276,63278,63280,63282,63284,63286,63288],{"class":36,"line":33392},[34,63275,55877],{"class":40},[34,63277,1236],{"class":44},[34,63279,54132],{"class":149},[34,63281,153],{"class":40},[34,63283,63125],{"class":156},[34,63285,55957],{"class":40},[34,63287,1236],{"class":44},[34,63289,48],{"class":40},[34,63291,63292,63294,63296,63298,63300,63303],{"class":36,"line":33398},[34,63293,55877],{"class":40},[34,63295,52258],{"class":44},[34,63297,54132],{"class":149},[34,63299,153],{"class":40},[34,63301,63302],{"class":156},"\"info\"",[34,63304,48],{"class":40},[34,63306,63307,63309,63311,63313,63315,63318,63321,63323],{"class":36,"line":33404},[34,63308,55945],{"class":40},[34,63310,108],{"class":44},[34,63312,54132],{"class":149},[34,63314,153],{"class":40},[34,63316,63317],{"class":156},"\"name\"",[34,63319,63320],{"class":40},">清风徐来\u003C\u002F",[34,63322,108],{"class":44},[34,63324,48],{"class":40},[34,63326,63327,63329,63331,63333,63335,63338,63341,63343],{"class":36,"line":33424},[34,63328,55945],{"class":40},[34,63330,108],{"class":44},[34,63332,54132],{"class":149},[34,63334,153],{"class":40},[34,63336,63337],{"class":156},"\"text\"",[34,63339,63340],{"class":40},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[34,63342,108],{"class":44},[34,63344,48],{"class":40},[34,63346,63347,63349,63351,63353,63355,63358,63361,63363],{"class":36,"line":33430},[34,63348,55945],{"class":40},[34,63350,108],{"class":44},[34,63352,54132],{"class":149},[34,63354,153],{"class":40},[34,63356,63357],{"class":156},"\"time\"",[34,63359,63360],{"class":40},">2022-10-10 20:29:21\u003C\u002F",[34,63362,108],{"class":44},[34,63364,48],{"class":40},[34,63366,63367,63369,63371],{"class":36,"line":33446},[34,63368,56050],{"class":40},[34,63370,52258],{"class":44},[34,63372,48],{"class":40},[34,63374,63375,63377,63379],{"class":36,"line":33452},[34,63376,52423],{"class":40},[34,63378,52258],{"class":44},[34,63380,48],{"class":40},[34,63382,63383,63385,63387],{"class":36,"line":33466},[34,63384,53063],{"class":40},[34,63386,52258],{"class":44},[34,63388,48],{"class":40},[34,63390,63391,63393,63395],{"class":36,"line":33472},[34,63392,52790],{"class":40},[34,63394,52459],{"class":44},[34,63396,48],{"class":40},[34,63398,63399,63401,63404,63406,63408,63410,63412,63415],{"class":36,"line":33487},[34,63400,11874],{"class":87},[34,63402,63403],{"class":63}," tx",[34,63405,14217],{"class":87},[34,63407,55041],{"class":40},[34,63409,55044],{"class":149},[34,63411,801],{"class":40},[34,63413,63414],{"class":156},"'#tx'",[34,63416,807],{"class":40},[34,63418,63419,63421,63424,63426,63428,63430,63432,63435],{"class":36,"line":33493},[34,63420,11874],{"class":87},[34,63422,63423],{"class":63}," total",[34,63425,14217],{"class":87},[34,63427,55041],{"class":40},[34,63429,55044],{"class":149},[34,63431,801],{"class":40},[34,63433,63434],{"class":156},"'.total'",[34,63436,807],{"class":40},[34,63438,63439],{"class":36,"line":33502},[34,63440,63441],{"class":205},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[34,63443,63444,63447,63449,63451,63453,63455,63457],{"class":36,"line":33508},[34,63445,63446],{"class":40},"    tx.",[34,63448,58456],{"class":149},[34,63450,801],{"class":40},[34,63452,61968],{"class":156},[34,63454,13088],{"class":40},[34,63456,55094],{"class":87},[34,63458,55097],{"class":40},[34,63460,63461,63464,63466],{"class":36,"line":33517},[34,63462,63463],{"class":40},"      total.style.opacity ",[34,63465,153],{"class":87},[34,63467,56342],{"class":63},[34,63469,63470],{"class":36,"line":33523},[34,63471,34112],{"class":40},[34,63473,63474],{"class":36,"line":33529},[34,63475,63476],{"class":205},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[34,63478,63479,63481,63483,63485,63487,63489,63491],{"class":36,"line":33538},[34,63480,63446],{"class":40},[34,63482,58456],{"class":149},[34,63484,801],{"class":40},[34,63486,62029],{"class":156},[34,63488,13088],{"class":40},[34,63490,55094],{"class":87},[34,63492,55097],{"class":40},[34,63494,63495,63497,63499],{"class":36,"line":33544},[34,63496,63463],{"class":40},[34,63498,153],{"class":87},[34,63500,47984],{"class":63},[34,63502,63503],{"class":36,"line":33555},[34,63504,34112],{"class":40},[34,63506,63507],{"class":36,"line":33561},[34,63508,63509],{"class":205},"    \u002F\u002F 3. 检测用户输入\n",[34,63511,63512,63514,63516,63518,63521,63523,63525],{"class":36,"line":33580},[34,63513,63446],{"class":40},[34,63515,58456],{"class":149},[34,63517,801],{"class":40},[34,63519,63520],{"class":156},"'input'",[34,63522,13088],{"class":40},[34,63524,55094],{"class":87},[34,63526,55097],{"class":40},[34,63528,63529],{"class":36,"line":33586},[34,63530,63531],{"class":205},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[34,63533,63534,63537,63539,63542,63545,63547,63550,63552,63554],{"class":36,"line":33597},[34,63535,63536],{"class":40},"      total.innerHTML ",[34,63538,153],{"class":87},[34,63540,63541],{"class":156}," `${",[34,63543,63544],{"class":40},"tx",[34,63546,1353],{"class":156},[34,63548,63549],{"class":40},"value",[34,63551,1353],{"class":156},[34,63553,52614],{"class":63},[34,63555,63556],{"class":156},"}\u002F200字`\n",[34,63558,63559],{"class":36,"line":33603},[34,63560,34112],{"class":40},[34,63562,63563],{"class":36,"line":33623},[34,63564,3053],{"emptyLinePlaceholder":726},[34,63566,63567],{"class":36,"line":33639},[34,63568,63569],{"class":205},"    \u002F\u002F const str = 'andy'\n",[34,63571,63572],{"class":36,"line":33645},[34,63573,63574],{"class":205},"    \u002F\u002F console.log(str.length)\n",[34,63576,63577,63579,63581],{"class":36,"line":33659},[34,63578,53063],{"class":40},[34,63580,52459],{"class":44},[34,63582,48],{"class":40},[34,63584,63585,63587,63589],{"class":36,"line":33665},[34,63586,102],{"class":40},[34,63588,52446],{"class":44},[34,63590,48],{"class":40},[34,63592,63593],{"class":36,"line":33671},[34,63594,3053],{"emptyLinePlaceholder":726},[34,63596,63597,63599,63601],{"class":36,"line":33682},[34,63598,102],{"class":40},[34,63600,51286],{"class":44},[34,63602,48],{"class":40},[22650,63604,63606],{"id":63605},"_3254-change事件","3.2.5.4 change事件",[108,63608,63609],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[108,63611,63612],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[108,63614,63615],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[24,63617,63619],{"className":51284,"code":63618,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,63620,63621,63631,63645,63649,63657,63671,63691,63703,63711,63715,63723,63737,63745,63763,63781,63793,63797,63805,63813,63817],{"__ignoreMap":29},[34,63622,63623,63625,63627,63629],{"class":36,"line":37},[34,63624,51948],{"class":40},[34,63626,51951],{"class":44},[34,63628,51954],{"class":149},[34,63630,48],{"class":40},[34,63632,63633,63635,63637,63639,63641,63643],{"class":36,"line":51},[34,63634,41],{"class":40},[34,63636,51286],{"class":44},[34,63638,51965],{"class":149},[34,63640,153],{"class":40},[34,63642,51970],{"class":156},[34,63644,48],{"class":40},[34,63646,63647],{"class":36,"line":60},[34,63648,3053],{"emptyLinePlaceholder":726},[34,63650,63651,63653,63655],{"class":36,"line":76},[34,63652,41],{"class":40},[34,63654,51983],{"class":44},[34,63656,48],{"class":40},[34,63658,63659,63661,63663,63665,63667,63669],{"class":36,"line":93},[34,63660,52790],{"class":40},[34,63662,51993],{"class":44},[34,63664,51996],{"class":149},[34,63666,153],{"class":40},[34,63668,52001],{"class":156},[34,63670,48],{"class":40},[34,63672,63673,63675,63677,63679,63681,63683,63685,63687,63689],{"class":36,"line":99},[34,63674,52790],{"class":40},[34,63676,51993],{"class":44},[34,63678,15573],{"class":149},[34,63680,153],{"class":40},[34,63682,52040],{"class":156},[34,63684,52020],{"class":149},[34,63686,153],{"class":40},[34,63688,52047],{"class":156},[34,63690,48],{"class":40},[34,63692,63693,63695,63697,63699,63701],{"class":36,"line":353},[34,63694,52790],{"class":40},[34,63696,52056],{"class":44},[34,63698,52059],{"class":40},[34,63700,52056],{"class":44},[34,63702,48],{"class":40},[34,63704,63705,63707,63709],{"class":36,"line":359},[34,63706,102],{"class":40},[34,63708,51983],{"class":44},[34,63710,48],{"class":40},[34,63712,63713],{"class":36,"line":579},[34,63714,3053],{"emptyLinePlaceholder":726},[34,63716,63717,63719,63721],{"class":36,"line":589},[34,63718,41],{"class":40},[34,63720,52446],{"class":44},[34,63722,48],{"class":40},[34,63724,63725,63727,63729,63731,63733,63735],{"class":36,"line":601},[34,63726,52790],{"class":40},[34,63728,669],{"class":44},[34,63730,54469],{"class":149},[34,63732,153],{"class":40},[34,63734,63337],{"class":156},[34,63736,48],{"class":40},[34,63738,63739,63741,63743],{"class":36,"line":613},[34,63740,52790],{"class":40},[34,63742,52459],{"class":44},[34,63744,48],{"class":40},[34,63746,63747,63749,63751,63753,63755,63757,63759,63761],{"class":36,"line":618},[34,63748,11874],{"class":87},[34,63750,61248],{"class":63},[34,63752,14217],{"class":87},[34,63754,55041],{"class":40},[34,63756,55044],{"class":149},[34,63758,801],{"class":40},[34,63760,63520],{"class":156},[34,63762,807],{"class":40},[34,63764,63765,63768,63770,63772,63775,63777,63779],{"class":36,"line":628},[34,63766,63767],{"class":40},"    input.",[34,63769,58456],{"class":149},[34,63771,801],{"class":40},[34,63773,63774],{"class":156},"'change'",[34,63776,13088],{"class":40},[34,63778,55094],{"class":87},[34,63780,55097],{"class":40},[34,63782,63783,63785,63787,63789,63791],{"class":36,"line":640},[34,63784,58887],{"class":40},[34,63786,58890],{"class":149},[34,63788,801],{"class":40},[34,63790,1388],{"class":63},[34,63792,807],{"class":40},[34,63794,63795],{"class":36,"line":2301},[34,63796,34112],{"class":40},[34,63798,63799,63801,63803],{"class":36,"line":2307},[34,63800,53063],{"class":40},[34,63802,52459],{"class":44},[34,63804,48],{"class":40},[34,63806,63807,63809,63811],{"class":36,"line":2328},[34,63808,102],{"class":40},[34,63810,52446],{"class":44},[34,63812,48],{"class":40},[34,63814,63815],{"class":36,"line":2333},[34,63816,3053],{"emptyLinePlaceholder":726},[34,63818,63819,63821,63823],{"class":36,"line":2347},[34,63820,102],{"class":40},[34,63822,51286],{"class":44},[34,63824,48],{"class":40},[108,63826,63827],{},"总结：内容发生改变才回去触发",[19,63829,63831],{"id":63830},"_326-事件对象","3.2.6 事件对象",[22650,63833,63835],{"id":63834},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[108,63837,63838],{},[2122,63839],{"alt":29,"src":63840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[108,63842,63843],{},[2122,63844],{"alt":29,"src":63845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[108,63847,63848],{},"点击一次，就输出了事件对象，它是个对象",[108,63850,63851],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[108,63853,63854],{},[2122,63855],{"alt":29,"src":63856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22650,63858,63860],{"id":63859},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[108,63862,63863],{},[2122,63864],{"alt":29,"src":63865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[108,63867,63868],{},"实现按特殊字符才是实现打印输出效果：",[24,63870,63872],{"className":53713,"code":63871,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,63873,63874,63882,63887,63901,63909,63914,63919,63924,63929,63934,63939,63944,63949,63954,63958,63962,63970],{"__ignoreMap":29},[34,63875,63876,63878,63880],{"class":36,"line":37},[34,63877,41],{"class":40},[34,63879,52446],{"class":44},[34,63881,48],{"class":40},[34,63883,63884],{"class":36,"line":51},[34,63885,63886],{"class":205},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[34,63888,63889,63891,63893,63895,63897,63899],{"class":36,"line":60},[34,63890,52790],{"class":40},[34,63892,669],{"class":44},[34,63894,54469],{"class":149},[34,63896,153],{"class":40},[34,63898,63337],{"class":156},[34,63900,48],{"class":40},[34,63902,63903,63905,63907],{"class":36,"line":76},[34,63904,52790],{"class":40},[34,63906,52459],{"class":44},[34,63908,48],{"class":40},[34,63910,63911],{"class":36,"line":93},[34,63912,63913],{"class":40},"    \u002F\u002F const btn = document.querySelector('button')\n",[34,63915,63916],{"class":36,"line":99},[34,63917,63918],{"class":40},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[34,63920,63921],{"class":36,"line":353},[34,63922,63923],{"class":40},"    \u002F\u002F   console.log(e);\n",[34,63925,63926],{"class":36,"line":359},[34,63927,63928],{"class":40},"    \u002F\u002F })\n",[34,63930,63931],{"class":36,"line":579},[34,63932,63933],{"class":40},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[34,63935,63936],{"class":36,"line":589},[34,63937,63938],{"class":40},"    const input = document.querySelector('input')\n",[34,63940,63941],{"class":36,"line":601},[34,63942,63943],{"class":40},"    input.addEventListener('keyup', function (e) {\n",[34,63945,63946],{"class":36,"line":613},[34,63947,63948],{"class":40},"      if (e.key === 'Enter') {\n",[34,63950,63951],{"class":36,"line":618},[34,63952,63953],{"class":40},"        console.log('我按下了回车键')\n",[34,63955,63956],{"class":36,"line":628},[34,63957,53044],{"class":40},[34,63959,63960],{"class":36,"line":640},[34,63961,34112],{"class":40},[34,63963,63964,63966,63968],{"class":36,"line":2301},[34,63965,53063],{"class":40},[34,63967,52459],{"class":44},[34,63969,48],{"class":40},[34,63971,63972,63974,63976],{"class":36,"line":2307},[34,63973,102],{"class":40},[34,63975,52446],{"class":44},[34,63977,48],{"class":40},[22650,63979,63981],{"id":63980},"_3263-trim方法","3.2.6.3 trim方法",[108,63983,63984],{},[2122,63985],{"alt":29,"src":63986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[108,63988,63989],{},[2122,63990],{"alt":29,"src":63991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[108,63993,63994],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[108,63996,63997],{},"str.trim()",[19,63999,64001],{"id":64000},"_327-环境对象","3.2.7 环境对象",[108,64003,64004],{},[2122,64005],{"alt":29,"src":64006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[108,64008,64009],{},[2122,64010],{"alt":29,"src":64011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[108,64013,64014],{},[2122,64015],{"alt":29,"src":64016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[108,64018,64019],{},"实际函数调用是window.fn()",[108,64021,64022],{},"普通函数里面this指向的是window",[1800,64024,64025,64028,64031],{},[755,64026,64027],{},"在普通函数下，this指向的是window",[755,64029,64030],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[755,64032,64033],{},"箭头函数没有this",[108,64035,64036],{},"粗略记法就是：谁调用，this就指向谁",[108,64038,64039],{},[2122,64040],{"alt":29,"src":64041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[108,64043,64044],{},[2122,64045],{"alt":29,"src":64046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[108,64048,64049],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[108,64051,64052],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[24,64054,64056],{"className":53713,"code":64055,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,64057,64058,64066,64078,64086,64091,64096,64101,64106,64110,64118],{"__ignoreMap":29},[34,64059,64060,64062,64064],{"class":36,"line":37},[34,64061,41],{"class":40},[34,64063,52446],{"class":44},[34,64065,48],{"class":40},[34,64067,64068,64070,64072,64074,64076],{"class":36,"line":51},[34,64069,52790],{"class":40},[34,64071,54532],{"class":44},[34,64073,54538],{"class":40},[34,64075,54532],{"class":44},[34,64077,48],{"class":40},[34,64079,64080,64082,64084],{"class":36,"line":60},[34,64081,52790],{"class":40},[34,64083,52459],{"class":44},[34,64085,48],{"class":40},[34,64087,64088],{"class":36,"line":76},[34,64089,64090],{"class":40},"    const button = document.querySelector('button')\n",[34,64092,64093],{"class":36,"line":93},[34,64094,64095],{"class":40},"    button.addEventListener('click', function () {\n",[34,64097,64098],{"class":36,"line":99},[34,64099,64100],{"class":40},"      \u002F\u002F console.log(this);\n",[34,64102,64103],{"class":36,"line":353},[34,64104,64105],{"class":40},"      this.style.color = 'pink'\n",[34,64107,64108],{"class":36,"line":359},[34,64109,34112],{"class":40},[34,64111,64112,64114,64116],{"class":36,"line":579},[34,64113,53063],{"class":40},[34,64115,52459],{"class":44},[34,64117,48],{"class":40},[34,64119,64120,64122,64124],{"class":36,"line":589},[34,64121,102],{"class":40},[34,64123,52446],{"class":44},[34,64125,48],{"class":40},[19,64127,64129],{"id":64128},"_328-回调函数","3.2.8 回调函数",[108,64131,64132],{},[2122,64133],{"alt":29,"src":64134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[108,64136,64137],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[108,64139,11985],{},[1800,64141,64142,64145,64148],{},[755,64143,64144],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[755,64146,64147],{},"回调函数本质还是函数，只不过把它当成参数使用",[755,64149,64150],{},"使用匿名函数做为回调函数比较常见",[19,64152,64154],{"id":64153},"_329-tab栏切换","3.2.9 tab栏切换",[108,64156,64157],{},[2122,64158],{"alt":29,"src":64159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[24,64161,64163],{"className":51284,"code":64162,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,64164,64165,64175,64189,64193,64201,64215,64235,64255,64268,64276,64282,64292,64302,64306,64310,64317,64330,64343,64355,64371,64375,64379,64386,64398,64410,64422,64432,64442,64446,64450,64459,64471,64482,64494,64498,64502,64510,64520,64530,64540,64544,64548,64558,64572,64584,64588,64592,64604,64615,64632,64642,64646,64650,64665,64676,64686,64690,64694,64701,64716,64720,64724,64732,64742,64746,64750,64759,64769,64773,64781,64789,64793,64801,64816,64831,64844,64852,64886,64913,64940,64967,64994,65002,65010,65025,65062,65097,65132,65167,65202,65210,65218,65226,65231,65236,65256,65261,65290,65295,65300,65318,65323,65328,65333,65355,65360,65376,65380,65385,65390,65411,65416,65445,65449,65454,65458,65466,65474,65478],{"__ignoreMap":29},[34,64166,64167,64169,64171,64173],{"class":36,"line":37},[34,64168,51948],{"class":40},[34,64170,51951],{"class":44},[34,64172,51954],{"class":149},[34,64174,48],{"class":40},[34,64176,64177,64179,64181,64183,64185,64187],{"class":36,"line":51},[34,64178,41],{"class":40},[34,64180,51286],{"class":44},[34,64182,51965],{"class":149},[34,64184,153],{"class":40},[34,64186,51970],{"class":156},[34,64188,48],{"class":40},[34,64190,64191],{"class":36,"line":60},[34,64192,3053],{"emptyLinePlaceholder":726},[34,64194,64195,64197,64199],{"class":36,"line":76},[34,64196,41],{"class":40},[34,64198,51983],{"class":44},[34,64200,48],{"class":40},[34,64202,64203,64205,64207,64209,64211,64213],{"class":36,"line":93},[34,64204,52790],{"class":40},[34,64206,51993],{"class":44},[34,64208,51996],{"class":149},[34,64210,153],{"class":40},[34,64212,52001],{"class":156},[34,64214,59770],{"class":40},[34,64216,64217,64219,64221,64223,64225,64227,64229,64231,64233],{"class":36,"line":99},[34,64218,52790],{"class":40},[34,64220,51993],{"class":44},[34,64222,52012],{"class":149},[34,64224,153],{"class":40},[34,64226,52017],{"class":156},[34,64228,52020],{"class":149},[34,64230,153],{"class":40},[34,64232,52025],{"class":156},[34,64234,59770],{"class":40},[34,64236,64237,64239,64241,64243,64245,64247,64249,64251,64253],{"class":36,"line":353},[34,64238,52790],{"class":40},[34,64240,51993],{"class":44},[34,64242,15573],{"class":149},[34,64244,153],{"class":40},[34,64246,52040],{"class":156},[34,64248,52020],{"class":149},[34,64250,153],{"class":40},[34,64252,52047],{"class":156},[34,64254,59770],{"class":40},[34,64256,64257,64259,64261,64264,64266],{"class":36,"line":359},[34,64258,52790],{"class":40},[34,64260,52056],{"class":44},[34,64262,64263],{"class":40},">tab栏切换\u003C\u002F",[34,64265,52056],{"class":44},[34,64267,48],{"class":40},[34,64269,64270,64272,64274],{"class":36,"line":579},[34,64271,52790],{"class":40},[34,64273,45],{"class":44},[34,64275,48],{"class":40},[34,64277,64278,64280],{"class":36,"line":589},[34,64279,7056],{"class":44},[34,64281,57],{"class":40},[34,64283,64284,64286,64288,64290],{"class":36,"line":601},[34,64285,55351],{"class":63},[34,64287,67],{"class":40},[34,64289,987],{"class":63},[34,64291,73],{"class":40},[34,64293,64294,64296,64298,64300],{"class":36,"line":613},[34,64295,55340],{"class":63},[34,64297,67],{"class":40},[34,64299,987],{"class":63},[34,64301,73],{"class":40},[34,64303,64304],{"class":36,"line":618},[34,64305,2840],{"class":40},[34,64307,64308],{"class":36,"line":628},[34,64309,3053],{"emptyLinePlaceholder":726},[34,64311,64312,64315],{"class":36,"line":640},[34,64313,64314],{"class":149},"    .tab",[34,64316,57],{"class":40},[34,64318,64319,64321,64323,64326,64328],{"class":36,"line":2301},[34,64320,55415],{"class":63},[34,64322,67],{"class":40},[34,64324,64325],{"class":63},"590",[34,64327,88],{"class":87},[34,64329,73],{"class":40},[34,64331,64332,64334,64336,64339,64341],{"class":36,"line":2307},[34,64333,55429],{"class":63},[34,64335,67],{"class":40},[34,64337,64338],{"class":63},"340",[34,64340,88],{"class":87},[34,64342,73],{"class":40},[34,64344,64345,64347,64349,64351,64353],{"class":36,"line":2328},[34,64346,55351],{"class":63},[34,64348,67],{"class":40},[34,64350,1495],{"class":63},[34,64352,88],{"class":87},[34,64354,73],{"class":40},[34,64356,64357,64359,64361,64363,64365,64367,64369],{"class":36,"line":2333},[34,64358,62617],{"class":63},[34,64360,67],{"class":40},[34,64362,1013],{"class":63},[34,64364,88],{"class":87},[34,64366,52168],{"class":63},[34,64368,62884],{"class":63},[34,64370,73],{"class":40},[34,64372,64373],{"class":36,"line":2347},[34,64374,2840],{"class":40},[34,64376,64377],{"class":36,"line":2352},[34,64378,3053],{"emptyLinePlaceholder":726},[34,64380,64381,64384],{"class":36,"line":2381},[34,64382,64383],{"class":149},"    .tab-nav",[34,64385,57],{"class":40},[34,64387,64388,64390,64392,64394,64396],{"class":36,"line":2386},[34,64389,55415],{"class":63},[34,64391,67],{"class":40},[34,64393,1106],{"class":63},[34,64395,1123],{"class":87},[34,64397,73],{"class":40},[34,64399,64400,64402,64404,64406,64408],{"class":36,"line":2403},[34,64401,55429],{"class":63},[34,64403,67],{"class":40},[34,64405,1701],{"class":63},[34,64407,88],{"class":87},[34,64409,73],{"class":40},[34,64411,64412,64414,64416,64418,64420],{"class":36,"line":2408},[34,64413,58002],{"class":63},[34,64415,67],{"class":40},[34,64417,1701],{"class":63},[34,64419,88],{"class":87},[34,64421,73],{"class":40},[34,64423,64424,64426,64428,64430],{"class":36,"line":2413},[34,64425,55652],{"class":63},[34,64427,67],{"class":40},[34,64429,52125],{"class":63},[34,64431,73],{"class":40},[34,64433,64434,64436,64438,64440],{"class":36,"line":2418},[34,64435,55663],{"class":63},[34,64437,67],{"class":40},[34,64439,52315],{"class":63},[34,64441,73],{"class":40},[34,64443,64444],{"class":36,"line":2432},[34,64445,2840],{"class":40},[34,64447,64448],{"class":36,"line":2437},[34,64449,3053],{"emptyLinePlaceholder":726},[34,64451,64452,64454,64457],{"class":36,"line":3230},[34,64453,64383],{"class":149},[34,64455,64456],{"class":44}," h3",[34,64458,57],{"class":40},[34,64460,64461,64463,64465,64467,64469],{"class":36,"line":3244},[34,64462,55565],{"class":63},[34,64464,67],{"class":40},[34,64466,84],{"class":63},[34,64468,88],{"class":87},[34,64470,73],{"class":40},[34,64472,64473,64475,64477,64480],{"class":36,"line":3252},[34,64474,62974],{"class":63},[34,64476,67],{"class":40},[34,64478,64479],{"class":63},"normal",[34,64481,73],{"class":40},[34,64483,64484,64486,64488,64490,64492],{"class":36,"line":3257},[34,64485,62640],{"class":63},[34,64487,67],{"class":40},[34,64489,1495],{"class":63},[34,64491,88],{"class":87},[34,64493,73],{"class":40},[34,64495,64496],{"class":36,"line":3263},[34,64497,2840],{"class":40},[34,64499,64500],{"class":36,"line":3269},[34,64501,3053],{"emptyLinePlaceholder":726},[34,64503,64504,64506,64508],{"class":36,"line":3274},[34,64505,64383],{"class":149},[34,64507,61933],{"class":44},[34,64509,57],{"class":40},[34,64511,64512,64514,64516,64518],{"class":36,"line":8601},[34,64513,55377],{"class":63},[34,64515,67],{"class":40},[34,64517,546],{"class":63},[34,64519,73],{"class":40},[34,64521,64522,64524,64526,64528],{"class":36,"line":8625},[34,64523,55652],{"class":63},[34,64525,67],{"class":40},[34,64527,52125],{"class":63},[34,64529,73],{"class":40},[34,64531,64532,64534,64536,64538],{"class":36,"line":8630},[34,64533,55663],{"class":63},[34,64535,67],{"class":40},[34,64537,52227],{"class":63},[34,64539,73],{"class":40},[34,64541,64542],{"class":36,"line":8636},[34,64543,2840],{"class":40},[34,64545,64546],{"class":36,"line":8663},[34,64547,3053],{"emptyLinePlaceholder":726},[34,64549,64550,64552,64554,64556],{"class":36,"line":8668},[34,64551,64383],{"class":149},[34,64553,61933],{"class":44},[34,64555,55718],{"class":44},[34,64557,57],{"class":40},[34,64559,64560,64562,64564,64566,64568,64570],{"class":36,"line":8674},[34,64561,55351],{"class":63},[34,64563,67],{"class":40},[34,64565,987],{"class":63},[34,64567,9603],{"class":63},[34,64569,88],{"class":87},[34,64571,73],{"class":40},[34,64573,64574,64576,64578,64580,64582],{"class":36,"line":8686},[34,64575,55565],{"class":63},[34,64577,67],{"class":40},[34,64579,1344],{"class":63},[34,64581,88],{"class":87},[34,64583,73],{"class":40},[34,64585,64586],{"class":36,"line":8698},[34,64587,2840],{"class":40},[34,64589,64590],{"class":36,"line":8710},[34,64591,3053],{"emptyLinePlaceholder":726},[34,64593,64594,64596,64598,64600,64602],{"class":36,"line":10369},[34,64595,64383],{"class":149},[34,64597,61933],{"class":44},[34,64599,55718],{"class":44},[34,64601,2058],{"class":44},[34,64603,57],{"class":40},[34,64605,64606,64609,64611,64613],{"class":36,"line":10394},[34,64607,64608],{"class":63},"      text-decoration",[34,64610,67],{"class":40},[34,64612,546],{"class":63},[34,64614,73],{"class":40},[34,64616,64617,64619,64621,64623,64625,64627,64630],{"class":36,"line":10417},[34,64618,62872],{"class":63},[34,64620,67],{"class":40},[34,64622,875],{"class":63},[34,64624,88],{"class":87},[34,64626,52168],{"class":63},[34,64628,64629],{"class":63}," transparent",[34,64631,73],{"class":40},[34,64633,64634,64636,64638,64640],{"class":36,"line":10441},[34,64635,58059],{"class":63},[34,64637,67],{"class":40},[34,64639,534],{"class":63},[34,64641,73],{"class":40},[34,64643,64644],{"class":36,"line":10446},[34,64645,2840],{"class":40},[34,64647,64648],{"class":36,"line":10451},[34,64649,3053],{"emptyLinePlaceholder":726},[34,64651,64652,64654,64656,64658,64660,64663],{"class":36,"line":10456},[34,64653,64383],{"class":149},[34,64655,61933],{"class":44},[34,64657,55718],{"class":44},[34,64659,2058],{"class":44},[34,64661,64662],{"class":149},".active",[34,64664,57],{"class":40},[34,64666,64667,64669,64671,64674],{"class":36,"line":10465},[34,64668,62432],{"class":63},[34,64670,67],{"class":40},[34,64672,64673],{"class":63},"#e1251b",[34,64675,73],{"class":40},[34,64677,64678,64680,64682,64684],{"class":36,"line":10470},[34,64679,58059],{"class":63},[34,64681,67],{"class":40},[34,64683,64673],{"class":63},[34,64685,73],{"class":40},[34,64687,64688],{"class":36,"line":10476},[34,64689,2840],{"class":40},[34,64691,64692],{"class":36,"line":10497},[34,64693,3053],{"emptyLinePlaceholder":726},[34,64695,64696,64699],{"class":36,"line":10503},[34,64697,64698],{"class":149},"    .tab-content",[34,64700,57],{"class":40},[34,64702,64703,64705,64707,64709,64712,64714],{"class":36,"line":10517},[34,64704,55340],{"class":63},[34,64706,67],{"class":40},[34,64708,987],{"class":63},[34,64710,64711],{"class":63}," 16",[34,64713,88],{"class":87},[34,64715,73],{"class":40},[34,64717,64718],{"class":36,"line":10523},[34,64719,2840],{"class":40},[34,64721,64722],{"class":36,"line":10550},[34,64723,3053],{"emptyLinePlaceholder":726},[34,64725,64726,64728,64730],{"class":36,"line":10559},[34,64727,64698],{"class":149},[34,64729,62814],{"class":149},[34,64731,57],{"class":40},[34,64733,64734,64736,64738,64740],{"class":36,"line":10565},[34,64735,55652],{"class":63},[34,64737,67],{"class":40},[34,64739,546],{"class":63},[34,64741,73],{"class":40},[34,64743,64744],{"class":36,"line":10573},[34,64745,2840],{"class":40},[34,64747,64748],{"class":36,"line":10578},[34,64749,3053],{"emptyLinePlaceholder":726},[34,64751,64752,64754,64757],{"class":36,"line":17256},[34,64753,64698],{"class":149},[34,64755,64756],{"class":149}," .item.active",[34,64758,57],{"class":40},[34,64760,64761,64763,64765,64767],{"class":36,"line":17262},[34,64762,55652],{"class":63},[34,64764,67],{"class":40},[34,64766,61512],{"class":63},[34,64768,73],{"class":40},[34,64770,64771],{"class":36,"line":17285},[34,64772,2840],{"class":40},[34,64774,64775,64777,64779],{"class":36,"line":17291},[34,64776,53063],{"class":40},[34,64778,45],{"class":44},[34,64780,48],{"class":40},[34,64782,64783,64785,64787],{"class":36,"line":17314},[34,64784,102],{"class":40},[34,64786,51983],{"class":44},[34,64788,48],{"class":40},[34,64790,64791],{"class":36,"line":17328},[34,64792,3053],{"emptyLinePlaceholder":726},[34,64794,64795,64797,64799],{"class":36,"line":17348},[34,64796,41],{"class":40},[34,64798,52446],{"class":44},[34,64800,48],{"class":40},[34,64802,64803,64805,64807,64809,64811,64814],{"class":36,"line":17354},[34,64804,52790],{"class":40},[34,64806,52258],{"class":44},[34,64808,54132],{"class":149},[34,64810,153],{"class":40},[34,64812,64813],{"class":156},"\"tab\"",[34,64815,48],{"class":40},[34,64817,64818,64820,64822,64824,64826,64829],{"class":36,"line":17365},[34,64819,51990],{"class":40},[34,64821,52258],{"class":44},[34,64823,54132],{"class":149},[34,64825,153],{"class":40},[34,64827,64828],{"class":156},"\"tab-nav\"",[34,64830,48],{"class":40},[34,64832,64833,64835,64837,64840,64842],{"class":36,"line":17388},[34,64834,55877],{"class":40},[34,64836,19],{"class":44},[34,64838,64839],{"class":40},">每日特价\u003C\u002F",[34,64841,19],{"class":44},[34,64843,48],{"class":40},[34,64845,64846,64848,64850],{"class":36,"line":17410},[34,64847,55877],{"class":40},[34,64849,1800],{"class":44},[34,64851,48],{"class":40},[34,64853,64854,64856,64858,64860,64862,64864,64866,64868,64870,64872,64875,64878,64880,64882,64884],{"class":36,"line":17415},[34,64855,55945],{"class":40},[34,64857,755],{"class":44},[34,64859,61694],{"class":40},[34,64861,520],{"class":44},[34,64863,54132],{"class":149},[34,64865,153],{"class":40},[34,64867,60349],{"class":156},[34,64869,267],{"class":149},[34,64871,153],{"class":40},[34,64873,64874],{"class":156},"\"javascript:;\"",[34,64876,64877],{"class":40},">精选\u003C\u002F",[34,64879,520],{"class":44},[34,64881,55957],{"class":40},[34,64883,755],{"class":44},[34,64885,48],{"class":40},[34,64887,64888,64890,64892,64894,64896,64898,64900,64902,64905,64907,64909,64911],{"class":36,"line":17421},[34,64889,55945],{"class":40},[34,64891,755],{"class":44},[34,64893,61694],{"class":40},[34,64895,520],{"class":44},[34,64897,267],{"class":149},[34,64899,153],{"class":40},[34,64901,64874],{"class":156},[34,64903,64904],{"class":40},">美食\u003C\u002F",[34,64906,520],{"class":44},[34,64908,55957],{"class":40},[34,64910,755],{"class":44},[34,64912,48],{"class":40},[34,64914,64915,64917,64919,64921,64923,64925,64927,64929,64932,64934,64936,64938],{"class":36,"line":17435},[34,64916,55945],{"class":40},[34,64918,755],{"class":44},[34,64920,61694],{"class":40},[34,64922,520],{"class":44},[34,64924,267],{"class":149},[34,64926,153],{"class":40},[34,64928,64874],{"class":156},[34,64930,64931],{"class":40},">百货\u003C\u002F",[34,64933,520],{"class":44},[34,64935,55957],{"class":40},[34,64937,755],{"class":44},[34,64939,48],{"class":40},[34,64941,64942,64944,64946,64948,64950,64952,64954,64956,64959,64961,64963,64965],{"class":36,"line":17448},[34,64943,55945],{"class":40},[34,64945,755],{"class":44},[34,64947,61694],{"class":40},[34,64949,520],{"class":44},[34,64951,267],{"class":149},[34,64953,153],{"class":40},[34,64955,64874],{"class":156},[34,64957,64958],{"class":40},">个护\u003C\u002F",[34,64960,520],{"class":44},[34,64962,55957],{"class":40},[34,64964,755],{"class":44},[34,64966,48],{"class":40},[34,64968,64969,64971,64973,64975,64977,64979,64981,64983,64986,64988,64990,64992],{"class":36,"line":17453},[34,64970,55945],{"class":40},[34,64972,755],{"class":44},[34,64974,61694],{"class":40},[34,64976,520],{"class":44},[34,64978,267],{"class":149},[34,64980,153],{"class":40},[34,64982,64874],{"class":156},[34,64984,64985],{"class":40},">预告\u003C\u002F",[34,64987,520],{"class":44},[34,64989,55957],{"class":40},[34,64991,755],{"class":44},[34,64993,48],{"class":40},[34,64995,64996,64998,65000],{"class":36,"line":17467},[34,64997,56050],{"class":40},[34,64999,1800],{"class":44},[34,65001,48],{"class":40},[34,65003,65004,65006,65008],{"class":36,"line":17472},[34,65005,52423],{"class":40},[34,65007,52258],{"class":44},[34,65009,48],{"class":40},[34,65011,65012,65014,65016,65018,65020,65023],{"class":36,"line":17478},[34,65013,51990],{"class":40},[34,65015,52258],{"class":44},[34,65017,54132],{"class":149},[34,65019,153],{"class":40},[34,65021,65022],{"class":156},"\"tab-content\"",[34,65024,48],{"class":40},[34,65026,65027,65029,65031,65033,65035,65038,65040,65042,65044,65046,65049,65051,65053,65055,65058,65060],{"class":36,"line":17483},[34,65028,55877],{"class":40},[34,65030,52258],{"class":44},[34,65032,54132],{"class":149},[34,65034,153],{"class":40},[34,65036,65037],{"class":156},"\"item active\"",[34,65039,61694],{"class":40},[34,65041,2122],{"class":44},[34,65043,55882],{"class":149},[34,65045,153],{"class":40},[34,65047,65048],{"class":156},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[34,65050,55890],{"class":149},[34,65052,153],{"class":40},[34,65054,8305],{"class":156},[34,65056,65057],{"class":40}," \u002F>\u003C\u002F",[34,65059,52258],{"class":44},[34,65061,48],{"class":40},[34,65063,65064,65066,65068,65070,65072,65074,65076,65078,65080,65082,65085,65087,65089,65091,65093,65095],{"class":36,"line":17497},[34,65065,55877],{"class":40},[34,65067,52258],{"class":44},[34,65069,54132],{"class":149},[34,65071,153],{"class":40},[34,65073,63262],{"class":156},[34,65075,61694],{"class":40},[34,65077,2122],{"class":44},[34,65079,55882],{"class":149},[34,65081,153],{"class":40},[34,65083,65084],{"class":156},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[34,65086,55890],{"class":149},[34,65088,153],{"class":40},[34,65090,8305],{"class":156},[34,65092,65057],{"class":40},[34,65094,52258],{"class":44},[34,65096,48],{"class":40},[34,65098,65099,65101,65103,65105,65107,65109,65111,65113,65115,65117,65120,65122,65124,65126,65128,65130],{"class":36,"line":17502},[34,65100,55877],{"class":40},[34,65102,52258],{"class":44},[34,65104,54132],{"class":149},[34,65106,153],{"class":40},[34,65108,63262],{"class":156},[34,65110,61694],{"class":40},[34,65112,2122],{"class":44},[34,65114,55882],{"class":149},[34,65116,153],{"class":40},[34,65118,65119],{"class":156},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[34,65121,55890],{"class":149},[34,65123,153],{"class":40},[34,65125,8305],{"class":156},[34,65127,65057],{"class":40},[34,65129,52258],{"class":44},[34,65131,48],{"class":40},[34,65133,65134,65136,65138,65140,65142,65144,65146,65148,65150,65152,65155,65157,65159,65161,65163,65165],{"class":36,"line":17507},[34,65135,55877],{"class":40},[34,65137,52258],{"class":44},[34,65139,54132],{"class":149},[34,65141,153],{"class":40},[34,65143,63262],{"class":156},[34,65145,61694],{"class":40},[34,65147,2122],{"class":44},[34,65149,55882],{"class":149},[34,65151,153],{"class":40},[34,65153,65154],{"class":156},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[34,65156,55890],{"class":149},[34,65158,153],{"class":40},[34,65160,8305],{"class":156},[34,65162,65057],{"class":40},[34,65164,52258],{"class":44},[34,65166,48],{"class":40},[34,65168,65169,65171,65173,65175,65177,65179,65181,65183,65185,65187,65190,65192,65194,65196,65198,65200],{"class":36,"line":17521},[34,65170,55877],{"class":40},[34,65172,52258],{"class":44},[34,65174,54132],{"class":149},[34,65176,153],{"class":40},[34,65178,63262],{"class":156},[34,65180,61694],{"class":40},[34,65182,2122],{"class":44},[34,65184,55882],{"class":149},[34,65186,153],{"class":40},[34,65188,65189],{"class":156},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[34,65191,55890],{"class":149},[34,65193,153],{"class":40},[34,65195,8305],{"class":156},[34,65197,65057],{"class":40},[34,65199,52258],{"class":44},[34,65201,48],{"class":40},[34,65203,65204,65206,65208],{"class":36,"line":17533},[34,65205,52423],{"class":40},[34,65207,52258],{"class":44},[34,65209,48],{"class":40},[34,65211,65212,65214,65216],{"class":36,"line":17538},[34,65213,53063],{"class":40},[34,65215,52258],{"class":44},[34,65217,48],{"class":40},[34,65219,65220,65222,65224],{"class":36,"line":17551},[34,65221,52790],{"class":40},[34,65223,52459],{"class":44},[34,65225,48],{"class":40},[34,65227,65228],{"class":36,"line":17556},[34,65229,65230],{"class":205},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[34,65232,65233],{"class":36,"line":17561},[34,65234,65235],{"class":205},"    \u002F\u002F 1.1 获取 a 元素 \n",[34,65237,65238,65240,65243,65245,65247,65249,65251,65254],{"class":36,"line":17566},[34,65239,11874],{"class":87},[34,65241,65242],{"class":63}," as",[34,65244,14217],{"class":87},[34,65246,55041],{"class":40},[34,65248,56324],{"class":149},[34,65250,801],{"class":40},[34,65252,65253],{"class":156},"'.tab-nav a'",[34,65255,807],{"class":40},[34,65257,65258],{"class":36,"line":17579},[34,65259,65260],{"class":205},"    \u002F\u002F console.log(as) \n",[34,65262,65263,65265,65267,65269,65271,65273,65275,65277,65279,65282,65284,65286,65288],{"class":36,"line":17584},[34,65264,3854],{"class":87},[34,65266,2312],{"class":40},[34,65268,52493],{"class":87},[34,65270,10091],{"class":40},[34,65272,153],{"class":87},[34,65274,4746],{"class":63},[34,65276,10098],{"class":40},[34,65278,41],{"class":87},[34,65280,65281],{"class":40}," as.",[34,65283,52614],{"class":63},[34,65285,3867],{"class":40},[34,65287,2945],{"class":87},[34,65289,13095],{"class":40},[34,65291,65292],{"class":36,"line":33284},[34,65293,65294],{"class":205},"      \u002F\u002F console.log(as[i])\n",[34,65296,65297],{"class":36,"line":33290},[34,65298,65299],{"class":205},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[34,65301,65302,65305,65307,65309,65312,65314,65316],{"class":36,"line":33296},[34,65303,65304],{"class":40},"      as[i].",[34,65306,58456],{"class":149},[34,65308,801],{"class":40},[34,65310,65311],{"class":156},"'mouseenter'",[34,65313,13088],{"class":40},[34,65315,55094],{"class":87},[34,65317,55097],{"class":40},[34,65319,65320],{"class":36,"line":33302},[34,65321,65322],{"class":205},"        \u002F\u002F console.log('鼠标经过')\n",[34,65324,65325],{"class":36,"line":33308},[34,65326,65327],{"class":205},"        \u002F\u002F 排他思想  \n",[34,65329,65330],{"class":36,"line":33319},[34,65331,65332],{"class":205},"        \u002F\u002F 干掉别人 移除类active\n",[34,65334,65335,65337,65339,65341,65344,65346,65348,65350,65353],{"class":36,"line":33325},[34,65336,52571],{"class":40},[34,65338,55044],{"class":149},[34,65340,801],{"class":40},[34,65342,65343],{"class":156},"'.tab-nav .active'",[34,65345,57646],{"class":40},[34,65347,57649],{"class":149},[34,65349,801],{"class":40},[34,65351,65352],{"class":156},"'active'",[34,65354,807],{"class":40},[34,65356,65357],{"class":36,"line":33345},[34,65358,65359],{"class":205},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[34,65361,65362,65365,65368,65370,65372,65374],{"class":36,"line":33351},[34,65363,65364],{"class":63},"        this",[34,65366,65367],{"class":40},".classList.",[34,65369,5987],{"class":149},[34,65371,801],{"class":40},[34,65373,65352],{"class":156},[34,65375,807],{"class":40},[34,65377,65378],{"class":36,"line":33362},[34,65379,3053],{"emptyLinePlaceholder":726},[34,65381,65382],{"class":36,"line":33368},[34,65383,65384],{"class":205},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[34,65386,65387],{"class":36,"line":33374},[34,65388,65389],{"class":205},"        \u002F\u002F 干掉别人\n",[34,65391,65392,65394,65396,65398,65401,65403,65405,65407,65409],{"class":36,"line":33380},[34,65393,52571],{"class":40},[34,65395,55044],{"class":149},[34,65397,801],{"class":40},[34,65399,65400],{"class":156},"'.tab-content .active'",[34,65402,57646],{"class":40},[34,65404,57649],{"class":149},[34,65406,801],{"class":40},[34,65408,65352],{"class":156},[34,65410,807],{"class":40},[34,65412,65413],{"class":36,"line":33386},[34,65414,65415],{"class":205},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[34,65417,65418,65420,65422,65424,65427,65429,65431,65433,65435,65437,65439,65441,65443],{"class":36,"line":33392},[34,65419,52571],{"class":40},[34,65421,55044],{"class":149},[34,65423,801],{"class":40},[34,65425,65426],{"class":156},"`.tab-content .item:nth-child(${",[34,65428,1236],{"class":40},[34,65430,46217],{"class":87},[34,65432,25771],{"class":63},[34,65434,57675],{"class":156},[34,65436,57646],{"class":40},[34,65438,5987],{"class":149},[34,65440,801],{"class":40},[34,65442,65352],{"class":156},[34,65444,807],{"class":40},[34,65446,65447],{"class":36,"line":33398},[34,65448,3053],{"emptyLinePlaceholder":726},[34,65450,65451],{"class":36,"line":33404},[34,65452,65453],{"class":40},"      })\n",[34,65455,65456],{"class":36,"line":33424},[34,65457,2840],{"class":40},[34,65459,65460,65462,65464],{"class":36,"line":33430},[34,65461,53063],{"class":40},[34,65463,52459],{"class":44},[34,65465,48],{"class":40},[34,65467,65468,65470,65472],{"class":36,"line":33446},[34,65469,102],{"class":40},[34,65471,52446],{"class":44},[34,65473,48],{"class":40},[34,65475,65476],{"class":36,"line":33452},[34,65477,3053],{"emptyLinePlaceholder":726},[34,65479,65480,65482,65484],{"class":36,"line":33466},[34,65481,102],{"class":40},[34,65483,51286],{"class":44},[34,65485,48],{"class":40},[108,65487,65488],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[108,65490,65491],{},"在监听事件中，this指向的就是他的调用者",[108,65493,65494],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[108,65496,54366],{},[108,65498,65499],{},"(function () {",[108,65501,65502],{},"const list = document.querySelector('.xtx-elevator-list')",[108,65504,65505],{},"list.addEventListener('click', function (e) {",[108,65507,65508],{},"if (e.target.tagName === 'A') {",[108,65510,65511],{},"\u002F\u002F 排他思想",[108,65513,65514],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[108,65516,65517],{},"const old = document.querySelector('.xtx-elevator-list .active')",[108,65519,65520],{},"\u002F\u002F console.log(old);",[108,65522,65523],{},"\u002F\u002F 判断",[108,65525,65526],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[108,65528,65529],{},"if (old) old.classList.remove('active')",[108,65531,65532],{},"e.target.classList.add('active')",[108,65534,1739],{},[108,65536,53110],{},[108,65538,65539],{},"})();",[19,65541,65543],{"id":65542},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[24,65545,65547],{"className":51284,"code":65546,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,65548,65549,65559,65563,65571,65575,65589,65603,65615,65623,65629,65639,65649,65653,65657,65664,65676,65687,65704,65717,65731,65741,65745,65749,65756,65767,65785,65795,65807,65811,65815,65822,65839,65850,65862,65866,65870,65877,65889,65893,65901,65909,65913,65921,65929,65937,65952,65996,66004,66017,66030,66043,66051,66059,66067,66095,66103,66115,66128,66141,66149,66157,66165,66191,66199,66212,66224,66237,66245,66253,66261,66287,66295,66308,66320,66333,66341,66349,66357,66362,66382,66387,66407,66412,66429,66434,66442,66447,66476,66489,66493,66497,66502,66506,66534,66539,66556,66561,66566,66571,66576,66602,66606,66610,66618,66626,66630],{"__ignoreMap":29},[34,65550,65551,65553,65555,65557],{"class":36,"line":37},[34,65552,51948],{"class":40},[34,65554,51951],{"class":44},[34,65556,51954],{"class":149},[34,65558,48],{"class":40},[34,65560,65561],{"class":36,"line":51},[34,65562,3053],{"emptyLinePlaceholder":726},[34,65564,65565,65567,65569],{"class":36,"line":60},[34,65566,41],{"class":40},[34,65568,51286],{"class":44},[34,65570,48],{"class":40},[34,65572,65573],{"class":36,"line":76},[34,65574,3053],{"emptyLinePlaceholder":726},[34,65576,65577,65579,65581,65583,65585,65587],{"class":36,"line":93},[34,65578,41],{"class":40},[34,65580,51983],{"class":44},[34,65582,51965],{"class":149},[34,65584,153],{"class":40},[34,65586,51970],{"class":156},[34,65588,48],{"class":40},[34,65590,65591,65593,65595,65597,65599,65601],{"class":36,"line":99},[34,65592,52790],{"class":40},[34,65594,51993],{"class":44},[34,65596,51996],{"class":149},[34,65598,153],{"class":40},[34,65600,52001],{"class":156},[34,65602,48],{"class":40},[34,65604,65605,65607,65609,65611,65613],{"class":36,"line":353},[34,65606,52790],{"class":40},[34,65608,52056],{"class":44},[34,65610,55957],{"class":40},[34,65612,52056],{"class":44},[34,65614,48],{"class":40},[34,65616,65617,65619,65621],{"class":36,"line":359},[34,65618,52790],{"class":40},[34,65620,45],{"class":44},[34,65622,48],{"class":40},[34,65624,65625,65627],{"class":36,"line":579},[34,65626,7056],{"class":44},[34,65628,57],{"class":40},[34,65630,65631,65633,65635,65637],{"class":36,"line":589},[34,65632,55351],{"class":63},[34,65634,67],{"class":40},[34,65636,987],{"class":63},[34,65638,73],{"class":40},[34,65640,65641,65643,65645,65647],{"class":36,"line":601},[34,65642,55340],{"class":63},[34,65644,67],{"class":40},[34,65646,987],{"class":63},[34,65648,73],{"class":40},[34,65650,65651],{"class":36,"line":613},[34,65652,2840],{"class":40},[34,65654,65655],{"class":36,"line":618},[34,65656,3053],{"emptyLinePlaceholder":726},[34,65658,65659,65662],{"class":36,"line":628},[34,65660,65661],{"class":44},"    table",[34,65663,57],{"class":40},[34,65665,65666,65669,65671,65674],{"class":36,"line":640},[34,65667,65668],{"class":63},"      border-collapse",[34,65670,67],{"class":40},[34,65672,65673],{"class":63},"collapse",[34,65675,73],{"class":40},[34,65677,65678,65681,65683,65685],{"class":36,"line":2301},[34,65679,65680],{"class":63},"      border-spacing",[34,65682,67],{"class":40},[34,65684,987],{"class":63},[34,65686,73],{"class":40},[34,65688,65689,65691,65693,65695,65697,65699,65702],{"class":36,"line":2307},[34,65690,62617],{"class":63},[34,65692,67],{"class":40},[34,65694,1013],{"class":63},[34,65696,88],{"class":87},[34,65698,52168],{"class":63},[34,65700,65701],{"class":63}," #c0c0c0",[34,65703,73],{"class":40},[34,65705,65706,65708,65710,65713,65715],{"class":36,"line":2328},[34,65707,55415],{"class":63},[34,65709,67],{"class":40},[34,65711,65712],{"class":63},"500",[34,65714,88],{"class":87},[34,65716,73],{"class":40},[34,65718,65719,65721,65723,65725,65727,65729],{"class":36,"line":2333},[34,65720,55351],{"class":63},[34,65722,67],{"class":40},[34,65724,1106],{"class":63},[34,65726,88],{"class":87},[34,65728,52203],{"class":63},[34,65730,73],{"class":40},[34,65732,65733,65735,65737,65739],{"class":36,"line":2347},[34,65734,57929],{"class":63},[34,65736,67],{"class":40},[34,65738,52239],{"class":63},[34,65740,73],{"class":40},[34,65742,65743],{"class":36,"line":2352},[34,65744,2840],{"class":40},[34,65746,65747],{"class":36,"line":2381},[34,65748,3053],{"emptyLinePlaceholder":726},[34,65750,65751,65754],{"class":36,"line":2386},[34,65752,65753],{"class":44},"    th",[34,65755,57],{"class":40},[34,65757,65758,65760,65762,65765],{"class":36,"line":2403},[34,65759,55528],{"class":63},[34,65761,67],{"class":40},[34,65763,65764],{"class":63},"#09c",[34,65766,73],{"class":40},[34,65768,65769,65772,65774,65776,65778,65780,65783],{"class":36,"line":2408},[34,65770,65771],{"class":63},"      font",[34,65773,67],{"class":40},[34,65775,62979],{"class":63},[34,65777,64711],{"class":63},[34,65779,88],{"class":87},[34,65781,65782],{"class":156}," \"微软雅黑\"",[34,65784,73],{"class":40},[34,65786,65787,65789,65791,65793],{"class":36,"line":2413},[34,65788,58059],{"class":63},[34,65790,67],{"class":40},[34,65792,61485],{"class":63},[34,65794,73],{"class":40},[34,65796,65797,65799,65801,65803,65805],{"class":36,"line":2418},[34,65798,55429],{"class":63},[34,65800,67],{"class":40},[34,65802,84],{"class":63},[34,65804,88],{"class":87},[34,65806,73],{"class":40},[34,65808,65809],{"class":36,"line":2432},[34,65810,2840],{"class":40},[34,65812,65813],{"class":36,"line":2437},[34,65814,3053],{"emptyLinePlaceholder":726},[34,65816,65817,65820],{"class":36,"line":3230},[34,65818,65819],{"class":44},"    td",[34,65821,57],{"class":40},[34,65823,65824,65826,65828,65830,65832,65834,65837],{"class":36,"line":3244},[34,65825,62617],{"class":63},[34,65827,67],{"class":40},[34,65829,1013],{"class":63},[34,65831,88],{"class":87},[34,65833,52168],{"class":63},[34,65835,65836],{"class":63}," #d0d0d0",[34,65838,73],{"class":40},[34,65840,65841,65843,65845,65848],{"class":36,"line":3252},[34,65842,58059],{"class":63},[34,65844,67],{"class":40},[34,65846,65847],{"class":63},"#404060",[34,65849,73],{"class":40},[34,65851,65852,65854,65856,65858,65860],{"class":36,"line":3257},[34,65853,55340],{"class":63},[34,65855,67],{"class":40},[34,65857,1241],{"class":63},[34,65859,88],{"class":87},[34,65861,73],{"class":40},[34,65863,65864],{"class":36,"line":3263},[34,65865,2840],{"class":40},[34,65867,65868],{"class":36,"line":3269},[34,65869,3053],{"emptyLinePlaceholder":726},[34,65871,65872,65875],{"class":36,"line":3274},[34,65873,65874],{"class":149},"    .allCheck",[34,65876,57],{"class":40},[34,65878,65879,65881,65883,65885,65887],{"class":36,"line":8601},[34,65880,55415],{"class":63},[34,65882,67],{"class":40},[34,65884,1407],{"class":63},[34,65886,88],{"class":87},[34,65888,73],{"class":40},[34,65890,65891],{"class":36,"line":8625},[34,65892,2840],{"class":40},[34,65894,65895,65897,65899],{"class":36,"line":8630},[34,65896,53063],{"class":40},[34,65898,45],{"class":44},[34,65900,48],{"class":40},[34,65902,65903,65905,65907],{"class":36,"line":8636},[34,65904,102],{"class":40},[34,65906,51983],{"class":44},[34,65908,48],{"class":40},[34,65910,65911],{"class":36,"line":8663},[34,65912,3053],{"emptyLinePlaceholder":726},[34,65914,65915,65917,65919],{"class":36,"line":8668},[34,65916,41],{"class":40},[34,65918,52446],{"class":44},[34,65920,48],{"class":40},[34,65922,65923,65925,65927],{"class":36,"line":8674},[34,65924,52790],{"class":40},[34,65926,934],{"class":44},[34,65928,48],{"class":40},[34,65930,65931,65933,65935],{"class":36,"line":8686},[34,65932,51990],{"class":40},[34,65934,940],{"class":44},[34,65936,48],{"class":40},[34,65938,65939,65941,65943,65945,65947,65950],{"class":36,"line":8698},[34,65940,55877],{"class":40},[34,65942,943],{"class":44},[34,65944,54132],{"class":149},[34,65946,153],{"class":40},[34,65948,65949],{"class":156},"\"allCheck\"",[34,65951,48],{"class":40},[34,65953,65954,65956,65958,65960,65962,65964,65966,65968,65970,65972,65974,65977,65980,65982,65984,65986,65989,65992,65994],{"class":36,"line":8710},[34,65955,55945],{"class":40},[34,65957,669],{"class":44},[34,65959,54469],{"class":149},[34,65961,153],{"class":40},[34,65963,54474],{"class":156},[34,65965,15573],{"class":149},[34,65967,153],{"class":40},[34,65969,8305],{"class":156},[34,65971,15612],{"class":149},[34,65973,153],{"class":40},[34,65975,65976],{"class":156},"\"checkAll\"",[34,65978,65979],{"class":40},"> \u003C",[34,65981,34],{"class":44},[34,65983,54132],{"class":149},[34,65985,153],{"class":40},[34,65987,65988],{"class":156},"\"all\"",[34,65990,65991],{"class":40},">全选\u003C\u002F",[34,65993,34],{"class":44},[34,65995,48],{"class":40},[34,65997,65998,66000,66002],{"class":36,"line":10369},[34,65999,56050],{"class":40},[34,66001,943],{"class":44},[34,66003,48],{"class":40},[34,66005,66006,66008,66010,66013,66015],{"class":36,"line":10394},[34,66007,55877],{"class":40},[34,66009,943],{"class":44},[34,66011,66012],{"class":40},">商品\u003C\u002F",[34,66014,943],{"class":44},[34,66016,48],{"class":40},[34,66018,66019,66021,66023,66026,66028],{"class":36,"line":10417},[34,66020,55877],{"class":40},[34,66022,943],{"class":44},[34,66024,66025],{"class":40},">商家\u003C\u002F",[34,66027,943],{"class":44},[34,66029,48],{"class":40},[34,66031,66032,66034,66036,66039,66041],{"class":36,"line":10441},[34,66033,55877],{"class":40},[34,66035,943],{"class":44},[34,66037,66038],{"class":40},">价格\u003C\u002F",[34,66040,943],{"class":44},[34,66042,48],{"class":40},[34,66044,66045,66047,66049],{"class":36,"line":10446},[34,66046,52423],{"class":40},[34,66048,940],{"class":44},[34,66050,48],{"class":40},[34,66052,66053,66055,66057],{"class":36,"line":10451},[34,66054,51990],{"class":40},[34,66056,940],{"class":44},[34,66058,48],{"class":40},[34,66060,66061,66063,66065],{"class":36,"line":10456},[34,66062,55877],{"class":40},[34,66064,985],{"class":44},[34,66066,48],{"class":40},[34,66068,66069,66071,66073,66075,66077,66079,66081,66083,66086,66088,66090,66093],{"class":36,"line":10465},[34,66070,55945],{"class":40},[34,66072,669],{"class":44},[34,66074,54469],{"class":149},[34,66076,153],{"class":40},[34,66078,54474],{"class":156},[34,66080,15573],{"class":149},[34,66082,153],{"class":40},[34,66084,66085],{"class":156},"\"check\"",[34,66087,54132],{"class":149},[34,66089,153],{"class":40},[34,66091,66092],{"class":156},"\"ck\"",[34,66094,48],{"class":40},[34,66096,66097,66099,66101],{"class":36,"line":10470},[34,66098,56050],{"class":40},[34,66100,985],{"class":44},[34,66102,48],{"class":40},[34,66104,66105,66107,66109,66111,66113],{"class":36,"line":10476},[34,66106,55877],{"class":40},[34,66108,985],{"class":44},[34,66110,61814],{"class":40},[34,66112,985],{"class":44},[34,66114,48],{"class":40},[34,66116,66117,66119,66121,66124,66126],{"class":36,"line":10497},[34,66118,55877],{"class":40},[34,66120,985],{"class":44},[34,66122,66123],{"class":40},">小米\u003C\u002F",[34,66125,985],{"class":44},[34,66127,48],{"class":40},[34,66129,66130,66132,66134,66137,66139],{"class":36,"line":10503},[34,66131,55877],{"class":40},[34,66133,985],{"class":44},[34,66135,66136],{"class":40},">￥1999\u003C\u002F",[34,66138,985],{"class":44},[34,66140,48],{"class":40},[34,66142,66143,66145,66147],{"class":36,"line":10517},[34,66144,52423],{"class":40},[34,66146,940],{"class":44},[34,66148,48],{"class":40},[34,66150,66151,66153,66155],{"class":36,"line":10523},[34,66152,51990],{"class":40},[34,66154,940],{"class":44},[34,66156,48],{"class":40},[34,66158,66159,66161,66163],{"class":36,"line":10550},[34,66160,55877],{"class":40},[34,66162,985],{"class":44},[34,66164,48],{"class":40},[34,66166,66167,66169,66171,66173,66175,66177,66179,66181,66183,66185,66187,66189],{"class":36,"line":10559},[34,66168,55945],{"class":40},[34,66170,669],{"class":44},[34,66172,54469],{"class":149},[34,66174,153],{"class":40},[34,66176,54474],{"class":156},[34,66178,15573],{"class":149},[34,66180,153],{"class":40},[34,66182,66085],{"class":156},[34,66184,54132],{"class":149},[34,66186,153],{"class":40},[34,66188,66092],{"class":156},[34,66190,48],{"class":40},[34,66192,66193,66195,66197],{"class":36,"line":10565},[34,66194,56050],{"class":40},[34,66196,985],{"class":44},[34,66198,48],{"class":40},[34,66200,66201,66203,66205,66208,66210],{"class":36,"line":10573},[34,66202,55877],{"class":40},[34,66204,985],{"class":44},[34,66206,66207],{"class":40},">小米净水器\u003C\u002F",[34,66209,985],{"class":44},[34,66211,48],{"class":40},[34,66213,66214,66216,66218,66220,66222],{"class":36,"line":10578},[34,66215,55877],{"class":40},[34,66217,985],{"class":44},[34,66219,66123],{"class":40},[34,66221,985],{"class":44},[34,66223,48],{"class":40},[34,66225,66226,66228,66230,66233,66235],{"class":36,"line":17256},[34,66227,55877],{"class":40},[34,66229,985],{"class":44},[34,66231,66232],{"class":40},">￥4999\u003C\u002F",[34,66234,985],{"class":44},[34,66236,48],{"class":40},[34,66238,66239,66241,66243],{"class":36,"line":17262},[34,66240,52423],{"class":40},[34,66242,940],{"class":44},[34,66244,48],{"class":40},[34,66246,66247,66249,66251],{"class":36,"line":17285},[34,66248,51990],{"class":40},[34,66250,940],{"class":44},[34,66252,48],{"class":40},[34,66254,66255,66257,66259],{"class":36,"line":17291},[34,66256,55877],{"class":40},[34,66258,985],{"class":44},[34,66260,48],{"class":40},[34,66262,66263,66265,66267,66269,66271,66273,66275,66277,66279,66281,66283,66285],{"class":36,"line":17314},[34,66264,55945],{"class":40},[34,66266,669],{"class":44},[34,66268,54469],{"class":149},[34,66270,153],{"class":40},[34,66272,54474],{"class":156},[34,66274,15573],{"class":149},[34,66276,153],{"class":40},[34,66278,66085],{"class":156},[34,66280,54132],{"class":149},[34,66282,153],{"class":40},[34,66284,66092],{"class":156},[34,66286,48],{"class":40},[34,66288,66289,66291,66293],{"class":36,"line":17328},[34,66290,56050],{"class":40},[34,66292,985],{"class":44},[34,66294,48],{"class":40},[34,66296,66297,66299,66301,66304,66306],{"class":36,"line":17348},[34,66298,55877],{"class":40},[34,66300,985],{"class":44},[34,66302,66303],{"class":40},">小米电视\u003C\u002F",[34,66305,985],{"class":44},[34,66307,48],{"class":40},[34,66309,66310,66312,66314,66316,66318],{"class":36,"line":17354},[34,66311,55877],{"class":40},[34,66313,985],{"class":44},[34,66315,66123],{"class":40},[34,66317,985],{"class":44},[34,66319,48],{"class":40},[34,66321,66322,66324,66326,66329,66331],{"class":36,"line":17365},[34,66323,55877],{"class":40},[34,66325,985],{"class":44},[34,66327,66328],{"class":40},">￥5999\u003C\u002F",[34,66330,985],{"class":44},[34,66332,48],{"class":40},[34,66334,66335,66337,66339],{"class":36,"line":17388},[34,66336,52423],{"class":40},[34,66338,940],{"class":44},[34,66340,48],{"class":40},[34,66342,66343,66345,66347],{"class":36,"line":17410},[34,66344,53063],{"class":40},[34,66346,934],{"class":44},[34,66348,48],{"class":40},[34,66350,66351,66353,66355],{"class":36,"line":17415},[34,66352,52790],{"class":40},[34,66354,52459],{"class":44},[34,66356,48],{"class":40},[34,66358,66359],{"class":36,"line":17421},[34,66360,66361],{"class":205},"    \u002F\u002F 1. 获取大复选框\n",[34,66363,66364,66366,66369,66371,66373,66375,66377,66380],{"class":36,"line":17435},[34,66365,11874],{"class":87},[34,66367,66368],{"class":63}," checkAll",[34,66370,14217],{"class":87},[34,66372,55041],{"class":40},[34,66374,55044],{"class":149},[34,66376,801],{"class":40},[34,66378,66379],{"class":156},"'#checkAll'",[34,66381,807],{"class":40},[34,66383,66384],{"class":36,"line":17448},[34,66385,66386],{"class":205},"    \u002F\u002F 2. 获取所有的小复选框\n",[34,66388,66389,66391,66394,66396,66398,66400,66402,66405],{"class":36,"line":17453},[34,66390,11874],{"class":87},[34,66392,66393],{"class":63}," cks",[34,66395,14217],{"class":87},[34,66397,55041],{"class":40},[34,66399,56324],{"class":149},[34,66401,801],{"class":40},[34,66403,66404],{"class":156},"'.ck'",[34,66406,807],{"class":40},[34,66408,66409],{"class":36,"line":17467},[34,66410,66411],{"class":205},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[34,66413,66414,66417,66419,66421,66423,66425,66427],{"class":36,"line":17472},[34,66415,66416],{"class":40},"    checkAll.",[34,66418,58456],{"class":149},[34,66420,801],{"class":40},[34,66422,58461],{"class":156},[34,66424,13088],{"class":40},[34,66426,55094],{"class":87},[34,66428,55097],{"class":40},[34,66430,66431],{"class":36,"line":17478},[34,66432,66433],{"class":205},"      \u002F\u002F 得到当前大复选框的选中状态\n",[34,66435,66436,66439],{"class":36,"line":17483},[34,66437,66438],{"class":205},"      \u002F\u002F console.log(checkAll.checked)",[34,66440,66441],{"class":205},"  \u002F\u002F 得到 是 true 或者是 false\n",[34,66443,66444],{"class":36,"line":17497},[34,66445,66446],{"class":205},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[34,66448,66449,66451,66453,66455,66457,66459,66461,66463,66465,66468,66470,66472,66474],{"class":36,"line":17502},[34,66450,52930],{"class":87},[34,66452,2312],{"class":40},[34,66454,52493],{"class":87},[34,66456,10091],{"class":40},[34,66458,153],{"class":87},[34,66460,4746],{"class":63},[34,66462,10098],{"class":40},[34,66464,41],{"class":87},[34,66466,66467],{"class":40}," cks.",[34,66469,52614],{"class":63},[34,66471,3867],{"class":40},[34,66473,2945],{"class":87},[34,66475,13095],{"class":40},[34,66477,66478,66481,66483,66486],{"class":36,"line":17507},[34,66479,66480],{"class":40},"        cks[i].checked ",[34,66482,153],{"class":87},[34,66484,66485],{"class":63}," this",[34,66487,66488],{"class":40},".checked\n",[34,66490,66491],{"class":36,"line":17521},[34,66492,53044],{"class":40},[34,66494,66495],{"class":36,"line":17533},[34,66496,34112],{"class":40},[34,66498,66499],{"class":36,"line":17538},[34,66500,66501],{"class":205},"    \u002F\u002F 5. 小复选框控制大复选框\n",[34,66503,66504],{"class":36,"line":17551},[34,66505,3053],{"emptyLinePlaceholder":726},[34,66507,66508,66510,66512,66514,66516,66518,66520,66522,66524,66526,66528,66530,66532],{"class":36,"line":17556},[34,66509,3854],{"class":87},[34,66511,2312],{"class":40},[34,66513,52493],{"class":87},[34,66515,10091],{"class":40},[34,66517,153],{"class":87},[34,66519,4746],{"class":63},[34,66521,10098],{"class":40},[34,66523,41],{"class":87},[34,66525,66467],{"class":40},[34,66527,52614],{"class":63},[34,66529,3867],{"class":40},[34,66531,2945],{"class":87},[34,66533,13095],{"class":40},[34,66535,66536],{"class":36,"line":17561},[34,66537,66538],{"class":205},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[34,66540,66541,66544,66546,66548,66550,66552,66554],{"class":36,"line":17566},[34,66542,66543],{"class":40},"      cks[i].",[34,66545,58456],{"class":149},[34,66547,801],{"class":40},[34,66549,58461],{"class":156},[34,66551,13088],{"class":40},[34,66553,55094],{"class":87},[34,66555,55097],{"class":40},[34,66557,66558],{"class":36,"line":17579},[34,66559,66560],{"class":205},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[34,66562,66563],{"class":36,"line":17584},[34,66564,66565],{"class":205},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[34,66567,66568],{"class":36,"line":33284},[34,66569,66570],{"class":205},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[34,66572,66573],{"class":36,"line":33290},[34,66574,66575],{"class":205},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[34,66577,66578,66581,66583,66585,66587,66589,66592,66594,66596,66598,66600],{"class":36,"line":33296},[34,66579,66580],{"class":40},"        checkAll.checked ",[34,66582,153],{"class":87},[34,66584,55041],{"class":40},[34,66586,56324],{"class":149},[34,66588,801],{"class":40},[34,66590,66591],{"class":156},"'.ck:checked'",[34,66593,31477],{"class":40},[34,66595,52614],{"class":63},[34,66597,58549],{"class":87},[34,66599,66467],{"class":40},[34,66601,56474],{"class":63},[34,66603,66604],{"class":36,"line":33302},[34,66605,65453],{"class":40},[34,66607,66608],{"class":36,"line":33308},[34,66609,2840],{"class":40},[34,66611,66612,66614,66616],{"class":36,"line":33319},[34,66613,53063],{"class":40},[34,66615,52459],{"class":44},[34,66617,48],{"class":40},[34,66619,66620,66622,66624],{"class":36,"line":33325},[34,66621,102],{"class":40},[34,66623,52446],{"class":44},[34,66625,48],{"class":40},[34,66627,66628],{"class":36,"line":33345},[34,66629,3053],{"emptyLinePlaceholder":726},[34,66631,66632,66634,66636],{"class":36,"line":33351},[34,66633,102],{"class":40},[34,66635,51286],{"class":44},[34,66637,48],{"class":40},[108,66639,66640],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[108,66642,66643],{},"用好之间比较得到的布尔值！！！",[108,66645,66646,66647,66650,66651,2312,66654,1379,66656,66659],{},"在 JS 里访问的时候，",[31,66648,66649],{},"checkbox.checked"," 是一个 ",[111,66652,66653],{},"布尔值",[31,66655,2022],{},[31,66657,66658],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[108,66661,66662,66663,66666,66667],{},"HTML 的 ",[31,66664,66665],{},"checked=\"checked\""," 只是 ",[111,66668,66669,66670,66673],{},"初始值；JS 的 ",[31,66671,66672],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[108,66675,66676],{},"：checked是一个伪类选择器",[108,66678,66679],{},[2122,66680],{"alt":29,"src":66681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[108,66683,66684,66687],{},[66685,66686],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[108,66689,66690],{},[2122,66691],{"alt":29,"src":66692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66694,66696],{"id":66695},"_33-dom事件进阶","3.3 DOM事件进阶",[19,66698,66700],{"id":66699},"_331-事件流","3.3.1 事件流",[108,66702,66703],{},[2122,66704],{"alt":29,"src":66705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22650,66707,66709],{"id":66708},"_3311-事件捕获","3.3.1.1 事件捕获",[108,66711,66712],{},[2122,66713],{"alt":29,"src":66714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[24,66716,66718],{"className":51284,"code":66717,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,66719,66720,66730,66744,66748,66756,66770,66790,66802,66810,66817,66829,66841,66851,66855,66859,66866,66878,66890,66900,66904,66912,66920,66924,66932,66947,66966,66974,66982,67002,67022,67038,67049,67057,67074,67085,67093,67110,67121,67129,67137,67145,67149],{"__ignoreMap":29},[34,66721,66722,66724,66726,66728],{"class":36,"line":37},[34,66723,51948],{"class":40},[34,66725,51951],{"class":44},[34,66727,51954],{"class":149},[34,66729,48],{"class":40},[34,66731,66732,66734,66736,66738,66740,66742],{"class":36,"line":51},[34,66733,41],{"class":40},[34,66735,51286],{"class":44},[34,66737,51965],{"class":149},[34,66739,153],{"class":40},[34,66741,51970],{"class":156},[34,66743,48],{"class":40},[34,66745,66746],{"class":36,"line":60},[34,66747,3053],{"emptyLinePlaceholder":726},[34,66749,66750,66752,66754],{"class":36,"line":76},[34,66751,41],{"class":40},[34,66753,51983],{"class":44},[34,66755,48],{"class":40},[34,66757,66758,66760,66762,66764,66766,66768],{"class":36,"line":93},[34,66759,52790],{"class":40},[34,66761,51993],{"class":44},[34,66763,51996],{"class":149},[34,66765,153],{"class":40},[34,66767,52001],{"class":156},[34,66769,48],{"class":40},[34,66771,66772,66774,66776,66778,66780,66782,66784,66786,66788],{"class":36,"line":99},[34,66773,52790],{"class":40},[34,66775,51993],{"class":44},[34,66777,15573],{"class":149},[34,66779,153],{"class":40},[34,66781,52040],{"class":156},[34,66783,52020],{"class":149},[34,66785,153],{"class":40},[34,66787,52047],{"class":156},[34,66789,48],{"class":40},[34,66791,66792,66794,66796,66798,66800],{"class":36,"line":353},[34,66793,52790],{"class":40},[34,66795,52056],{"class":44},[34,66797,52059],{"class":40},[34,66799,52056],{"class":44},[34,66801,48],{"class":40},[34,66803,66804,66806,66808],{"class":36,"line":359},[34,66805,52790],{"class":40},[34,66807,45],{"class":44},[34,66809,48],{"class":40},[34,66811,66812,66815],{"class":36,"line":579},[34,66813,66814],{"class":149},"    .father",[34,66816,57],{"class":40},[34,66818,66819,66821,66823,66825,66827],{"class":36,"line":589},[34,66820,55415],{"class":63},[34,66822,67],{"class":40},[34,66824,65712],{"class":63},[34,66826,88],{"class":87},[34,66828,73],{"class":40},[34,66830,66831,66833,66835,66837,66839],{"class":36,"line":601},[34,66832,55429],{"class":63},[34,66834,67],{"class":40},[34,66836,65712],{"class":63},[34,66838,88],{"class":87},[34,66840,73],{"class":40},[34,66842,66843,66845,66847,66849],{"class":36,"line":613},[34,66844,55528],{"class":63},[34,66846,67],{"class":40},[34,66848,52292],{"class":63},[34,66850,73],{"class":40},[34,66852,66853],{"class":36,"line":618},[34,66854,2840],{"class":40},[34,66856,66857],{"class":36,"line":628},[34,66858,3053],{"emptyLinePlaceholder":726},[34,66860,66861,66864],{"class":36,"line":640},[34,66862,66863],{"class":149},"    .son",[34,66865,57],{"class":40},[34,66867,66868,66870,66872,66874,66876],{"class":36,"line":2301},[34,66869,55415],{"class":63},[34,66871,67],{"class":40},[34,66873,2376],{"class":63},[34,66875,88],{"class":87},[34,66877,73],{"class":40},[34,66879,66880,66882,66884,66886,66888],{"class":36,"line":2307},[34,66881,55429],{"class":63},[34,66883,67],{"class":40},[34,66885,2376],{"class":63},[34,66887,88],{"class":87},[34,66889,73],{"class":40},[34,66891,66892,66894,66896,66898],{"class":36,"line":2328},[34,66893,55528],{"class":63},[34,66895,67],{"class":40},[34,66897,596],{"class":63},[34,66899,73],{"class":40},[34,66901,66902],{"class":36,"line":2333},[34,66903,2840],{"class":40},[34,66905,66906,66908,66910],{"class":36,"line":2347},[34,66907,53063],{"class":40},[34,66909,45],{"class":44},[34,66911,48],{"class":40},[34,66913,66914,66916,66918],{"class":36,"line":2352},[34,66915,102],{"class":40},[34,66917,51983],{"class":44},[34,66919,48],{"class":40},[34,66921,66922],{"class":36,"line":2381},[34,66923,3053],{"emptyLinePlaceholder":726},[34,66925,66926,66928,66930],{"class":36,"line":2386},[34,66927,41],{"class":40},[34,66929,52446],{"class":44},[34,66931,48],{"class":40},[34,66933,66934,66936,66938,66940,66942,66945],{"class":36,"line":2403},[34,66935,52790],{"class":40},[34,66937,52258],{"class":44},[34,66939,54132],{"class":149},[34,66941,153],{"class":40},[34,66943,66944],{"class":156},"\"father\"",[34,66946,48],{"class":40},[34,66948,66949,66951,66953,66955,66957,66960,66962,66964],{"class":36,"line":2408},[34,66950,51990],{"class":40},[34,66952,52258],{"class":44},[34,66954,54132],{"class":149},[34,66956,153],{"class":40},[34,66958,66959],{"class":156},"\"son\"",[34,66961,55957],{"class":40},[34,66963,52258],{"class":44},[34,66965,48],{"class":40},[34,66967,66968,66970,66972],{"class":36,"line":2413},[34,66969,53063],{"class":40},[34,66971,52258],{"class":44},[34,66973,48],{"class":40},[34,66975,66976,66978,66980],{"class":36,"line":2418},[34,66977,52790],{"class":40},[34,66979,52459],{"class":44},[34,66981,48],{"class":40},[34,66983,66984,66986,66989,66991,66993,66995,66997,67000],{"class":36,"line":2432},[34,66985,11874],{"class":87},[34,66987,66988],{"class":63}," fa",[34,66990,14217],{"class":87},[34,66992,55041],{"class":40},[34,66994,55044],{"class":149},[34,66996,801],{"class":40},[34,66998,66999],{"class":156},"'.father'",[34,67001,807],{"class":40},[34,67003,67004,67006,67009,67011,67013,67015,67017,67020],{"class":36,"line":2437},[34,67005,11874],{"class":87},[34,67007,67008],{"class":63}," son",[34,67010,14217],{"class":87},[34,67012,55041],{"class":40},[34,67014,55044],{"class":149},[34,67016,801],{"class":40},[34,67018,67019],{"class":156},"'.son'",[34,67021,807],{"class":40},[34,67023,67024,67026,67028,67030,67032,67034,67036],{"class":36,"line":3230},[34,67025,53053],{"class":40},[34,67027,58456],{"class":149},[34,67029,801],{"class":40},[34,67031,58461],{"class":156},[34,67033,13088],{"class":40},[34,67035,55094],{"class":87},[34,67037,55097],{"class":40},[34,67039,67040,67042,67044,67047],{"class":36,"line":3244},[34,67041,59568],{"class":149},[34,67043,801],{"class":40},[34,67045,67046],{"class":156},"'woshiu1'",[34,67048,807],{"class":40},[34,67050,67051,67053,67055],{"class":36,"line":3252},[34,67052,55180],{"class":40},[34,67054,2022],{"class":63},[34,67056,807],{"class":40},[34,67058,67059,67062,67064,67066,67068,67070,67072],{"class":36,"line":3257},[34,67060,67061],{"class":40},"    fa.",[34,67063,58456],{"class":149},[34,67065,801],{"class":40},[34,67067,58461],{"class":156},[34,67069,13088],{"class":40},[34,67071,55094],{"class":87},[34,67073,55097],{"class":40},[34,67075,67076,67078,67080,67083],{"class":36,"line":3263},[34,67077,59568],{"class":149},[34,67079,801],{"class":40},[34,67081,67082],{"class":156},"'1'",[34,67084,807],{"class":40},[34,67086,67087,67089,67091],{"class":36,"line":3269},[34,67088,55180],{"class":40},[34,67090,2022],{"class":63},[34,67092,807],{"class":40},[34,67094,67095,67098,67100,67102,67104,67106,67108],{"class":36,"line":3274},[34,67096,67097],{"class":40},"    son.",[34,67099,58456],{"class":149},[34,67101,801],{"class":40},[34,67103,58461],{"class":156},[34,67105,13088],{"class":40},[34,67107,55094],{"class":87},[34,67109,55097],{"class":40},[34,67111,67112,67114,67116,67119],{"class":36,"line":8601},[34,67113,59568],{"class":149},[34,67115,801],{"class":40},[34,67117,67118],{"class":156},"'2'",[34,67120,807],{"class":40},[34,67122,67123,67125,67127],{"class":36,"line":8625},[34,67124,55180],{"class":40},[34,67126,2022],{"class":63},[34,67128,807],{"class":40},[34,67130,67131,67133,67135],{"class":36,"line":8630},[34,67132,53063],{"class":40},[34,67134,52459],{"class":44},[34,67136,48],{"class":40},[34,67138,67139,67141,67143],{"class":36,"line":8636},[34,67140,102],{"class":40},[34,67142,52446],{"class":44},[34,67144,48],{"class":40},[34,67146,67147],{"class":36,"line":8663},[34,67148,3053],{"emptyLinePlaceholder":726},[34,67150,67151,67153,67155],{"class":36,"line":8668},[34,67152,102],{"class":40},[34,67154,51286],{"class":44},[34,67156,48],{"class":40},[108,67158,67159],{},[2122,67160],{"alt":29,"src":67161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[108,67163,67164],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22650,67166,67168],{"id":67167},"_3312-事件冒泡","3.3.1.2 事件冒泡",[108,67170,67171],{},[2122,67172],{"alt":29,"src":67173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[108,67175,67176],{},"反着来",[108,67178,67179],{},"注意是同名事件，比如都是‘click’",[22650,67181,67183],{"id":67182},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[108,67185,67186],{},[2122,67187],{"alt":29,"src":67188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22650,67190,67192],{"id":67191},"_3314-解绑事件","3.3.1.4 解绑事件",[108,67194,67195],{},[2122,67196],{"alt":29,"src":67197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[108,67199,67200],{},[2122,67201],{"alt":29,"src":67202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22650,67204,67206],{"id":67205},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[752,67208,67209],{},[755,67210,67211],{},"事件类型的区别",[108,67213,67214],{},[2122,67215],{"alt":29,"src":67216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[108,67218,67219],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[752,67221,67222],{"start":51},[755,67223,67224],{},"注册事件的区别",[108,67226,67227],{},[2122,67228],{"alt":29,"src":67229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22650,67231,67233],{"id":67232},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[108,67235,67236],{},[2122,67237],{"alt":29,"src":67238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[108,67240,67241],{},[2122,67242],{"alt":29,"src":67243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[24,67245,67247],{"className":53713,"code":67246,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[31,67248,67249,67257,67274,67297,67305,67310,67315,67320,67324,67332,67340],{"__ignoreMap":29},[34,67250,67251,67253,67255],{"class":36,"line":37},[34,67252,41],{"class":40},[34,67254,52446],{"class":44},[34,67256,48],{"class":40},[34,67258,67259,67261,67264,67267,67269,67272],{"class":36,"line":51},[34,67260,52790],{"class":40},[34,67262,67263],{"class":44},"form",[34,67265,67266],{"class":149}," action",[34,67268,153],{"class":40},[34,67270,67271],{"class":156},"\"http:\u002F\u002Fwww.itcast.cn\"",[34,67273,48],{"class":40},[34,67275,67276,67278,67280,67282,67284,67287,67290,67292,67295],{"class":36,"line":60},[34,67277,51990],{"class":40},[34,67279,669],{"class":44},[34,67281,54469],{"class":149},[34,67283,153],{"class":40},[34,67285,67286],{"class":156},"\"submit\"",[34,67288,67289],{"class":149}," value",[34,67291,153],{"class":40},[34,67293,67294],{"class":156},"\"免费注册\"",[34,67296,48],{"class":40},[34,67298,67299,67301,67303],{"class":36,"line":76},[34,67300,51990],{"class":40},[34,67302,52459],{"class":44},[34,67304,48],{"class":40},[34,67306,67307],{"class":36,"line":93},[34,67308,67309],{"class":40},"      const form = document.querySelector('form')\n",[34,67311,67312],{"class":36,"line":99},[34,67313,67314],{"class":40},"      form.addEventListener('submit', function (e) {\n",[34,67316,67317],{"class":36,"line":353},[34,67318,67319],{"class":40},"        e.preventDefault()\n",[34,67321,67322],{"class":36,"line":359},[34,67323,65453],{"class":40},[34,67325,67326,67328,67330],{"class":36,"line":579},[34,67327,52423],{"class":40},[34,67329,52459],{"class":44},[34,67331,48],{"class":40},[34,67333,67334,67336,67338],{"class":36,"line":589},[34,67335,53063],{"class":40},[34,67337,67263],{"class":44},[34,67339,48],{"class":40},[34,67341,67342,67344,67346],{"class":36,"line":601},[34,67343,102],{"class":40},[34,67345,52446],{"class":44},[34,67347,48],{"class":40},[108,67349,67350],{},"点击不在跳转！！！",[19,67352,67354],{"id":67353},"_332-事件委托","3.3.2 事件委托",[108,67356,67357],{},[2122,67358],{"alt":29,"src":67359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[24,67361,67363],{"className":51284,"code":67362,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,67364,67365,67375,67389,67393,67401,67415,67435,67447,67455,67459,67467,67475,67487,67499,67511,67523,67535,67548,67556,67564,67569,67588,67609,67614,67619,67624,67629,67638,67642,67652,67656,67661,67666,67680,67690,67694,67698,67706,67714,67718],{"__ignoreMap":29},[34,67366,67367,67369,67371,67373],{"class":36,"line":37},[34,67368,51948],{"class":40},[34,67370,51951],{"class":44},[34,67372,51954],{"class":149},[34,67374,48],{"class":40},[34,67376,67377,67379,67381,67383,67385,67387],{"class":36,"line":51},[34,67378,41],{"class":40},[34,67380,51286],{"class":44},[34,67382,51965],{"class":149},[34,67384,153],{"class":40},[34,67386,51970],{"class":156},[34,67388,48],{"class":40},[34,67390,67391],{"class":36,"line":60},[34,67392,3053],{"emptyLinePlaceholder":726},[34,67394,67395,67397,67399],{"class":36,"line":76},[34,67396,41],{"class":40},[34,67398,51983],{"class":44},[34,67400,48],{"class":40},[34,67402,67403,67405,67407,67409,67411,67413],{"class":36,"line":93},[34,67404,52790],{"class":40},[34,67406,51993],{"class":44},[34,67408,51996],{"class":149},[34,67410,153],{"class":40},[34,67412,52001],{"class":156},[34,67414,48],{"class":40},[34,67416,67417,67419,67421,67423,67425,67427,67429,67431,67433],{"class":36,"line":99},[34,67418,52790],{"class":40},[34,67420,51993],{"class":44},[34,67422,15573],{"class":149},[34,67424,153],{"class":40},[34,67426,52040],{"class":156},[34,67428,52020],{"class":149},[34,67430,153],{"class":40},[34,67432,52047],{"class":156},[34,67434,48],{"class":40},[34,67436,67437,67439,67441,67443,67445],{"class":36,"line":353},[34,67438,52790],{"class":40},[34,67440,52056],{"class":44},[34,67442,52059],{"class":40},[34,67444,52056],{"class":44},[34,67446,48],{"class":40},[34,67448,67449,67451,67453],{"class":36,"line":359},[34,67450,102],{"class":40},[34,67452,51983],{"class":44},[34,67454,48],{"class":40},[34,67456,67457],{"class":36,"line":579},[34,67458,3053],{"emptyLinePlaceholder":726},[34,67460,67461,67463,67465],{"class":36,"line":589},[34,67462,41],{"class":40},[34,67464,52446],{"class":44},[34,67466,48],{"class":40},[34,67468,67469,67471,67473],{"class":36,"line":601},[34,67470,52790],{"class":40},[34,67472,1800],{"class":44},[34,67474,48],{"class":40},[34,67476,67477,67479,67481,67483,67485],{"class":36,"line":613},[34,67478,51990],{"class":40},[34,67480,755],{"class":44},[34,67482,54611],{"class":40},[34,67484,755],{"class":44},[34,67486,48],{"class":40},[34,67488,67489,67491,67493,67495,67497],{"class":36,"line":618},[34,67490,51990],{"class":40},[34,67492,755],{"class":44},[34,67494,54630],{"class":40},[34,67496,755],{"class":44},[34,67498,48],{"class":40},[34,67500,67501,67503,67505,67507,67509],{"class":36,"line":628},[34,67502,51990],{"class":40},[34,67504,755],{"class":44},[34,67506,54649],{"class":40},[34,67508,755],{"class":44},[34,67510,48],{"class":40},[34,67512,67513,67515,67517,67519,67521],{"class":36,"line":640},[34,67514,51990],{"class":40},[34,67516,755],{"class":44},[34,67518,54668],{"class":40},[34,67520,755],{"class":44},[34,67522,48],{"class":40},[34,67524,67525,67527,67529,67531,67533],{"class":36,"line":2301},[34,67526,51990],{"class":40},[34,67528,755],{"class":44},[34,67530,54687],{"class":40},[34,67532,755],{"class":44},[34,67534,48],{"class":40},[34,67536,67537,67539,67541,67544,67546],{"class":36,"line":2307},[34,67538,51990],{"class":40},[34,67540,108],{"class":44},[34,67542,67543],{"class":40},">我不需要变色\u003C\u002F",[34,67545,108],{"class":44},[34,67547,48],{"class":40},[34,67549,67550,67552,67554],{"class":36,"line":2328},[34,67551,53063],{"class":40},[34,67553,1800],{"class":44},[34,67555,48],{"class":40},[34,67557,67558,67560,67562],{"class":36,"line":2333},[34,67559,52790],{"class":40},[34,67561,52459],{"class":44},[34,67563,48],{"class":40},[34,67565,67566],{"class":36,"line":2347},[34,67567,67568],{"class":205},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[34,67570,67571,67573,67575,67577,67579,67581,67583,67586],{"class":36,"line":2352},[34,67572,11874],{"class":87},[34,67574,61933],{"class":63},[34,67576,14217],{"class":87},[34,67578,55041],{"class":40},[34,67580,55044],{"class":149},[34,67582,801],{"class":40},[34,67584,67585],{"class":156},"'ul'",[34,67587,807],{"class":40},[34,67589,67590,67593,67595,67597,67599,67601,67603,67605,67607],{"class":36,"line":2381},[34,67591,67592],{"class":40},"    ul.",[34,67594,58456],{"class":149},[34,67596,801],{"class":40},[34,67598,58461],{"class":156},[34,67600,13088],{"class":40},[34,67602,55094],{"class":87},[34,67604,2312],{"class":40},[34,67606,872],{"class":5869},[34,67608,13095],{"class":40},[34,67610,67611],{"class":36,"line":2386},[34,67612,67613],{"class":205},"      \u002F\u002F alert(1)\n",[34,67615,67616],{"class":36,"line":2403},[34,67617,67618],{"class":205},"      \u002F\u002F e.target就是我们点击的对象\n",[34,67620,67621],{"class":36,"line":2408},[34,67622,67623],{"class":205},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[34,67625,67626],{"class":36,"line":2413},[34,67627,67628],{"class":205},"      \u002F\u002F e.target.style.color = 'red'\n",[34,67630,67631,67633,67635],{"class":36,"line":2418},[34,67632,58887],{"class":40},[34,67634,58890],{"class":149},[34,67636,67637],{"class":40},"(e)\n",[34,67639,67640],{"class":36,"line":2432},[34,67641,3053],{"emptyLinePlaceholder":726},[34,67643,67644,67646,67649],{"class":36,"line":2437},[34,67645,58887],{"class":40},[34,67647,67648],{"class":149},"dir",[34,67650,67651],{"class":40},"(e.target)\n",[34,67653,67654],{"class":36,"line":3230},[34,67655,3053],{"emptyLinePlaceholder":726},[34,67657,67658],{"class":36,"line":3244},[34,67659,67660],{"class":205},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[34,67662,67663],{"class":36,"line":3252},[34,67664,67665],{"class":205},"      \u002F\u002F 通过tagName来进行判断\n",[34,67667,67668,67670,67673,67675,67678],{"class":36,"line":3257},[34,67669,55125],{"class":87},[34,67671,67672],{"class":40}," (e.target.tagName ",[34,67674,55131],{"class":87},[34,67676,67677],{"class":156}," 'LI'",[34,67679,13095],{"class":40},[34,67681,67682,67685,67687],{"class":36,"line":3263},[34,67683,67684],{"class":40},"        e.target.style.color ",[34,67686,153],{"class":87},[34,67688,67689],{"class":156}," 'red'\n",[34,67691,67692],{"class":36,"line":3269},[34,67693,53044],{"class":40},[34,67695,67696],{"class":36,"line":3274},[34,67697,34112],{"class":40},[34,67699,67700,67702,67704],{"class":36,"line":8601},[34,67701,53063],{"class":40},[34,67703,52459],{"class":44},[34,67705,48],{"class":40},[34,67707,67708,67710,67712],{"class":36,"line":8625},[34,67709,102],{"class":40},[34,67711,52446],{"class":44},[34,67713,48],{"class":40},[34,67715,67716],{"class":36,"line":8630},[34,67717,3053],{"emptyLinePlaceholder":726},[34,67719,67720,67722,67724],{"class":36,"line":8636},[34,67721,102],{"class":40},[34,67723,51286],{"class":44},[34,67725,48],{"class":40},[108,67727,67728],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[108,67730,67731],{},"if(e.target.ragName==='P') {}",[108,67733,67734],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[108,67736,67737],{},"通过事件委托的方式实现tab栏切换改造：",[108,67739,67740],{},"一定要记住自定义属性！！！！！！",[108,67742,67743],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[108,67745,67746],{},"id是自定义的属性名",[108,67748,67749],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[24,67751,67753],{"className":51284,"code":67752,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,67754,67755,67765,67779,67783,67791,67805,67825,67845,67857,67865,67871,67881,67891,67895,67899,67905,67917,67929,67941,67957,67961,67965,67971,67983,67995,68007,68017,68027,68031,68035,68043,68055,68065,68077,68081,68085,68093,68103,68113,68123,68127,68131,68141,68155,68167,68171,68175,68187,68197,68213,68223,68227,68231,68245,68255,68265,68269,68273,68279,68293,68297,68301,68309,68319,68323,68327,68336,68346,68350,68358,68366,68370,68378,68392,68406,68418,68426,68465,68497,68529,68561,68593,68601,68609,68623,68657,68691,68725,68759,68793,68801,68809,68817,68822,68827,68846,68851,68871,68879,68884,68897,68918,68931,68935,68940,68945,68958,68978,69006,69010,69014,69018,69026,69034,69038],{"__ignoreMap":29},[34,67756,67757,67759,67761,67763],{"class":36,"line":37},[34,67758,51948],{"class":40},[34,67760,51951],{"class":44},[34,67762,51954],{"class":149},[34,67764,48],{"class":40},[34,67766,67767,67769,67771,67773,67775,67777],{"class":36,"line":51},[34,67768,41],{"class":40},[34,67770,51286],{"class":44},[34,67772,51965],{"class":149},[34,67774,153],{"class":40},[34,67776,51970],{"class":156},[34,67778,48],{"class":40},[34,67780,67781],{"class":36,"line":60},[34,67782,3053],{"emptyLinePlaceholder":726},[34,67784,67785,67787,67789],{"class":36,"line":76},[34,67786,41],{"class":40},[34,67788,51983],{"class":44},[34,67790,48],{"class":40},[34,67792,67793,67795,67797,67799,67801,67803],{"class":36,"line":93},[34,67794,52790],{"class":40},[34,67796,51993],{"class":44},[34,67798,51996],{"class":149},[34,67800,153],{"class":40},[34,67802,52001],{"class":156},[34,67804,59770],{"class":40},[34,67806,67807,67809,67811,67813,67815,67817,67819,67821,67823],{"class":36,"line":99},[34,67808,52790],{"class":40},[34,67810,51993],{"class":44},[34,67812,52012],{"class":149},[34,67814,153],{"class":40},[34,67816,52017],{"class":156},[34,67818,52020],{"class":149},[34,67820,153],{"class":40},[34,67822,52025],{"class":156},[34,67824,59770],{"class":40},[34,67826,67827,67829,67831,67833,67835,67837,67839,67841,67843],{"class":36,"line":353},[34,67828,52790],{"class":40},[34,67830,51993],{"class":44},[34,67832,15573],{"class":149},[34,67834,153],{"class":40},[34,67836,52040],{"class":156},[34,67838,52020],{"class":149},[34,67840,153],{"class":40},[34,67842,52047],{"class":156},[34,67844,59770],{"class":40},[34,67846,67847,67849,67851,67853,67855],{"class":36,"line":359},[34,67848,52790],{"class":40},[34,67850,52056],{"class":44},[34,67852,64263],{"class":40},[34,67854,52056],{"class":44},[34,67856,48],{"class":40},[34,67858,67859,67861,67863],{"class":36,"line":579},[34,67860,52790],{"class":40},[34,67862,45],{"class":44},[34,67864,48],{"class":40},[34,67866,67867,67869],{"class":36,"line":589},[34,67868,7056],{"class":44},[34,67870,57],{"class":40},[34,67872,67873,67875,67877,67879],{"class":36,"line":601},[34,67874,55351],{"class":63},[34,67876,67],{"class":40},[34,67878,987],{"class":63},[34,67880,73],{"class":40},[34,67882,67883,67885,67887,67889],{"class":36,"line":613},[34,67884,55340],{"class":63},[34,67886,67],{"class":40},[34,67888,987],{"class":63},[34,67890,73],{"class":40},[34,67892,67893],{"class":36,"line":618},[34,67894,2840],{"class":40},[34,67896,67897],{"class":36,"line":628},[34,67898,3053],{"emptyLinePlaceholder":726},[34,67900,67901,67903],{"class":36,"line":640},[34,67902,64314],{"class":149},[34,67904,57],{"class":40},[34,67906,67907,67909,67911,67913,67915],{"class":36,"line":2301},[34,67908,55415],{"class":63},[34,67910,67],{"class":40},[34,67912,64325],{"class":63},[34,67914,88],{"class":87},[34,67916,73],{"class":40},[34,67918,67919,67921,67923,67925,67927],{"class":36,"line":2307},[34,67920,55429],{"class":63},[34,67922,67],{"class":40},[34,67924,64338],{"class":63},[34,67926,88],{"class":87},[34,67928,73],{"class":40},[34,67930,67931,67933,67935,67937,67939],{"class":36,"line":2328},[34,67932,55351],{"class":63},[34,67934,67],{"class":40},[34,67936,1495],{"class":63},[34,67938,88],{"class":87},[34,67940,73],{"class":40},[34,67942,67943,67945,67947,67949,67951,67953,67955],{"class":36,"line":2333},[34,67944,62617],{"class":63},[34,67946,67],{"class":40},[34,67948,1013],{"class":63},[34,67950,88],{"class":87},[34,67952,52168],{"class":63},[34,67954,62884],{"class":63},[34,67956,73],{"class":40},[34,67958,67959],{"class":36,"line":2347},[34,67960,2840],{"class":40},[34,67962,67963],{"class":36,"line":2352},[34,67964,3053],{"emptyLinePlaceholder":726},[34,67966,67967,67969],{"class":36,"line":2381},[34,67968,64383],{"class":149},[34,67970,57],{"class":40},[34,67972,67973,67975,67977,67979,67981],{"class":36,"line":2386},[34,67974,55415],{"class":63},[34,67976,67],{"class":40},[34,67978,1106],{"class":63},[34,67980,1123],{"class":87},[34,67982,73],{"class":40},[34,67984,67985,67987,67989,67991,67993],{"class":36,"line":2403},[34,67986,55429],{"class":63},[34,67988,67],{"class":40},[34,67990,1701],{"class":63},[34,67992,88],{"class":87},[34,67994,73],{"class":40},[34,67996,67997,67999,68001,68003,68005],{"class":36,"line":2408},[34,67998,58002],{"class":63},[34,68000,67],{"class":40},[34,68002,1701],{"class":63},[34,68004,88],{"class":87},[34,68006,73],{"class":40},[34,68008,68009,68011,68013,68015],{"class":36,"line":2413},[34,68010,55652],{"class":63},[34,68012,67],{"class":40},[34,68014,52125],{"class":63},[34,68016,73],{"class":40},[34,68018,68019,68021,68023,68025],{"class":36,"line":2418},[34,68020,55663],{"class":63},[34,68022,67],{"class":40},[34,68024,52315],{"class":63},[34,68026,73],{"class":40},[34,68028,68029],{"class":36,"line":2432},[34,68030,2840],{"class":40},[34,68032,68033],{"class":36,"line":2437},[34,68034,3053],{"emptyLinePlaceholder":726},[34,68036,68037,68039,68041],{"class":36,"line":3230},[34,68038,64383],{"class":149},[34,68040,64456],{"class":44},[34,68042,57],{"class":40},[34,68044,68045,68047,68049,68051,68053],{"class":36,"line":3244},[34,68046,55565],{"class":63},[34,68048,67],{"class":40},[34,68050,84],{"class":63},[34,68052,88],{"class":87},[34,68054,73],{"class":40},[34,68056,68057,68059,68061,68063],{"class":36,"line":3252},[34,68058,62974],{"class":63},[34,68060,67],{"class":40},[34,68062,64479],{"class":63},[34,68064,73],{"class":40},[34,68066,68067,68069,68071,68073,68075],{"class":36,"line":3257},[34,68068,62640],{"class":63},[34,68070,67],{"class":40},[34,68072,1495],{"class":63},[34,68074,88],{"class":87},[34,68076,73],{"class":40},[34,68078,68079],{"class":36,"line":3263},[34,68080,2840],{"class":40},[34,68082,68083],{"class":36,"line":3269},[34,68084,3053],{"emptyLinePlaceholder":726},[34,68086,68087,68089,68091],{"class":36,"line":3274},[34,68088,64383],{"class":149},[34,68090,61933],{"class":44},[34,68092,57],{"class":40},[34,68094,68095,68097,68099,68101],{"class":36,"line":8601},[34,68096,55377],{"class":63},[34,68098,67],{"class":40},[34,68100,546],{"class":63},[34,68102,73],{"class":40},[34,68104,68105,68107,68109,68111],{"class":36,"line":8625},[34,68106,55652],{"class":63},[34,68108,67],{"class":40},[34,68110,52125],{"class":63},[34,68112,73],{"class":40},[34,68114,68115,68117,68119,68121],{"class":36,"line":8630},[34,68116,55663],{"class":63},[34,68118,67],{"class":40},[34,68120,52227],{"class":63},[34,68122,73],{"class":40},[34,68124,68125],{"class":36,"line":8636},[34,68126,2840],{"class":40},[34,68128,68129],{"class":36,"line":8663},[34,68130,3053],{"emptyLinePlaceholder":726},[34,68132,68133,68135,68137,68139],{"class":36,"line":8668},[34,68134,64383],{"class":149},[34,68136,61933],{"class":44},[34,68138,55718],{"class":44},[34,68140,57],{"class":40},[34,68142,68143,68145,68147,68149,68151,68153],{"class":36,"line":8674},[34,68144,55351],{"class":63},[34,68146,67],{"class":40},[34,68148,987],{"class":63},[34,68150,9603],{"class":63},[34,68152,88],{"class":87},[34,68154,73],{"class":40},[34,68156,68157,68159,68161,68163,68165],{"class":36,"line":8686},[34,68158,55565],{"class":63},[34,68160,67],{"class":40},[34,68162,1344],{"class":63},[34,68164,88],{"class":87},[34,68166,73],{"class":40},[34,68168,68169],{"class":36,"line":8698},[34,68170,2840],{"class":40},[34,68172,68173],{"class":36,"line":8710},[34,68174,3053],{"emptyLinePlaceholder":726},[34,68176,68177,68179,68181,68183,68185],{"class":36,"line":10369},[34,68178,64383],{"class":149},[34,68180,61933],{"class":44},[34,68182,55718],{"class":44},[34,68184,2058],{"class":44},[34,68186,57],{"class":40},[34,68188,68189,68191,68193,68195],{"class":36,"line":10394},[34,68190,64608],{"class":63},[34,68192,67],{"class":40},[34,68194,546],{"class":63},[34,68196,73],{"class":40},[34,68198,68199,68201,68203,68205,68207,68209,68211],{"class":36,"line":10417},[34,68200,62872],{"class":63},[34,68202,67],{"class":40},[34,68204,875],{"class":63},[34,68206,88],{"class":87},[34,68208,52168],{"class":63},[34,68210,64629],{"class":63},[34,68212,73],{"class":40},[34,68214,68215,68217,68219,68221],{"class":36,"line":10441},[34,68216,58059],{"class":63},[34,68218,67],{"class":40},[34,68220,534],{"class":63},[34,68222,73],{"class":40},[34,68224,68225],{"class":36,"line":10446},[34,68226,2840],{"class":40},[34,68228,68229],{"class":36,"line":10451},[34,68230,3053],{"emptyLinePlaceholder":726},[34,68232,68233,68235,68237,68239,68241,68243],{"class":36,"line":10456},[34,68234,64383],{"class":149},[34,68236,61933],{"class":44},[34,68238,55718],{"class":44},[34,68240,2058],{"class":44},[34,68242,64662],{"class":149},[34,68244,57],{"class":40},[34,68246,68247,68249,68251,68253],{"class":36,"line":10465},[34,68248,62432],{"class":63},[34,68250,67],{"class":40},[34,68252,64673],{"class":63},[34,68254,73],{"class":40},[34,68256,68257,68259,68261,68263],{"class":36,"line":10470},[34,68258,58059],{"class":63},[34,68260,67],{"class":40},[34,68262,64673],{"class":63},[34,68264,73],{"class":40},[34,68266,68267],{"class":36,"line":10476},[34,68268,2840],{"class":40},[34,68270,68271],{"class":36,"line":10497},[34,68272,3053],{"emptyLinePlaceholder":726},[34,68274,68275,68277],{"class":36,"line":10503},[34,68276,64698],{"class":149},[34,68278,57],{"class":40},[34,68280,68281,68283,68285,68287,68289,68291],{"class":36,"line":10517},[34,68282,55340],{"class":63},[34,68284,67],{"class":40},[34,68286,987],{"class":63},[34,68288,64711],{"class":63},[34,68290,88],{"class":87},[34,68292,73],{"class":40},[34,68294,68295],{"class":36,"line":10523},[34,68296,2840],{"class":40},[34,68298,68299],{"class":36,"line":10550},[34,68300,3053],{"emptyLinePlaceholder":726},[34,68302,68303,68305,68307],{"class":36,"line":10559},[34,68304,64698],{"class":149},[34,68306,62814],{"class":149},[34,68308,57],{"class":40},[34,68310,68311,68313,68315,68317],{"class":36,"line":10565},[34,68312,55652],{"class":63},[34,68314,67],{"class":40},[34,68316,546],{"class":63},[34,68318,73],{"class":40},[34,68320,68321],{"class":36,"line":10573},[34,68322,2840],{"class":40},[34,68324,68325],{"class":36,"line":10578},[34,68326,3053],{"emptyLinePlaceholder":726},[34,68328,68329,68331,68334],{"class":36,"line":17256},[34,68330,64698],{"class":149},[34,68332,68333],{"class":149}," .active",[34,68335,57],{"class":40},[34,68337,68338,68340,68342,68344],{"class":36,"line":17262},[34,68339,55652],{"class":63},[34,68341,67],{"class":40},[34,68343,61512],{"class":63},[34,68345,73],{"class":40},[34,68347,68348],{"class":36,"line":17285},[34,68349,2840],{"class":40},[34,68351,68352,68354,68356],{"class":36,"line":17291},[34,68353,53063],{"class":40},[34,68355,45],{"class":44},[34,68357,48],{"class":40},[34,68359,68360,68362,68364],{"class":36,"line":17314},[34,68361,102],{"class":40},[34,68363,51983],{"class":44},[34,68365,48],{"class":40},[34,68367,68368],{"class":36,"line":17328},[34,68369,3053],{"emptyLinePlaceholder":726},[34,68371,68372,68374,68376],{"class":36,"line":17348},[34,68373,41],{"class":40},[34,68375,52446],{"class":44},[34,68377,48],{"class":40},[34,68379,68380,68382,68384,68386,68388,68390],{"class":36,"line":17354},[34,68381,52790],{"class":40},[34,68383,52258],{"class":44},[34,68385,54132],{"class":149},[34,68387,153],{"class":40},[34,68389,64813],{"class":156},[34,68391,48],{"class":40},[34,68393,68394,68396,68398,68400,68402,68404],{"class":36,"line":17365},[34,68395,51990],{"class":40},[34,68397,52258],{"class":44},[34,68399,54132],{"class":149},[34,68401,153],{"class":40},[34,68403,64828],{"class":156},[34,68405,48],{"class":40},[34,68407,68408,68410,68412,68414,68416],{"class":36,"line":17388},[34,68409,55877],{"class":40},[34,68411,19],{"class":44},[34,68413,64839],{"class":40},[34,68415,19],{"class":44},[34,68417,48],{"class":40},[34,68419,68420,68422,68424],{"class":36,"line":17410},[34,68421,55877],{"class":40},[34,68423,1800],{"class":44},[34,68425,48],{"class":40},[34,68427,68428,68430,68432,68434,68436,68438,68440,68442,68444,68446,68448,68450,68452,68455,68457,68459,68461,68463],{"class":36,"line":17415},[34,68429,55945],{"class":40},[34,68431,755],{"class":44},[34,68433,61694],{"class":40},[34,68435,520],{"class":44},[34,68437,54132],{"class":149},[34,68439,153],{"class":40},[34,68441,60349],{"class":156},[34,68443,267],{"class":149},[34,68445,153],{"class":40},[34,68447,64874],{"class":156},[34,68449,54596],{"class":149},[34,68451,153],{"class":40},[34,68453,68454],{"class":156},"\"0\"",[34,68456,64877],{"class":40},[34,68458,520],{"class":44},[34,68460,55957],{"class":40},[34,68462,755],{"class":44},[34,68464,48],{"class":40},[34,68466,68467,68469,68471,68473,68475,68477,68479,68481,68483,68485,68487,68489,68491,68493,68495],{"class":36,"line":17421},[34,68468,55945],{"class":40},[34,68470,755],{"class":44},[34,68472,61694],{"class":40},[34,68474,520],{"class":44},[34,68476,267],{"class":149},[34,68478,153],{"class":40},[34,68480,64874],{"class":156},[34,68482,54596],{"class":149},[34,68484,153],{"class":40},[34,68486,4331],{"class":156},[34,68488,64904],{"class":40},[34,68490,520],{"class":44},[34,68492,55957],{"class":40},[34,68494,755],{"class":44},[34,68496,48],{"class":40},[34,68498,68499,68501,68503,68505,68507,68509,68511,68513,68515,68517,68519,68521,68523,68525,68527],{"class":36,"line":17435},[34,68500,55945],{"class":40},[34,68502,755],{"class":44},[34,68504,61694],{"class":40},[34,68506,520],{"class":44},[34,68508,267],{"class":149},[34,68510,153],{"class":40},[34,68512,64874],{"class":156},[34,68514,54596],{"class":149},[34,68516,153],{"class":40},[34,68518,4354],{"class":156},[34,68520,64931],{"class":40},[34,68522,520],{"class":44},[34,68524,55957],{"class":40},[34,68526,755],{"class":44},[34,68528,48],{"class":40},[34,68530,68531,68533,68535,68537,68539,68541,68543,68545,68547,68549,68551,68553,68555,68557,68559],{"class":36,"line":17448},[34,68532,55945],{"class":40},[34,68534,755],{"class":44},[34,68536,61694],{"class":40},[34,68538,520],{"class":44},[34,68540,267],{"class":149},[34,68542,153],{"class":40},[34,68544,64874],{"class":156},[34,68546,54596],{"class":149},[34,68548,153],{"class":40},[34,68550,4367],{"class":156},[34,68552,64958],{"class":40},[34,68554,520],{"class":44},[34,68556,55957],{"class":40},[34,68558,755],{"class":44},[34,68560,48],{"class":40},[34,68562,68563,68565,68567,68569,68571,68573,68575,68577,68579,68581,68583,68585,68587,68589,68591],{"class":36,"line":17453},[34,68564,55945],{"class":40},[34,68566,755],{"class":44},[34,68568,61694],{"class":40},[34,68570,520],{"class":44},[34,68572,267],{"class":149},[34,68574,153],{"class":40},[34,68576,64874],{"class":156},[34,68578,54596],{"class":149},[34,68580,153],{"class":40},[34,68582,4380],{"class":156},[34,68584,64985],{"class":40},[34,68586,520],{"class":44},[34,68588,55957],{"class":40},[34,68590,755],{"class":44},[34,68592,48],{"class":40},[34,68594,68595,68597,68599],{"class":36,"line":17467},[34,68596,56050],{"class":40},[34,68598,1800],{"class":44},[34,68600,48],{"class":40},[34,68602,68603,68605,68607],{"class":36,"line":17472},[34,68604,52423],{"class":40},[34,68606,52258],{"class":44},[34,68608,48],{"class":40},[34,68610,68611,68613,68615,68617,68619,68621],{"class":36,"line":17478},[34,68612,51990],{"class":40},[34,68614,52258],{"class":44},[34,68616,54132],{"class":149},[34,68618,153],{"class":40},[34,68620,65022],{"class":156},[34,68622,48],{"class":40},[34,68624,68625,68627,68629,68631,68633,68635,68637,68639,68641,68643,68645,68647,68649,68651,68653,68655],{"class":36,"line":17483},[34,68626,55877],{"class":40},[34,68628,52258],{"class":44},[34,68630,54132],{"class":149},[34,68632,153],{"class":40},[34,68634,65037],{"class":156},[34,68636,61694],{"class":40},[34,68638,2122],{"class":44},[34,68640,55882],{"class":149},[34,68642,153],{"class":40},[34,68644,65048],{"class":156},[34,68646,55890],{"class":149},[34,68648,153],{"class":40},[34,68650,8305],{"class":156},[34,68652,65057],{"class":40},[34,68654,52258],{"class":44},[34,68656,48],{"class":40},[34,68658,68659,68661,68663,68665,68667,68669,68671,68673,68675,68677,68679,68681,68683,68685,68687,68689],{"class":36,"line":17497},[34,68660,55877],{"class":40},[34,68662,52258],{"class":44},[34,68664,54132],{"class":149},[34,68666,153],{"class":40},[34,68668,63262],{"class":156},[34,68670,61694],{"class":40},[34,68672,2122],{"class":44},[34,68674,55882],{"class":149},[34,68676,153],{"class":40},[34,68678,65084],{"class":156},[34,68680,55890],{"class":149},[34,68682,153],{"class":40},[34,68684,8305],{"class":156},[34,68686,65057],{"class":40},[34,68688,52258],{"class":44},[34,68690,48],{"class":40},[34,68692,68693,68695,68697,68699,68701,68703,68705,68707,68709,68711,68713,68715,68717,68719,68721,68723],{"class":36,"line":17502},[34,68694,55877],{"class":40},[34,68696,52258],{"class":44},[34,68698,54132],{"class":149},[34,68700,153],{"class":40},[34,68702,63262],{"class":156},[34,68704,61694],{"class":40},[34,68706,2122],{"class":44},[34,68708,55882],{"class":149},[34,68710,153],{"class":40},[34,68712,65119],{"class":156},[34,68714,55890],{"class":149},[34,68716,153],{"class":40},[34,68718,8305],{"class":156},[34,68720,65057],{"class":40},[34,68722,52258],{"class":44},[34,68724,48],{"class":40},[34,68726,68727,68729,68731,68733,68735,68737,68739,68741,68743,68745,68747,68749,68751,68753,68755,68757],{"class":36,"line":17507},[34,68728,55877],{"class":40},[34,68730,52258],{"class":44},[34,68732,54132],{"class":149},[34,68734,153],{"class":40},[34,68736,63262],{"class":156},[34,68738,61694],{"class":40},[34,68740,2122],{"class":44},[34,68742,55882],{"class":149},[34,68744,153],{"class":40},[34,68746,65154],{"class":156},[34,68748,55890],{"class":149},[34,68750,153],{"class":40},[34,68752,8305],{"class":156},[34,68754,65057],{"class":40},[34,68756,52258],{"class":44},[34,68758,48],{"class":40},[34,68760,68761,68763,68765,68767,68769,68771,68773,68775,68777,68779,68781,68783,68785,68787,68789,68791],{"class":36,"line":17521},[34,68762,55877],{"class":40},[34,68764,52258],{"class":44},[34,68766,54132],{"class":149},[34,68768,153],{"class":40},[34,68770,63262],{"class":156},[34,68772,61694],{"class":40},[34,68774,2122],{"class":44},[34,68776,55882],{"class":149},[34,68778,153],{"class":40},[34,68780,65189],{"class":156},[34,68782,55890],{"class":149},[34,68784,153],{"class":40},[34,68786,8305],{"class":156},[34,68788,65057],{"class":40},[34,68790,52258],{"class":44},[34,68792,48],{"class":40},[34,68794,68795,68797,68799],{"class":36,"line":17533},[34,68796,52423],{"class":40},[34,68798,52258],{"class":44},[34,68800,48],{"class":40},[34,68802,68803,68805,68807],{"class":36,"line":17538},[34,68804,53063],{"class":40},[34,68806,52258],{"class":44},[34,68808,48],{"class":40},[34,68810,68811,68813,68815],{"class":36,"line":17551},[34,68812,52790],{"class":40},[34,68814,52459],{"class":44},[34,68816,48],{"class":40},[34,68818,68819],{"class":36,"line":17556},[34,68820,68821],{"class":205},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[34,68823,68824],{"class":36,"line":17561},[34,68825,68826],{"class":205},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[34,68828,68829,68831,68833,68835,68837,68839,68841,68844],{"class":36,"line":17566},[34,68830,11874],{"class":87},[34,68832,61933],{"class":63},[34,68834,14217],{"class":87},[34,68836,55041],{"class":40},[34,68838,55044],{"class":149},[34,68840,801],{"class":40},[34,68842,68843],{"class":156},"'.tab-nav ul'",[34,68845,807],{"class":40},[34,68847,68848],{"class":36,"line":17579},[34,68849,68850],{"class":205},"    \u002F\u002F 2.添加事件\n",[34,68852,68853,68855,68857,68859,68861,68863,68865,68867,68869],{"class":36,"line":17584},[34,68854,67592],{"class":40},[34,68856,58456],{"class":149},[34,68858,801],{"class":40},[34,68860,58461],{"class":156},[34,68862,13088],{"class":40},[34,68864,55094],{"class":87},[34,68866,2312],{"class":40},[34,68868,872],{"class":5869},[34,68870,13095],{"class":40},[34,68872,68873,68875,68877],{"class":36,"line":33284},[34,68874,58887],{"class":40},[34,68876,67648],{"class":149},[34,68878,67651],{"class":40},[34,68880,68881],{"class":36,"line":33290},[34,68882,68883],{"class":205},"      \u002F\u002Fe.targer是我们点击的对象\n",[34,68885,68886,68888,68890,68892,68895],{"class":36,"line":33296},[34,68887,55125],{"class":87},[34,68889,67672],{"class":40},[34,68891,55131],{"class":87},[34,68893,68894],{"class":156}," 'A'",[34,68896,13095],{"class":40},[34,68898,68899,68901,68903,68905,68908,68910,68912,68914,68916],{"class":36,"line":33302},[34,68900,52571],{"class":40},[34,68902,55044],{"class":149},[34,68904,801],{"class":40},[34,68906,68907],{"class":156},"'.active'",[34,68909,57646],{"class":40},[34,68911,57649],{"class":149},[34,68913,801],{"class":40},[34,68915,65352],{"class":156},[34,68917,807],{"class":40},[34,68919,68920,68923,68925,68927,68929],{"class":36,"line":33308},[34,68921,68922],{"class":40},"        e.target.classList.",[34,68924,5987],{"class":149},[34,68926,801],{"class":40},[34,68928,65352],{"class":156},[34,68930,807],{"class":40},[34,68932,68933],{"class":36,"line":33319},[34,68934,3053],{"emptyLinePlaceholder":726},[34,68936,68937],{"class":36,"line":33325},[34,68938,68939],{"class":205},"        \u002F\u002F 下面大盒子模块\n",[34,68941,68942],{"class":36,"line":33345},[34,68943,68944],{"class":205},"        \u002F\u002F console.log(e.target.dataset.id)\n",[34,68946,68947,68949,68951,68953,68955],{"class":36,"line":33351},[34,68948,61911],{"class":87},[34,68950,3685],{"class":63},[34,68952,14217],{"class":87},[34,68954,46217],{"class":87},[34,68956,68957],{"class":40},"e.target.dataset.id\n",[34,68959,68960,68962,68964,68966,68968,68970,68972,68974,68976],{"class":36,"line":33362},[34,68961,52571],{"class":40},[34,68963,55044],{"class":149},[34,68965,801],{"class":40},[34,68967,65400],{"class":156},[34,68969,57646],{"class":40},[34,68971,57649],{"class":149},[34,68973,801],{"class":40},[34,68975,65352],{"class":156},[34,68977,807],{"class":40},[34,68979,68980,68982,68984,68986,68988,68990,68992,68994,68996,68998,69000,69002,69004],{"class":36,"line":33368},[34,68981,52571],{"class":40},[34,68983,55044],{"class":149},[34,68985,801],{"class":40},[34,68987,65426],{"class":156},[34,68989,1236],{"class":40},[34,68991,46217],{"class":87},[34,68993,25771],{"class":63},[34,68995,57675],{"class":156},[34,68997,57646],{"class":40},[34,68999,5987],{"class":149},[34,69001,801],{"class":40},[34,69003,65352],{"class":156},[34,69005,807],{"class":40},[34,69007,69008],{"class":36,"line":33374},[34,69009,3053],{"emptyLinePlaceholder":726},[34,69011,69012],{"class":36,"line":33380},[34,69013,53044],{"class":40},[34,69015,69016],{"class":36,"line":33386},[34,69017,34112],{"class":40},[34,69019,69020,69022,69024],{"class":36,"line":33392},[34,69021,53063],{"class":40},[34,69023,52459],{"class":44},[34,69025,48],{"class":40},[34,69027,69028,69030,69032],{"class":36,"line":33398},[34,69029,102],{"class":40},[34,69031,52446],{"class":44},[34,69033,48],{"class":40},[34,69035,69036],{"class":36,"line":33404},[34,69037,3053],{"emptyLinePlaceholder":726},[34,69039,69040,69042,69044],{"class":36,"line":33424},[34,69041,102],{"class":40},[34,69043,51286],{"class":44},[34,69045,48],{"class":40},[19,69047,69049],{"id":69048},"_333-页面加载事件","3.3.3 页面加载事件",[752,69051,69052],{},[755,69053,69054],{},"load",[108,69056,69057],{},[2122,69058],{"alt":29,"src":69059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[108,69061,69062],{},"window代表整个窗口，比document还要大",[108,69064,69065],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[108,69067,69068],{},"img.addEventListener('load', function () {",[108,69070,69071],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[108,69073,53110],{},[752,69075,69076],{"start":51},[755,69077,69078],{},"DOMContentLoaded",[108,69080,69081],{},[2122,69082],{"alt":29,"src":69083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[108,69085,69086],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[19,69088,69090],{"id":69089},"_334-元素滚动事件","3.3.4 元素滚动事件",[108,69092,69093],{},[2122,69094],{"alt":29,"src":69095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[108,69097,69098],{},[2122,69099],{"alt":29,"src":69100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[108,69102,69103],{},[2122,69104],{"alt":29,"src":69105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[108,69107,69108],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[108,69110,69111],{},"获得的是数字型数据，不带单位",[108,69113,69114],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[108,69116,69117],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[108,69119,69120],{},"它是通过document.documentElement来获取",[108,69122,69123],{},[2122,69124],{"alt":29,"src":69125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[108,69127,69128],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[19,69130,69132],{"id":69131},"_335-页面缩放事件","3.3.5 页面缩放事件",[108,69134,69135],{},[2122,69136],{"alt":29,"src":69137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[108,69139,69140],{},[2122,69141],{"alt":29,"src":69142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[19,69144,69146],{"id":69145},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[108,69148,69149],{},[2122,69150],{"alt":29,"src":69151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[108,69153,69154],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[108,69156,69157],{},[2122,69158],{"alt":29,"src":69159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[108,69161,69162],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[108,69164,69165],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[108,69167,69168],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[108,69170,69171],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[108,69173,69174],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[108,69176,69177],{},[2122,69178],{"alt":29,"src":69179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[108,69181,69182],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[108,69184,69185],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[108,69187,69188],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[108,69190,69191],{},"e.pageX-box.getBoundingClientRect()",[19,69193,69195],{"id":69194},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[108,69197,69198],{},[2122,69199],{"alt":29,"src":69200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[108,69202,69203],{},"这个是相对于视口来说的，它是个方法，不是属性值",[19,69205,69207],{"id":69206},"_338-总结","3.3.8 总结",[108,69209,69210],{},[2122,69211],{"alt":29,"src":69212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[108,69214,69215],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[108,69217,69218],{},"修改盒子的宽高只能通过width和height来实现",[19,69220,69222],{"id":69221},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[24,69224,69226],{"className":51284,"code":69225,"language":51286,"meta":29,"style":29},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[31,69227,69228,69233,69238,69243,69248],{"__ignoreMap":29},[34,69229,69230],{"class":36,"line":37},[34,69231,69232],{"class":40},"\u002F* 页面滑动 *\u002F\n",[34,69234,69235],{"class":36,"line":51},[34,69236,69237],{"class":40},"html {\n",[34,69239,69240],{"class":36,"line":60},[34,69241,69242],{"class":40},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[34,69244,69245],{"class":36,"line":76},[34,69246,69247],{"class":40},"  scroll-behavior: smooth;\n",[34,69249,69250],{"class":36,"line":93},[34,69251,241],{"class":40},[108,69253,69254],{},"默认是auto",[19,69256,69258],{"id":69257},"_3310-日期对象","3.3.10 日期对象",[22650,69260,69262],{"id":69261},"_33101-实例化","3.3.10.1 实例化",[108,69264,69265],{},[2122,69266],{"alt":29,"src":69267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22650,69269,69271],{"id":69270},"_33102-时期对象方法","3.3.10.2 时期对象方法",[108,69273,69274],{},[2122,69275],{"alt":29,"src":69276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[108,69278,69279],{},"月份+1",[108,69281,69282],{},"老外认为第一天为0，星期天",[108,69284,69285],{},"方法使用的时候必须要跟括号",[108,69287,69288],{},"快速获得日期",[108,69290,69291],{},"\u002F\u002F 得到年月日",[108,69293,69294],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[108,69296,69297],{},"\u002F\u002F 得到当地日期",[108,69299,69300],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[108,69302,69303],{},"\u002F\u002F 得到当地时间",[108,69305,69306],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[108,69308,69309],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[108,69311,69312],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52459,69314,69315],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[108,69317,69318],{},"学会去封装函数！",[22650,69320,69322],{"id":69321},"_33103-时间戳","3.3.10.3 时间戳",[108,69324,69325],{},[2122,69326],{"alt":29,"src":69327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[108,69329,69330],{},[2122,69331],{"alt":29,"src":69332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[108,69334,69335],{},"三种方法记住一个就可以",[19,69337,69339],{"id":69338},"_3311-节点操作","3.3.11 节点操作",[22650,69341,69343],{"id":69342},"_33111-dom节点","3.3.11.1 DOM节点",[108,69345,69346],{},[2122,69347],{"alt":29,"src":69348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[108,69350,69351],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22650,69353,69355],{"id":69354},"_33112-查找节点","3.3.11.2 查找节点",[108,69357,69358],{},"前边的document.querySelector()是获取的元素",[108,69360,69361],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[108,69363,69364],{},[2122,69365],{"alt":29,"src":69366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[752,69368,69369],{},[755,69370,69371],{},"父节点",[108,69373,69374],{},[2122,69375],{"alt":29,"src":69376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[752,69378,69379],{"start":51},[755,69380,69381],{},"子节点",[108,69383,69384],{},[2122,69385],{"alt":29,"src":69386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[108,69388,69389],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[108,69391,69392],{},"children获得的是伪数组，是亲儿子",[752,69394,69395],{"start":60},[755,69396,69397],{},"兄弟节点",[108,69399,69400],{},[2122,69401],{"alt":29,"src":69402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22650,69404,69406],{"id":69405},"_33113-增加节点","3.3.11.3 增加节点",[108,69408,69409],{},[2122,69410],{"alt":29,"src":69411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[108,69413,69414],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[108,69416,69417],{},[2122,69418],{"alt":29,"src":69419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[108,69421,69422],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[108,69424,69425],{},"下面是写法的部分展示，就按照下边的格式来写",[108,69427,69428],{},"例：",[52459,69430,69431],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[108,69433,69434],{},[2122,69435],{"alt":29,"src":69436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[108,69438,69439],{},"false只克隆标签，里边的内容不会克隆过来",[24,69441,69443],{"className":51284,"code":69442,"language":51286,"meta":29,"style":29},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[31,69444,69445],{"__ignoreMap":29},[34,69446,69447],{"class":36,"line":37},[34,69448,69442],{"class":40},[22650,69450,69452],{"id":69451},"_33114-删除节点","3.3.11.4 删除节点",[108,69454,69455],{},[2122,69456],{"alt":29,"src":69457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[108,69459,69460],{},"父亲删儿子",[108,69462,69463],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[19,69465,69467],{"id":69466},"_3312-m端事件","3.3.12 M端事件",[108,69469,69470],{},"M端就是移动端",[108,69472,69473],{},[2122,69474],{"alt":29,"src":69475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[19,69477,69479],{"id":69478},"_3313-插件","3.3.13 插件",[108,69481,69482],{},"要熟悉官网！！！",[108,69484,69485],{},[520,69486,69487],{"href":69487,"rel":69488},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24517],[108,69490,69491],{},[520,69492,69493],{"href":69493,"rel":69494},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24517],[19,69496,69498],{"id":69497},"_3314-学生信息表","3.3.14 学生信息表",[752,69500,69501,69504,69507,69510,69513,69516,69519,69522],{},[755,69502,69503],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[755,69505,69506],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[755,69508,69509],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[755,69511,69512],{},"用好表单元素自带的属性，value,name等",[755,69514,69515],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[755,69517,69518],{},"不要忘记事件对象",[755,69520,69521],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[755,69523,69524],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[108,69526,69527],{},"结构：",[24,69529,69531],{"className":51284,"code":69530,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,69532,69533,69543,69557,69561,69569,69583,69603,69624,69637,69658,69666,69670,69678,69691,69712,69740,69768,69773,69795,69815,69834,69842,69870,69892,69912,69932,69952,69972,69992,70000,70020,70028,70032,70045,70053,70061,70069,70082,70095,70108,70121,70134,70147,70160,70168,70176,70184,70189,70194,70199,70204,70209,70214,70219,70224,70229,70234,70239,70244,70249,70257,70265,70273,70277,70297,70316,70336,70356,70376,70396,70400,70405,70425,70430,70440,70445,70450,70470,70492,70497,70507,70511,70515,70520,70525,70554,70568,70583,70587,70591,70595,70600,70611,70624,70629,70634,70639,70644,70649,70653,70658,70663,70672,70677,70682,70694,70699,70706,70710,70715,70725,70730,70740,70745,70773,70794,70804,70824,70842,70859,70876,70893,70910,70914,70924,70929,70934,70939,70950,70954,70958,70962,70967,70972,70993,71005,71010,71015,71020,71034,71039,71046,71050,71054,71062,71066,71074,71078],{"__ignoreMap":29},[34,69534,69535,69537,69539,69541],{"class":36,"line":37},[34,69536,51948],{"class":40},[34,69538,51951],{"class":44},[34,69540,51954],{"class":149},[34,69542,48],{"class":40},[34,69544,69545,69547,69549,69551,69553,69555],{"class":36,"line":51},[34,69546,41],{"class":40},[34,69548,51286],{"class":44},[34,69550,51965],{"class":149},[34,69552,153],{"class":40},[34,69554,51970],{"class":156},[34,69556,48],{"class":40},[34,69558,69559],{"class":36,"line":60},[34,69560,3053],{"emptyLinePlaceholder":726},[34,69562,69563,69565,69567],{"class":36,"line":76},[34,69564,41],{"class":40},[34,69566,51983],{"class":44},[34,69568,48],{"class":40},[34,69570,69571,69573,69575,69577,69579,69581],{"class":36,"line":93},[34,69572,52790],{"class":40},[34,69574,51993],{"class":44},[34,69576,51996],{"class":149},[34,69578,153],{"class":40},[34,69580,52001],{"class":156},[34,69582,59770],{"class":40},[34,69584,69585,69587,69589,69591,69593,69595,69597,69599,69601],{"class":36,"line":99},[34,69586,52790],{"class":40},[34,69588,51993],{"class":44},[34,69590,15573],{"class":149},[34,69592,153],{"class":40},[34,69594,52040],{"class":156},[34,69596,52020],{"class":149},[34,69598,153],{"class":40},[34,69600,52047],{"class":156},[34,69602,59770],{"class":40},[34,69604,69605,69607,69609,69611,69613,69615,69617,69619,69622],{"class":36,"line":353},[34,69606,52790],{"class":40},[34,69608,51993],{"class":44},[34,69610,52012],{"class":149},[34,69612,153],{"class":40},[34,69614,52017],{"class":156},[34,69616,52020],{"class":149},[34,69618,153],{"class":40},[34,69620,69621],{"class":156},"\"ie=edge\"",[34,69623,59770],{"class":40},[34,69625,69626,69628,69630,69633,69635],{"class":36,"line":359},[34,69627,52790],{"class":40},[34,69629,52056],{"class":44},[34,69631,69632],{"class":40},">学生信息管理\u003C\u002F",[34,69634,52056],{"class":44},[34,69636,48],{"class":40},[34,69638,69639,69641,69643,69645,69647,69649,69651,69653,69656],{"class":36,"line":579},[34,69640,52790],{"class":40},[34,69642,256],{"class":44},[34,69644,259],{"class":149},[34,69646,153],{"class":40},[34,69648,264],{"class":156},[34,69650,267],{"class":149},[34,69652,153],{"class":40},[34,69654,69655],{"class":156},"\"css\u002Findex.css\"",[34,69657,59770],{"class":40},[34,69659,69660,69662,69664],{"class":36,"line":589},[34,69661,102],{"class":40},[34,69663,51983],{"class":44},[34,69665,48],{"class":40},[34,69667,69668],{"class":36,"line":601},[34,69669,3053],{"emptyLinePlaceholder":726},[34,69671,69672,69674,69676],{"class":36,"line":613},[34,69673,41],{"class":40},[34,69675,52446],{"class":44},[34,69677,48],{"class":40},[34,69679,69680,69682,69684,69687,69689],{"class":36,"line":618},[34,69681,52790],{"class":40},[34,69683,10],{"class":44},[34,69685,69686],{"class":40},">新增学员\u003C\u002F",[34,69688,10],{"class":44},[34,69690,48],{"class":40},[34,69692,69693,69695,69697,69699,69701,69703,69706,69708,69710],{"class":36,"line":628},[34,69694,52790],{"class":40},[34,69696,67263],{"class":44},[34,69698,54132],{"class":149},[34,69700,153],{"class":40},[34,69702,63302],{"class":156},[34,69704,69705],{"class":149}," autocomplete",[34,69707,153],{"class":40},[34,69709,32427],{"class":156},[34,69711,48],{"class":40},[34,69713,69714,69717,69719,69721,69723,69725,69727,69729,69732,69734,69736,69738],{"class":36,"line":640},[34,69715,69716],{"class":40},"    姓名：\u003C",[34,69718,669],{"class":44},[34,69720,54469],{"class":149},[34,69722,153],{"class":40},[34,69724,63337],{"class":156},[34,69726,54132],{"class":149},[34,69728,153],{"class":40},[34,69730,69731],{"class":156},"\"uname\"",[34,69733,15573],{"class":149},[34,69735,153],{"class":40},[34,69737,69731],{"class":156},[34,69739,59770],{"class":40},[34,69741,69742,69745,69747,69749,69751,69753,69755,69757,69760,69762,69764,69766],{"class":36,"line":2301},[34,69743,69744],{"class":40},"    年龄：\u003C",[34,69746,669],{"class":44},[34,69748,54469],{"class":149},[34,69750,153],{"class":40},[34,69752,63337],{"class":156},[34,69754,54132],{"class":149},[34,69756,153],{"class":40},[34,69758,69759],{"class":156},"\"age\"",[34,69761,15573],{"class":149},[34,69763,153],{"class":40},[34,69765,69759],{"class":156},[34,69767,59770],{"class":40},[34,69769,69770],{"class":36,"line":2307},[34,69771,69772],{"class":40},"    性别:\n",[34,69774,69775,69777,69780,69782,69784,69787,69789,69791,69793],{"class":36,"line":2328},[34,69776,51990],{"class":40},[34,69778,69779],{"class":44},"select",[34,69781,15573],{"class":149},[34,69783,153],{"class":40},[34,69785,69786],{"class":156},"\"gender\"",[34,69788,54132],{"class":149},[34,69790,153],{"class":40},[34,69792,69786],{"class":156},[34,69794,48],{"class":40},[34,69796,69797,69799,69802,69804,69806,69808,69811,69813],{"class":36,"line":2333},[34,69798,55877],{"class":40},[34,69800,69801],{"class":44},"option",[34,69803,67289],{"class":149},[34,69805,153],{"class":40},[34,69807,10614],{"class":156},[34,69809,69810],{"class":40},">男\u003C\u002F",[34,69812,69801],{"class":44},[34,69814,48],{"class":40},[34,69816,69817,69819,69821,69823,69825,69827,69830,69832],{"class":36,"line":2347},[34,69818,55877],{"class":40},[34,69820,69801],{"class":44},[34,69822,67289],{"class":149},[34,69824,153],{"class":40},[34,69826,10683],{"class":156},[34,69828,69829],{"class":40},">女\u003C\u002F",[34,69831,69801],{"class":44},[34,69833,48],{"class":40},[34,69835,69836,69838,69840],{"class":36,"line":2352},[34,69837,52423],{"class":40},[34,69839,69779],{"class":44},[34,69841,48],{"class":40},[34,69843,69844,69847,69849,69851,69853,69855,69857,69859,69862,69864,69866,69868],{"class":36,"line":2381},[34,69845,69846],{"class":40},"    薪资：\u003C",[34,69848,669],{"class":44},[34,69850,54469],{"class":149},[34,69852,153],{"class":40},[34,69854,63337],{"class":156},[34,69856,54132],{"class":149},[34,69858,153],{"class":40},[34,69860,69861],{"class":156},"\"salary\"",[34,69863,15573],{"class":149},[34,69865,153],{"class":40},[34,69867,69861],{"class":156},[34,69869,59770],{"class":40},[34,69871,69872,69875,69877,69879,69881,69884,69886,69888,69890],{"class":36,"line":2386},[34,69873,69874],{"class":40},"    就业城市：\u003C",[34,69876,69779],{"class":44},[34,69878,15573],{"class":149},[34,69880,153],{"class":40},[34,69882,69883],{"class":156},"\"city\"",[34,69885,54132],{"class":149},[34,69887,153],{"class":40},[34,69889,69883],{"class":156},[34,69891,48],{"class":40},[34,69893,69894,69896,69898,69900,69902,69905,69908,69910],{"class":36,"line":2403},[34,69895,55877],{"class":40},[34,69897,69801],{"class":44},[34,69899,67289],{"class":149},[34,69901,153],{"class":40},[34,69903,69904],{"class":156},"\"北京\"",[34,69906,69907],{"class":40},">北京\u003C\u002F",[34,69909,69801],{"class":44},[34,69911,48],{"class":40},[34,69913,69914,69916,69918,69920,69922,69925,69928,69930],{"class":36,"line":2408},[34,69915,55877],{"class":40},[34,69917,69801],{"class":44},[34,69919,67289],{"class":149},[34,69921,153],{"class":40},[34,69923,69924],{"class":156},"\"上海\"",[34,69926,69927],{"class":40},">上海\u003C\u002F",[34,69929,69801],{"class":44},[34,69931,48],{"class":40},[34,69933,69934,69936,69938,69940,69942,69945,69948,69950],{"class":36,"line":2413},[34,69935,55877],{"class":40},[34,69937,69801],{"class":44},[34,69939,67289],{"class":149},[34,69941,153],{"class":40},[34,69943,69944],{"class":156},"\"广州\"",[34,69946,69947],{"class":40},">广州\u003C\u002F",[34,69949,69801],{"class":44},[34,69951,48],{"class":40},[34,69953,69954,69956,69958,69960,69962,69965,69968,69970],{"class":36,"line":2418},[34,69955,55877],{"class":40},[34,69957,69801],{"class":44},[34,69959,67289],{"class":149},[34,69961,153],{"class":40},[34,69963,69964],{"class":156},"\"深圳\"",[34,69966,69967],{"class":40},">深圳\u003C\u002F",[34,69969,69801],{"class":44},[34,69971,48],{"class":40},[34,69973,69974,69976,69978,69980,69982,69985,69988,69990],{"class":36,"line":2432},[34,69975,55877],{"class":40},[34,69977,69801],{"class":44},[34,69979,67289],{"class":149},[34,69981,153],{"class":40},[34,69983,69984],{"class":156},"\"曹县\"",[34,69986,69987],{"class":40},">曹县\u003C\u002F",[34,69989,69801],{"class":44},[34,69991,48],{"class":40},[34,69993,69994,69996,69998],{"class":36,"line":2437},[34,69995,52423],{"class":40},[34,69997,69779],{"class":44},[34,69999,48],{"class":40},[34,70001,70002,70004,70006,70008,70010,70013,70016,70018],{"class":36,"line":3230},[34,70003,51990],{"class":40},[34,70005,54532],{"class":44},[34,70007,54132],{"class":149},[34,70009,153],{"class":40},[34,70011,70012],{"class":156},"\"add\"",[34,70014,70015],{"class":40},">录入\u003C\u002F",[34,70017,54532],{"class":44},[34,70019,48],{"class":40},[34,70021,70022,70024,70026],{"class":36,"line":3244},[34,70023,53063],{"class":40},[34,70025,67263],{"class":44},[34,70027,48],{"class":40},[34,70029,70030],{"class":36,"line":3252},[34,70031,3053],{"emptyLinePlaceholder":726},[34,70033,70034,70036,70038,70041,70043],{"class":36,"line":3257},[34,70035,52790],{"class":40},[34,70037,10],{"class":44},[34,70039,70040],{"class":40},">就业榜\u003C\u002F",[34,70042,10],{"class":44},[34,70044,48],{"class":40},[34,70046,70047,70049,70051],{"class":36,"line":3263},[34,70048,52790],{"class":40},[34,70050,934],{"class":44},[34,70052,48],{"class":40},[34,70054,70055,70057,70059],{"class":36,"line":3269},[34,70056,51990],{"class":40},[34,70058,937],{"class":44},[34,70060,48],{"class":40},[34,70062,70063,70065,70067],{"class":36,"line":3274},[34,70064,55877],{"class":40},[34,70066,940],{"class":44},[34,70068,48],{"class":40},[34,70070,70071,70073,70075,70078,70080],{"class":36,"line":8601},[34,70072,55945],{"class":40},[34,70074,943],{"class":44},[34,70076,70077],{"class":40},">序号\u003C\u002F",[34,70079,943],{"class":44},[34,70081,48],{"class":40},[34,70083,70084,70086,70088,70091,70093],{"class":36,"line":8625},[34,70085,55945],{"class":40},[34,70087,943],{"class":44},[34,70089,70090],{"class":40},">姓名\u003C\u002F",[34,70092,943],{"class":44},[34,70094,48],{"class":40},[34,70096,70097,70099,70101,70104,70106],{"class":36,"line":8630},[34,70098,55945],{"class":40},[34,70100,943],{"class":44},[34,70102,70103],{"class":40},">年龄\u003C\u002F",[34,70105,943],{"class":44},[34,70107,48],{"class":40},[34,70109,70110,70112,70114,70117,70119],{"class":36,"line":8636},[34,70111,55945],{"class":40},[34,70113,943],{"class":44},[34,70115,70116],{"class":40},">性别\u003C\u002F",[34,70118,943],{"class":44},[34,70120,48],{"class":40},[34,70122,70123,70125,70127,70130,70132],{"class":36,"line":8663},[34,70124,55945],{"class":40},[34,70126,943],{"class":44},[34,70128,70129],{"class":40},">薪资\u003C\u002F",[34,70131,943],{"class":44},[34,70133,48],{"class":40},[34,70135,70136,70138,70140,70143,70145],{"class":36,"line":8668},[34,70137,55945],{"class":40},[34,70139,943],{"class":44},[34,70141,70142],{"class":40},">就业城市\u003C\u002F",[34,70144,943],{"class":44},[34,70146,48],{"class":40},[34,70148,70149,70151,70153,70156,70158],{"class":36,"line":8674},[34,70150,55945],{"class":40},[34,70152,943],{"class":44},[34,70154,70155],{"class":40},">操作\u003C\u002F",[34,70157,943],{"class":44},[34,70159,48],{"class":40},[34,70161,70162,70164,70166],{"class":36,"line":8686},[34,70163,56050],{"class":40},[34,70165,940],{"class":44},[34,70167,48],{"class":40},[34,70169,70170,70172,70174],{"class":36,"line":8698},[34,70171,52423],{"class":40},[34,70173,937],{"class":44},[34,70175,48],{"class":40},[34,70177,70178,70180,70182],{"class":36,"line":8710},[34,70179,51990],{"class":40},[34,70181,980],{"class":44},[34,70183,48],{"class":40},[34,70185,70186],{"class":36,"line":10369},[34,70187,70188],{"class":205},"      \u003C!-- \n",[34,70190,70191],{"class":36,"line":10394},[34,70192,70193],{"class":205},"        \u003Ctr>\n",[34,70195,70196],{"class":36,"line":10417},[34,70197,70198],{"class":205},"          \u003Ctd>1001\u003C\u002Ftd>\n",[34,70200,70201],{"class":36,"line":10441},[34,70202,70203],{"class":205},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[34,70205,70206],{"class":36,"line":10446},[34,70207,70208],{"class":205},"          \u003Ctd>19\u003C\u002Ftd>\n",[34,70210,70211],{"class":36,"line":10451},[34,70212,70213],{"class":205},"          \u003Ctd>男\u003C\u002Ftd>\n",[34,70215,70216],{"class":36,"line":10456},[34,70217,70218],{"class":205},"          \u003Ctd>15000\u003C\u002Ftd>\n",[34,70220,70221],{"class":36,"line":10465},[34,70222,70223],{"class":205},"          \u003Ctd>上海\u003C\u002Ftd>\n",[34,70225,70226],{"class":36,"line":10470},[34,70227,70228],{"class":205},"          \u003Ctd>\n",[34,70230,70231],{"class":36,"line":10476},[34,70232,70233],{"class":205},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[34,70235,70236],{"class":36,"line":10497},[34,70237,70238],{"class":205},"          \u003C\u002Ftd>\n",[34,70240,70241],{"class":36,"line":10503},[34,70242,70243],{"class":205},"        \u003C\u002Ftr> \n",[34,70245,70246],{"class":36,"line":10517},[34,70247,70248],{"class":205},"        -->\n",[34,70250,70251,70253,70255],{"class":36,"line":10523},[34,70252,52423],{"class":40},[34,70254,980],{"class":44},[34,70256,48],{"class":40},[34,70258,70259,70261,70263],{"class":36,"line":10550},[34,70260,53063],{"class":40},[34,70262,934],{"class":44},[34,70264,48],{"class":40},[34,70266,70267,70269,70271],{"class":36,"line":10559},[34,70268,52790],{"class":40},[34,70270,52459],{"class":44},[34,70272,48],{"class":40},[34,70274,70275],{"class":36,"line":10565},[34,70276,60601],{"class":205},[34,70278,70279,70281,70284,70286,70288,70290,70292,70295],{"class":36,"line":10573},[34,70280,11874],{"class":87},[34,70282,70283],{"class":63}," uname",[34,70285,14217],{"class":87},[34,70287,55041],{"class":40},[34,70289,55044],{"class":149},[34,70291,801],{"class":40},[34,70293,70294],{"class":156},"'.uname'",[34,70296,807],{"class":40},[34,70298,70299,70301,70303,70305,70307,70309,70311,70314],{"class":36,"line":10578},[34,70300,11874],{"class":87},[34,70302,16341],{"class":63},[34,70304,14217],{"class":87},[34,70306,55041],{"class":40},[34,70308,55044],{"class":149},[34,70310,801],{"class":40},[34,70312,70313],{"class":156},"'.age'",[34,70315,807],{"class":40},[34,70317,70318,70320,70323,70325,70327,70329,70331,70334],{"class":36,"line":17256},[34,70319,11874],{"class":87},[34,70321,70322],{"class":63}," gender",[34,70324,14217],{"class":87},[34,70326,55041],{"class":40},[34,70328,55044],{"class":149},[34,70330,801],{"class":40},[34,70332,70333],{"class":156},"'.gender'",[34,70335,807],{"class":40},[34,70337,70338,70340,70343,70345,70347,70349,70351,70354],{"class":36,"line":17262},[34,70339,11874],{"class":87},[34,70341,70342],{"class":63}," salary",[34,70344,14217],{"class":87},[34,70346,55041],{"class":40},[34,70348,55044],{"class":149},[34,70350,801],{"class":40},[34,70352,70353],{"class":156},"'.salary'",[34,70355,807],{"class":40},[34,70357,70358,70360,70363,70365,70367,70369,70371,70374],{"class":36,"line":17285},[34,70359,11874],{"class":87},[34,70361,70362],{"class":63}," city",[34,70364,14217],{"class":87},[34,70366,55041],{"class":40},[34,70368,55044],{"class":149},[34,70370,801],{"class":40},[34,70372,70373],{"class":156},"'.city'",[34,70375,807],{"class":40},[34,70377,70378,70380,70383,70385,70387,70389,70391,70394],{"class":36,"line":17291},[34,70379,11874],{"class":87},[34,70381,70382],{"class":63}," tbody",[34,70384,14217],{"class":87},[34,70386,55041],{"class":40},[34,70388,55044],{"class":149},[34,70390,801],{"class":40},[34,70392,70393],{"class":156},"'tbody'",[34,70395,807],{"class":40},[34,70397,70398],{"class":36,"line":17314},[34,70399,3053],{"emptyLinePlaceholder":726},[34,70401,70402],{"class":36,"line":17328},[34,70403,70404],{"class":205},"    \u002F\u002F 获取所有带有name属性的元素\n",[34,70406,70407,70409,70412,70414,70416,70418,70420,70423],{"class":36,"line":17348},[34,70408,11874],{"class":87},[34,70410,70411],{"class":63}," items",[34,70413,14217],{"class":87},[34,70415,55041],{"class":40},[34,70417,56324],{"class":149},[34,70419,801],{"class":40},[34,70421,70422],{"class":156},"'[name]'",[34,70424,807],{"class":40},[34,70426,70427],{"class":36,"line":17354},[34,70428,70429],{"class":205},"    \u002F\u002F 声明一个空的数组\n",[34,70431,70432,70434,70436,70438],{"class":36,"line":17365},[34,70433,11874],{"class":87},[34,70435,58338],{"class":63},[34,70437,14217],{"class":87},[34,70439,52484],{"class":40},[34,70441,70442],{"class":36,"line":17388},[34,70443,70444],{"class":205},"    \u002F\u002F 1.录入模块\n",[34,70446,70447],{"class":36,"line":17410},[34,70448,70449],{"class":205},"    \u002F\u002F 1.1这是一个表单提交事件\n",[34,70451,70452,70454,70457,70459,70461,70463,70465,70468],{"class":36,"line":17415},[34,70453,11874],{"class":87},[34,70455,70456],{"class":63}," info",[34,70458,14217],{"class":87},[34,70460,55041],{"class":40},[34,70462,55044],{"class":149},[34,70464,801],{"class":40},[34,70466,70467],{"class":156},"'.info'",[34,70469,807],{"class":40},[34,70471,70472,70475,70477,70479,70482,70484,70486,70488,70490],{"class":36,"line":17421},[34,70473,70474],{"class":40},"    info.",[34,70476,58456],{"class":149},[34,70478,801],{"class":40},[34,70480,70481],{"class":156},"'submit'",[34,70483,13088],{"class":40},[34,70485,55094],{"class":87},[34,70487,2312],{"class":40},[34,70489,872],{"class":5869},[34,70491,13095],{"class":40},[34,70493,70494],{"class":36,"line":17435},[34,70495,70496],{"class":205},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[34,70498,70499,70502,70505],{"class":36,"line":17448},[34,70500,70501],{"class":40},"      e.",[34,70503,70504],{"class":149},"preventDefault",[34,70506,2629],{"class":40},[34,70508,70509],{"class":36,"line":17453},[34,70510,60655],{"class":205},[34,70512,70513],{"class":36,"line":17467},[34,70514,3053],{"emptyLinePlaceholder":726},[34,70516,70517],{"class":36,"line":17472},[34,70518,70519],{"class":205},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[34,70521,70522],{"class":36,"line":17478},[34,70523,70524],{"class":205},"      \u002F\u002F 先遍历循环\n",[34,70526,70527,70529,70531,70533,70535,70537,70539,70541,70543,70546,70548,70550,70552],{"class":36,"line":17483},[34,70528,52930],{"class":87},[34,70530,2312],{"class":40},[34,70532,52493],{"class":87},[34,70534,10091],{"class":40},[34,70536,153],{"class":87},[34,70538,4746],{"class":63},[34,70540,10098],{"class":40},[34,70542,41],{"class":87},[34,70544,70545],{"class":40}," items.",[34,70547,52614],{"class":63},[34,70549,3867],{"class":40},[34,70551,2945],{"class":87},[34,70553,13095],{"class":40},[34,70555,70556,70558,70561,70563,70566],{"class":36,"line":17497},[34,70557,3150],{"class":87},[34,70559,70560],{"class":40}," (items[i].value ",[34,70562,55131],{"class":87},[34,70564,70565],{"class":156}," ''",[34,70567,13095],{"class":40},[34,70569,70570,70573,70576,70578,70581],{"class":36,"line":17502},[34,70571,70572],{"class":87},"          return",[34,70574,70575],{"class":149}," alert",[34,70577,801],{"class":40},[34,70579,70580],{"class":156},"'输入内容不能为空'",[34,70582,807],{"class":40},[34,70584,70585],{"class":36,"line":17507},[34,70586,3182],{"class":40},[34,70588,70589],{"class":36,"line":17521},[34,70590,53044],{"class":40},[34,70592,70593],{"class":36,"line":17533},[34,70594,3053],{"emptyLinePlaceholder":726},[34,70596,70597],{"class":36,"line":17538},[34,70598,70599],{"class":205},"      \u002F\u002F 创建新的对象\n",[34,70601,70602,70604,70607,70609],{"class":36,"line":17551},[34,70603,58871],{"class":87},[34,70605,70606],{"class":63}," obj",[34,70608,14217],{"class":87},[34,70610,57],{"class":40},[34,70612,70613,70616,70618,70620,70622],{"class":36,"line":17556},[34,70614,70615],{"class":40},"        stuID: arr.",[34,70617,52614],{"class":63},[34,70619,46217],{"class":87},[34,70621,25771],{"class":63},[34,70623,32117],{"class":40},[34,70625,70626],{"class":36,"line":17561},[34,70627,70628],{"class":40},"        uname: uname.value,\n",[34,70630,70631],{"class":36,"line":17566},[34,70632,70633],{"class":40},"        age: age.value,\n",[34,70635,70636],{"class":36,"line":17579},[34,70637,70638],{"class":40},"        gender: gender.value,\n",[34,70640,70641],{"class":36,"line":17584},[34,70642,70643],{"class":40},"        salary: salary.value,\n",[34,70645,70646],{"class":36,"line":33284},[34,70647,70648],{"class":40},"        city: city.value\n",[34,70650,70651],{"class":36,"line":33290},[34,70652,53044],{"class":40},[34,70654,70655],{"class":36,"line":33296},[34,70656,70657],{"class":205},"      \u002F\u002F console.log(obj);\n",[34,70659,70660],{"class":36,"line":33302},[34,70661,70662],{"class":205},"      \u002F\u002F 追加到数组里面\n",[34,70664,70665,70667,70669],{"class":36,"line":33308},[34,70666,58650],{"class":40},[34,70668,52530],{"class":149},[34,70670,70671],{"class":40},"(obj)\n",[34,70673,70674],{"class":36,"line":33319},[34,70675,70676],{"class":205},"      \u002F\u002F console.log(arr);\n",[34,70678,70679],{"class":36,"line":33325},[34,70680,70681],{"class":205},"      \u002F\u002F 清空表单  reset重置表单\n",[34,70683,70684,70687,70689,70692],{"class":36,"line":33345},[34,70685,70686],{"class":63},"      this",[34,70688,1353],{"class":40},[34,70690,70691],{"class":149},"reset",[34,70693,2629],{"class":40},[34,70695,70696],{"class":36,"line":33351},[34,70697,70698],{"class":205},"      \u002F\u002F 调用渲染函数\n",[34,70700,70701,70704],{"class":36,"line":33362},[34,70702,70703],{"class":149},"      render",[34,70705,2629],{"class":40},[34,70707,70708],{"class":36,"line":33368},[34,70709,34112],{"class":40},[34,70711,70712],{"class":36,"line":33374},[34,70713,70714],{"class":205},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[34,70716,70717,70720,70723],{"class":36,"line":33380},[34,70718,70719],{"class":87},"    function",[34,70721,70722],{"class":149}," render",[34,70724,11506],{"class":40},[34,70726,70727],{"class":36,"line":33386},[34,70728,70729],{"class":205},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[34,70731,70732,70735,70737],{"class":36,"line":33392},[34,70733,70734],{"class":40},"      tbody.innerHTML ",[34,70736,153],{"class":87},[34,70738,70739],{"class":156}," ''\n",[34,70741,70742],{"class":36,"line":33398},[34,70743,70744],{"class":205},"      \u002F\u002F 遍历数组\n",[34,70746,70747,70749,70751,70753,70755,70757,70759,70761,70763,70765,70767,70769,70771],{"class":36,"line":33404},[34,70748,52930],{"class":87},[34,70750,2312],{"class":40},[34,70752,52493],{"class":87},[34,70754,10091],{"class":40},[34,70756,153],{"class":87},[34,70758,4746],{"class":63},[34,70760,10098],{"class":40},[34,70762,41],{"class":87},[34,70764,52611],{"class":40},[34,70766,52614],{"class":63},[34,70768,3867],{"class":40},[34,70770,2945],{"class":87},[34,70772,13095],{"class":40},[34,70774,70775,70777,70780,70782,70784,70787,70789,70792],{"class":36,"line":33424},[34,70776,61911],{"class":87},[34,70778,70779],{"class":63}," tr",[34,70781,14217],{"class":87},[34,70783,55041],{"class":40},[34,70785,70786],{"class":149},"createElement",[34,70788,801],{"class":40},[34,70790,70791],{"class":156},"'tr'",[34,70793,807],{"class":40},[34,70795,70796,70799,70801],{"class":36,"line":33430},[34,70797,70798],{"class":40},"        tr.innerHTML ",[34,70800,153],{"class":87},[34,70802,70803],{"class":156}," `\n",[34,70805,70806,70809,70811,70813,70815,70818,70821],{"class":36,"line":33446},[34,70807,70808],{"class":156},"        \u003Ctd>${",[34,70810,4533],{"class":40},[34,70812,1684],{"class":156},[34,70814,1236],{"class":40},[34,70816,70817],{"class":156},"].",[34,70819,70820],{"class":40},"stuID",[34,70822,70823],{"class":156},"}\u003C\u002Ftd>\n",[34,70825,70826,70829,70831,70833,70835,70837,70840],{"class":36,"line":33452},[34,70827,70828],{"class":156},"          \u003Ctd>${",[34,70830,4533],{"class":40},[34,70832,1684],{"class":156},[34,70834,1236],{"class":40},[34,70836,70817],{"class":156},[34,70838,70839],{"class":40},"uname",[34,70841,70823],{"class":156},[34,70843,70844,70846,70848,70850,70852,70854,70857],{"class":36,"line":33466},[34,70845,70828],{"class":156},[34,70847,4533],{"class":40},[34,70849,1684],{"class":156},[34,70851,1236],{"class":40},[34,70853,70817],{"class":156},[34,70855,70856],{"class":40},"age",[34,70858,70823],{"class":156},[34,70860,70861,70863,70865,70867,70869,70871,70874],{"class":36,"line":33472},[34,70862,70828],{"class":156},[34,70864,4533],{"class":40},[34,70866,1684],{"class":156},[34,70868,1236],{"class":40},[34,70870,70817],{"class":156},[34,70872,70873],{"class":40},"gender",[34,70875,70823],{"class":156},[34,70877,70878,70880,70882,70884,70886,70888,70891],{"class":36,"line":33487},[34,70879,70828],{"class":156},[34,70881,4533],{"class":40},[34,70883,1684],{"class":156},[34,70885,1236],{"class":40},[34,70887,70817],{"class":156},[34,70889,70890],{"class":40},"salary",[34,70892,70823],{"class":156},[34,70894,70895,70897,70899,70901,70903,70905,70908],{"class":36,"line":33493},[34,70896,70828],{"class":156},[34,70898,4533],{"class":40},[34,70900,1684],{"class":156},[34,70902,1236],{"class":40},[34,70904,70817],{"class":156},[34,70906,70907],{"class":40},"city",[34,70909,70823],{"class":156},[34,70911,70912],{"class":36,"line":33502},[34,70913,70228],{"class":156},[34,70915,70916,70919,70921],{"class":36,"line":33508},[34,70917,70918],{"class":156},"            \u003Ca href=\"javascript:\" data-id=${",[34,70920,1236],{"class":40},[34,70922,70923],{"class":156},"}>删除\u003C\u002Fa>\n",[34,70925,70926],{"class":36,"line":33517},[34,70927,70928],{"class":156},"          \u003C\u002Ftd> \n",[34,70930,70931],{"class":36,"line":33523},[34,70932,70933],{"class":156},"          `\n",[34,70935,70936],{"class":36,"line":33529},[34,70937,70938],{"class":205},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[34,70940,70941,70944,70947],{"class":36,"line":33538},[34,70942,70943],{"class":40},"        tbody.",[34,70945,70946],{"class":149},"appendChild",[34,70948,70949],{"class":40},"(tr)\n",[34,70951,70952],{"class":36,"line":33544},[34,70953,53044],{"class":40},[34,70955,70956],{"class":36,"line":33555},[34,70957,2840],{"class":40},[34,70959,70960],{"class":36,"line":33561},[34,70961,3053],{"emptyLinePlaceholder":726},[34,70963,70964],{"class":36,"line":33580},[34,70965,70966],{"class":205},"    \u002F\u002F 3.删除委托\n",[34,70968,70969],{"class":36,"line":33586},[34,70970,70971],{"class":205},"    \u002F\u002F 3.1 事件委托 tbody\n",[34,70973,70974,70977,70979,70981,70983,70985,70987,70989,70991],{"class":36,"line":33597},[34,70975,70976],{"class":40},"    tbody.",[34,70978,58456],{"class":149},[34,70980,801],{"class":40},[34,70982,58461],{"class":156},[34,70984,13088],{"class":40},[34,70986,55094],{"class":87},[34,70988,2312],{"class":40},[34,70990,872],{"class":5869},[34,70992,13095],{"class":40},[34,70994,70995,70997,70999,71001,71003],{"class":36,"line":33603},[34,70996,55125],{"class":87},[34,70998,67672],{"class":40},[34,71000,55131],{"class":87},[34,71002,68894],{"class":156},[34,71004,13095],{"class":40},[34,71006,71007],{"class":36,"line":33623},[34,71008,71009],{"class":205},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[34,71011,71012],{"class":36,"line":33639},[34,71013,71014],{"class":205},"        \u002F\u002F console.log(e.target.dataset.id);\n",[34,71016,71017],{"class":36,"line":33645},[34,71018,71019],{"class":205},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[34,71021,71022,71025,71027,71030,71032],{"class":36,"line":33659},[34,71023,71024],{"class":40},"        arr.",[34,71026,58653],{"class":149},[34,71028,71029],{"class":40},"(e.target.dataset.id, ",[34,71031,1013],{"class":63},[34,71033,807],{"class":40},[34,71035,71036],{"class":36,"line":33665},[34,71037,71038],{"class":205},"        \u002F\u002F 重新渲染一次\n",[34,71040,71041,71044],{"class":36,"line":33671},[34,71042,71043],{"class":149},"        render",[34,71045,2629],{"class":40},[34,71047,71048],{"class":36,"line":33682},[34,71049,53044],{"class":40},[34,71051,71052],{"class":36,"line":33688},[34,71053,34112],{"class":40},[34,71055,71056,71058,71060],{"class":36,"line":33694},[34,71057,53063],{"class":40},[34,71059,52459],{"class":44},[34,71061,48],{"class":40},[34,71063,71064],{"class":36,"line":33704},[34,71065,3053],{"emptyLinePlaceholder":726},[34,71067,71068,71070,71072],{"class":36,"line":33710},[34,71069,102],{"class":40},[34,71071,52446],{"class":44},[34,71073,48],{"class":40},[34,71075,71076],{"class":36,"line":33721},[34,71077,3053],{"emptyLinePlaceholder":726},[34,71079,71080,71082,71084],{"class":36,"line":33727},[34,71081,102],{"class":40},[34,71083,51286],{"class":44},[34,71085,48],{"class":40},[108,71087,71088],{},"样式：",[24,71090,71094],{"className":71091,"code":71092,"language":71093,"meta":29,"style":29},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[31,71095,71096,71101,71111,71120,71124,71128,71133,71142,71147,71151,71156,71166,71171,71180,71184,71188,71193,71198,71208,71218,71223,71227,71232,71241,71251,71256,71265,71275,71279,71284,71292,71296,71301,71306,71311,71319,71328,71332,71337,71346,71350,71355,71364,71368,71373,71382,71391,71399,71403,71408,71417,71427,71435,71445,71451,71460,71470,71480,71484,71489,71498,71506,71516,71524,71533,71541,71551,71559,71563,71568,71577],{"__ignoreMap":29},[34,71097,71098],{"class":36,"line":37},[34,71099,71100],{"class":40},"* {\n",[34,71102,71103,71106,71108],{"class":36,"line":51},[34,71104,71105],{"class":44},"  margin",[34,71107,67],{"class":40},[34,71109,71110],{"class":156},"0;\n",[34,71112,71113,71116,71118],{"class":36,"line":60},[34,71114,71115],{"class":156},"  padding",[34,71117,67],{"class":40},[34,71119,71110],{"class":156},[34,71121,71122],{"class":36,"line":76},[34,71123,241],{"class":40},[34,71125,71126],{"class":36,"line":93},[34,71127,3053],{"emptyLinePlaceholder":726},[34,71129,71130],{"class":36,"line":99},[34,71131,71132],{"class":156},"a {\n",[34,71134,71135,71137,71139],{"class":36,"line":353},[34,71136,541],{"class":44},[34,71138,67],{"class":40},[34,71140,71141],{"class":156},"none;\n",[34,71143,71144],{"class":36,"line":359},[34,71145,71146],{"class":156},"  color:#721c24;\n",[34,71148,71149],{"class":36,"line":579},[34,71150,241],{"class":40},[34,71152,71153],{"class":36,"line":589},[34,71154,71155],{"class":156},"h1 {\n",[34,71157,71158,71161,71163],{"class":36,"line":601},[34,71159,71160],{"class":44},"  text-align",[34,71162,67],{"class":40},[34,71164,71165],{"class":156},"center;\n",[34,71167,71168],{"class":36,"line":613},[34,71169,71170],{"class":156},"  color:#333;\n",[34,71172,71173,71175,71177],{"class":36,"line":618},[34,71174,71105],{"class":44},[34,71176,67],{"class":40},[34,71178,71179],{"class":156},"20px 0;\n",[34,71181,71182],{"class":36,"line":628},[34,71183,3327],{"class":40},[34,71185,71186],{"class":36,"line":640},[34,71187,241],{"class":40},[34,71189,71190],{"class":36,"line":2301},[34,71191,71192],{"class":156},"table {\n",[34,71194,71195],{"class":36,"line":2307},[34,71196,71197],{"class":156},"  margin:0 auto;\n",[34,71199,71200,71203,71205],{"class":36,"line":2328},[34,71201,71202],{"class":44},"  width",[34,71204,67],{"class":40},[34,71206,71207],{"class":156},"800px;\n",[34,71209,71210,71213,71215],{"class":36,"line":2333},[34,71211,71212],{"class":44},"  border-collapse",[34,71214,67],{"class":40},[34,71216,71217],{"class":156},"collapse;\n",[34,71219,71220],{"class":36,"line":2347},[34,71221,71222],{"class":156},"  color:#004085;\n",[34,71224,71225],{"class":36,"line":2352},[34,71226,241],{"class":40},[34,71228,71229],{"class":36,"line":2381},[34,71230,71231],{"class":156},"th {\n",[34,71233,71234,71236,71238],{"class":36,"line":2386},[34,71235,71115],{"class":44},[34,71237,67],{"class":40},[34,71239,71240],{"class":156},"10px;\n",[34,71242,71243,71246,71248],{"class":36,"line":2403},[34,71244,71245],{"class":44},"  background",[34,71247,67],{"class":40},[34,71249,71250],{"class":205},"#cfe5ff;\n",[34,71252,71253],{"class":36,"line":2408},[34,71254,71255],{"class":40},"  \n",[34,71257,71258,71260,71262],{"class":36,"line":2413},[34,71259,228],{"class":44},[34,71261,67],{"class":40},[34,71263,71264],{"class":156},"20px;\n",[34,71266,71267,71270,71272],{"class":36,"line":2418},[34,71268,71269],{"class":44},"  font-weight",[34,71271,67],{"class":40},[34,71273,71274],{"class":156},"400;\n",[34,71276,71277],{"class":36,"line":2432},[34,71278,241],{"class":40},[34,71280,71281],{"class":36,"line":2437},[34,71282,71283],{"class":156},"td,th {\n",[34,71285,71286,71289],{"class":36,"line":3230},[34,71287,71288],{"class":156},"  border:1px solid",[34,71290,71291],{"class":205}," #b8daff;\n",[34,71293,71294],{"class":36,"line":3244},[34,71295,241],{"class":40},[34,71297,71298],{"class":36,"line":3252},[34,71299,71300],{"class":156},"td {\n",[34,71302,71303],{"class":36,"line":3257},[34,71304,71305],{"class":156},"  padding:10px;\n",[34,71307,71308],{"class":36,"line":3263},[34,71309,71310],{"class":156},"  color:#666;\n",[34,71312,71313,71315,71317],{"class":36,"line":3269},[34,71314,71160],{"class":44},[34,71316,67],{"class":40},[34,71318,71165],{"class":156},[34,71320,71321,71323,71325],{"class":36,"line":3274},[34,71322,228],{"class":44},[34,71324,67],{"class":40},[34,71326,71327],{"class":156},"16px;\n",[34,71329,71330],{"class":36,"line":8601},[34,71331,241],{"class":40},[34,71333,71334],{"class":36,"line":8625},[34,71335,71336],{"class":156},"tbody tr {\n",[34,71338,71339,71341,71343],{"class":36,"line":8630},[34,71340,71245],{"class":44},[34,71342,67],{"class":40},[34,71344,71345],{"class":205},"#fff;\n",[34,71347,71348],{"class":36,"line":8636},[34,71349,241],{"class":40},[34,71351,71352],{"class":36,"line":8663},[34,71353,71354],{"class":156},"tbody tr:hover {\n",[34,71356,71357,71359,71361],{"class":36,"line":8668},[34,71358,71245],{"class":44},[34,71360,67],{"class":40},[34,71362,71363],{"class":205},"#e1ecf8;\n",[34,71365,71366],{"class":36,"line":8674},[34,71367,241],{"class":40},[34,71369,71370],{"class":36,"line":8686},[34,71371,71372],{"class":156},".info {\n",[34,71374,71375,71377,71379],{"class":36,"line":8698},[34,71376,71202],{"class":44},[34,71378,67],{"class":40},[34,71380,71381],{"class":156},"900px;\n",[34,71383,71384,71386,71388],{"class":36,"line":8710},[34,71385,71105],{"class":44},[34,71387,67],{"class":40},[34,71389,71390],{"class":156},"50px auto;\n",[34,71392,71393,71395,71397],{"class":36,"line":10369},[34,71394,71160],{"class":44},[34,71396,67],{"class":40},[34,71398,71165],{"class":156},[34,71400,71401],{"class":36,"line":10394},[34,71402,241],{"class":40},[34,71404,71405],{"class":36,"line":10417},[34,71406,71407],{"class":156},".info  input, .info select {\n",[34,71409,71410,71412,71414],{"class":36,"line":10441},[34,71411,71202],{"class":44},[34,71413,67],{"class":40},[34,71415,71416],{"class":156},"80px;\n",[34,71418,71419,71422,71424],{"class":36,"line":10446},[34,71420,71421],{"class":44},"  height",[34,71423,67],{"class":40},[34,71425,71426],{"class":156},"27px;\n",[34,71428,71429,71431,71433],{"class":36,"line":10451},[34,71430,690],{"class":44},[34,71432,67],{"class":40},[34,71434,71141],{"class":156},[34,71436,71437,71440,71442],{"class":36,"line":10456},[34,71438,71439],{"class":44},"  border-radius",[34,71441,67],{"class":40},[34,71443,71444],{"class":156},"5px;\n",[34,71446,71447,71449],{"class":36,"line":10465},[34,71448,71288],{"class":156},[34,71450,71291],{"class":205},[34,71452,71453,71456,71458],{"class":36,"line":10470},[34,71454,71455],{"class":44},"  padding-left",[34,71457,67],{"class":40},[34,71459,71444],{"class":156},[34,71461,71462,71465,71467],{"class":36,"line":10476},[34,71463,71464],{"class":44},"  box-sizing",[34,71466,67],{"class":40},[34,71468,71469],{"class":156},"border-box;\n",[34,71471,71472,71475,71477],{"class":36,"line":10497},[34,71473,71474],{"class":44},"  margin-right",[34,71476,67],{"class":40},[34,71478,71479],{"class":156},"15px;\n",[34,71481,71482],{"class":36,"line":10503},[34,71483,241],{"class":40},[34,71485,71486],{"class":36,"line":10517},[34,71487,71488],{"class":156},".info button {\n",[34,71490,71491,71493,71495],{"class":36,"line":10523},[34,71492,71202],{"class":44},[34,71494,67],{"class":40},[34,71496,71497],{"class":156},"60px;\n",[34,71499,71500,71502,71504],{"class":36,"line":10550},[34,71501,71421],{"class":44},[34,71503,67],{"class":40},[34,71505,71426],{"class":156},[34,71507,71508,71511,71513],{"class":36,"line":10559},[34,71509,71510],{"class":44},"  background-color",[34,71512,67],{"class":40},[34,71514,71515],{"class":205},"#004085;\n",[34,71517,71518,71520,71522],{"class":36,"line":10565},[34,71519,690],{"class":44},[34,71521,67],{"class":40},[34,71523,71141],{"class":156},[34,71525,71526,71529,71531],{"class":36,"line":10573},[34,71527,71528],{"class":44},"  border",[34,71530,67],{"class":40},[34,71532,71110],{"class":156},[34,71534,71535,71537,71539],{"class":36,"line":10578},[34,71536,217],{"class":44},[34,71538,67],{"class":40},[34,71540,71345],{"class":205},[34,71542,71543,71546,71548],{"class":36,"line":17256},[34,71544,71545],{"class":44},"  cursor",[34,71547,67],{"class":40},[34,71549,71550],{"class":156},"pointer;\n",[34,71552,71553,71555,71557],{"class":36,"line":17262},[34,71554,71439],{"class":44},[34,71556,67],{"class":40},[34,71558,71444],{"class":156},[34,71560,71561],{"class":36,"line":17285},[34,71562,241],{"class":40},[34,71564,71565],{"class":36,"line":17291},[34,71566,71567],{"class":156},".info .age {\n",[34,71569,71570,71572,71574],{"class":36,"line":17314},[34,71571,71202],{"class":44},[34,71573,67],{"class":40},[34,71575,71576],{"class":156},"50px;\n",[34,71578,71579],{"class":36,"line":17328},[34,71580,241],{"class":40},[108,71582,71583],{},"思路：",[108,71585,71586],{},[2122,71587],{"alt":29,"src":71588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[108,71590,71591],{},[2122,71592],{"alt":29,"src":71593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[108,71595,71596],{},[2122,71597],{"alt":29,"src":71598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[19,71600,71602],{"id":71601},"_3315-重绘回流","3.3.15 重绘回流",[108,71604,71605],{},[2122,71606],{"alt":29,"src":71607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[108,71609,71610],{},[2122,71611],{"alt":29,"src":71612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[108,71614,71615],{},[2122,71616],{"alt":29,"src":71617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71619,71621],{"id":71620},"_34-bom","3.4 BOM",[108,71623,71624],{},[2122,71625],{"alt":29,"src":71626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[108,71628,71629],{},"平时写的document省略了window而已，实际上是window.document",[108,71631,71632],{},"函数也是这样，调用的时候实际为window.fn()",[108,71634,71635],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[108,71637,71638],{},"window大部分情况下可以省略",[19,71640,71642],{"id":71641},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[108,71644,71645],{},"只执行一次",[108,71647,71648],{},[2122,71649],{"alt":29,"src":71650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[108,71652,71653],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[108,71655,71656],{},[2122,71657],{"alt":29,"src":71658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[19,71660,71662],{"id":71661},"_342-js执行机制","3.4.2 JS执行机制",[108,71664,71665],{},[2122,71666],{"alt":29,"src":71667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[108,71669,71670],{},"两个的结果都是1111 3333 2222",[108,71672,71673],{},[2122,71674],{"alt":29,"src":71675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[108,71677,71678],{},[2122,71679],{"alt":29,"src":71680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[108,71682,71683],{},[2122,71684],{"alt":29,"src":71685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[108,71687,71688],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[108,71690,71691],{},"工作流程：",[108,71693,71694],{},[2122,71695],{"alt":29,"src":71696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[108,71698,71699],{},[2122,71700],{"alt":29,"src":71701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[108,71703,71704],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[108,71706,71707],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[19,71709,71711],{"id":71710},"_343-location对象","3.4.3 location对象",[108,71713,71714],{},"location对象属于window这个全局对象下的，可以 省略window",[108,71716,71717],{},[2122,71718],{"alt":29,"src":71719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[108,71721,71722],{},"href可以跳转页面",[752,71724,71725],{},[755,71726,71727],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[108,71729,71730],{},"search得到提交信息之后网站后边的地址",[108,71732,71733],{},[2122,71734],{"alt":29,"src":71735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[108,71737,71738],{},[2122,71739],{"alt":29,"src":71740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[752,71742,71743],{"start":51},[755,71744,71745],{},"hash:这个获取单页面应用#后边的地址",[108,71747,71748],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[108,71750,71751],{},[2122,71752],{"alt":29,"src":71753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[24,71755,71757],{"className":53713,"code":71756,"language":53715,"meta":29,"style":29},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[31,71758,71759,71779,71799],{"__ignoreMap":29},[34,71760,71761,71763,71765,71767,71769,71772,71775,71777],{"class":36,"line":37},[34,71762,52790],{"class":40},[34,71764,520],{"class":44},[34,71766,267],{"class":149},[34,71768,153],{"class":40},[34,71770,71771],{"class":156},"\"#\u002Fmy\"",[34,71773,71774],{"class":40},">我的\u003C\u002F",[34,71776,520],{"class":44},[34,71778,48],{"class":40},[34,71780,71781,71783,71785,71787,71789,71792,71795,71797],{"class":36,"line":51},[34,71782,52790],{"class":40},[34,71784,520],{"class":44},[34,71786,267],{"class":149},[34,71788,153],{"class":40},[34,71790,71791],{"class":156},"\"#\u002Ffriend\"",[34,71793,71794],{"class":40},">关注\u003C\u002F",[34,71796,520],{"class":44},[34,71798,48],{"class":40},[34,71800,71801,71803,71805,71807,71809,71812,71815,71817],{"class":36,"line":60},[34,71802,52790],{"class":40},[34,71804,520],{"class":44},[34,71806,267],{"class":149},[34,71808,153],{"class":40},[34,71810,71811],{"class":156},"\"#\u002Fdownload\"",[34,71813,71814],{"class":40},">下载\u003C\u002F",[34,71816,520],{"class":44},[34,71818,48],{"class":40},[108,71820,71821],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[752,71823,71824],{"start":60},[755,71825,71826,71827,71829,71830,71832],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54362,71828],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54362,71831],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[19,71834,71836],{"id":71835},"_345-navigator对象","3.4.5 navigator对象",[108,71838,71839],{},[2122,71840],{"alt":29,"src":71841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[24,71843,71847],{"className":71844,"code":71845,"language":71846,"meta":29,"style":29},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[31,71848,71849,71854,71865,71877,71882,71933,71974,71979,71992,72004,72009],{"__ignoreMap":29},[34,71850,71851],{"class":36,"line":37},[34,71852,71853],{"class":205},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[34,71855,71856,71858,71860,71862],{"class":36,"line":51},[34,71857,1022],{"class":87},[34,71859,801],{"class":40},[34,71861,55094],{"class":87},[34,71863,71864],{"class":40}," () { \n",[34,71866,71867,71869,71872,71874],{"class":36,"line":60},[34,71868,7445],{"class":87},[34,71870,71871],{"class":63}," userAgent",[34,71873,14217],{"class":87},[34,71875,71876],{"class":40}," navigator.userAgent \n",[34,71878,71879],{"class":36,"line":76},[34,71880,71881],{"class":205},"\u002F\u002F 验证是否为Android或iPhone \n",[34,71883,71884,71886,71889,71891,71894,71897,71899,71901,71904,71906,71909,71913,71915,71917,71919,71922,71924,71926,71928,71930],{"class":36,"line":93},[34,71885,7445],{"class":87},[34,71887,71888],{"class":63}," android",[34,71890,14217],{"class":87},[34,71892,71893],{"class":40}," userAgent.",[34,71895,71896],{"class":149},"match",[34,71898,801],{"class":40},[34,71900,1379],{"class":156},[34,71902,71903],{"class":48628},"(Android);",[34,71905,1779],{"class":87},[34,71907,71908],{"class":63},"[\\s",[34,71910,71912],{"class":71911},"snhLl","\\\u002F",[34,71914,1733],{"class":63},[34,71916,1276],{"class":87},[34,71918,801],{"class":48628},[34,71920,71921],{"class":63},"[\\d.]",[34,71923,1276],{"class":87},[34,71925,1224],{"class":48628},[34,71927,1779],{"class":87},[34,71929,1379],{"class":156},[34,71931,71932],{"class":40},") \n",[34,71934,71935,71937,71940,71942,71944,71946,71948,71950,71953,71956,71959,71961,71963,71966,71968,71970,71972],{"class":36,"line":99},[34,71936,7445],{"class":87},[34,71938,71939],{"class":63}," iphone",[34,71941,14217],{"class":87},[34,71943,71893],{"class":40},[34,71945,71896],{"class":149},[34,71947,801],{"class":40},[34,71949,1379],{"class":156},[34,71951,71952],{"class":48628},"(iPhone",[34,71954,71955],{"class":63},"\\s",[34,71957,71958],{"class":48628},"OS)",[34,71960,71955],{"class":63},[34,71962,801],{"class":48628},[34,71964,71965],{"class":63},"[\\d_]",[34,71967,1276],{"class":87},[34,71969,1224],{"class":48628},[34,71971,1379],{"class":156},[34,71973,71932],{"class":40},[34,71975,71976],{"class":36,"line":353},[34,71977,71978],{"class":205},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[34,71980,71981,71983,71986,71989],{"class":36,"line":359},[34,71982,2191],{"class":87},[34,71984,71985],{"class":40}," (android ",[34,71987,71988],{"class":87},"||",[34,71990,71991],{"class":40}," iphone) { \n",[34,71993,71994,71997,71999,72002],{"class":36,"line":579},[34,71995,71996],{"class":40},"location.href ",[34,71998,153],{"class":87},[34,72000,72001],{"class":156}," 'http:\u002F\u002Fm.itcast.cn'",[34,72003,3327],{"class":40},[34,72005,72006],{"class":36,"line":589},[34,72007,72008],{"class":40},"} \n",[34,72010,72011],{"class":36,"line":601},[34,72012,72013],{"class":40},"})()\n",[19,72015,72017],{"id":72016},"_346-histroy对象","3.4.6 histroy对象",[108,72019,72020],{},[2122,72021],{"alt":29,"src":72022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[108,72024,72025],{},"浏览器地址的前进与后退!!!",[108,72027,72028],{},"history.back() 等效于 history.go(-1)",[108,72030,72031],{},"history.forward() 等效于 history.go(1)",[14,72033,72035],{"id":72034},"_35-本地存储","3.5 本地存储",[752,72037,72038,72041,72044],{},[755,72039,72040],{},"数据存储在用户浏览器中",[755,72042,72043],{},"设置、读取方便、甚至页面刷新不丢失数据",[755,72045,72046],{},"容量较大，sessionStorage和localStorage约 5M 左右",[19,72048,72050],{"id":72049},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[108,72052,72053],{},"只能存储字符串",[108,72055,72056],{},[2122,72057],{"alt":29,"src":72058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[108,72060,72061],{},[2122,72062],{"alt":29,"src":72063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[108,72065,72066],{},"键值对要加引号,不然就会当变量来看了",[108,72068,72069],{},"localStorage.setItem('uname', 'pink')",[108,72071,72072],{},"刷新之后信息不再丢失",[108,72074,72075],{},"操作key,value会跟着变",[108,72077,72078],{},"删除只删除键就可以,即名字",[108,72080,72069],{},[108,72082,72083],{},"改:",[108,72085,72086],{},"localStorage.setItem('uname','red')",[108,72088,72089],{},"有这个键就是改,没有这个键就是改",[108,72091,72092],{},[2122,72093],{"alt":29,"src":72094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[108,72096,72097],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[108,72099,72100],{},[2122,72101],{"alt":29,"src":72102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[108,72104,72105],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[19,72107,72109],{"id":72108},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[108,72111,72112],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[108,72114,72115],{},"特性:",[752,72117,72118,72121,72124,72127],{},[755,72119,72120],{},"生命周期为关闭浏览器窗口",[755,72122,72123],{},"在同一个窗口(页面)下数据可以共享",[755,72125,72126],{},"以键值对的形式存储使用",[755,72128,72129],{},"用法跟localStorage 基本相同",[19,72131,72133],{"id":72132},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[108,72135,72136],{},"本地只能存储字符串,无法直接存储复杂数据类型",[24,72138,72140],{"className":53713,"code":72139,"language":53715,"meta":29,"style":29},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[31,72141,72142,72150,72155,72160,72165,72170,72174,72179,72184],{"__ignoreMap":29},[34,72143,72144,72146,72148],{"class":36,"line":37},[34,72145,41],{"class":40},[34,72147,52459],{"class":44},[34,72149,48],{"class":40},[34,72151,72152],{"class":36,"line":51},[34,72153,72154],{"class":40},"    const obj = {\n",[34,72156,72157],{"class":36,"line":60},[34,72158,72159],{"class":40},"      uname: 'pink老师',\n",[34,72161,72162],{"class":36,"line":76},[34,72163,72164],{"class":40},"      age: 18,\n",[34,72166,72167],{"class":36,"line":93},[34,72168,72169],{"class":40},"      gender: '女'\n",[34,72171,72172],{"class":36,"line":99},[34,72173,2840],{"class":40},[34,72175,72176],{"class":36,"line":353},[34,72177,72178],{"class":40},"    \u002F\u002F 存储复杂数据类型\n",[34,72180,72181],{"class":36,"line":359},[34,72182,72183],{"class":40},"    localStorage.setItem('obj', obj)\n",[34,72185,72186,72188,72190],{"class":36,"line":579},[34,72187,53063],{"class":40},[34,72189,52459],{"class":44},[34,72191,48],{"class":40},[108,72193,72194],{},[2122,72195],{"alt":29,"src":72196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[108,72198,72199],{},"如果获取一下数据:",[108,72201,72202],{},"log(localStorage.getItem('obj'))",[108,72204,72205],{},[2122,72206],{"alt":29,"src":72207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[108,72209,72210],{},"发现直接存对象是使用不了的!!!",[22650,72212,72214],{"id":72213},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[108,72216,72217],{},[2122,72218],{"alt":29,"src":72219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[24,72221,72223],{"className":51284,"code":72222,"language":51286,"meta":29,"style":29},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[31,72224,72225,72233,72243,72253,72262,72270,72274,72278,72304,72323,72331,72335,72340,72345],{"__ignoreMap":29},[34,72226,72227,72229,72231],{"class":36,"line":37},[34,72228,41],{"class":40},[34,72230,52459],{"class":44},[34,72232,48],{"class":40},[34,72234,72235,72237,72239,72241],{"class":36,"line":51},[34,72236,11874],{"class":87},[34,72238,70606],{"class":63},[34,72240,14217],{"class":87},[34,72242,57],{"class":40},[34,72244,72245,72248,72251],{"class":36,"line":60},[34,72246,72247],{"class":40},"      uname: ",[34,72249,72250],{"class":156},"'pink老师'",[34,72252,32117],{"class":40},[34,72254,72255,72258,72260],{"class":36,"line":76},[34,72256,72257],{"class":40},"      age: ",[34,72259,1445],{"class":63},[34,72261,32117],{"class":40},[34,72263,72264,72267],{"class":36,"line":93},[34,72265,72266],{"class":40},"      gender: ",[34,72268,72269],{"class":156},"'女'\n",[34,72271,72272],{"class":36,"line":99},[34,72273,2840],{"class":40},[34,72275,72276],{"class":36,"line":353},[34,72277,72178],{"class":205},[34,72279,72280,72283,72286,72288,72291,72293,72296,72298,72301],{"class":36,"line":359},[34,72281,72282],{"class":40},"  localStorage.",[34,72284,72285],{"class":149},"setItem",[34,72287,801],{"class":40},[34,72289,72290],{"class":156},"'obj'",[34,72292,13088],{"class":40},[34,72294,72295],{"class":63},"JSON",[34,72297,1353],{"class":40},[34,72299,72300],{"class":149},"stringify",[34,72302,72303],{"class":40},"(obj))\n",[34,72305,72306,72309,72311,72314,72317,72319,72321],{"class":36,"line":579},[34,72307,72308],{"class":40},"  console.",[34,72310,58890],{"class":149},[34,72312,72313],{"class":40},"(localStorage.",[34,72315,72316],{"class":149},"getItem",[34,72318,801],{"class":40},[34,72320,72290],{"class":156},[34,72322,31148],{"class":40},[34,72324,72325,72327,72329],{"class":36,"line":589},[34,72326,53063],{"class":40},[34,72328,52459],{"class":44},[34,72330,48],{"class":40},[34,72332,72333],{"class":36,"line":601},[34,72334,71255],{"class":40},[34,72336,72337],{"class":36,"line":613},[34,72338,72339],{"class":40},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[34,72341,72342],{"class":36,"line":618},[34,72343,72344],{"class":40},"  类型是字符串的\n",[34,72346,72347],{"class":36,"line":628},[34,72348,72349],{"class":40},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22650,72351,72353],{"id":72352},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[108,72355,72356],{},[2122,72357],{"alt":29,"src":72358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[108,72360,72361],{},[2122,72362],{"alt":29,"src":72363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[24,72365,72367],{"className":53713,"code":72366,"language":53715,"meta":29,"style":29},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[31,72368,72369,72377,72381,72385,72389,72393,72397,72402,72407,72412,72417,72422,72427,72432,72437],{"__ignoreMap":29},[34,72370,72371,72373,72375],{"class":36,"line":37},[34,72372,52790],{"class":40},[34,72374,52459],{"class":44},[34,72376,48],{"class":40},[34,72378,72379],{"class":36,"line":51},[34,72380,72154],{"class":40},[34,72382,72383],{"class":36,"line":60},[34,72384,72159],{"class":40},[34,72386,72387],{"class":36,"line":76},[34,72388,72164],{"class":40},[34,72390,72391],{"class":36,"line":93},[34,72392,72169],{"class":40},[34,72394,72395],{"class":36,"line":99},[34,72396,2840],{"class":40},[34,72398,72399],{"class":36,"line":353},[34,72400,72401],{"class":40},"    \u002F\u002F 1.存储复杂数据类型\n",[34,72403,72404],{"class":36,"line":359},[34,72405,72406],{"class":40},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[34,72408,72409],{"class":36,"line":579},[34,72410,72411],{"class":40},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[34,72413,72414],{"class":36,"line":589},[34,72415,72416],{"class":40},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[34,72418,72419],{"class":36,"line":601},[34,72420,72421],{"class":40},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[34,72423,72424],{"class":36,"line":613},[34,72425,72426],{"class":40},"    \u002F\u002F 取\n",[34,72428,72429],{"class":36,"line":618},[34,72430,72431],{"class":40},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[34,72433,72434],{"class":36,"line":628},[34,72435,72436],{"class":40},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[34,72438,72439,72441,72443],{"class":36,"line":640},[34,72440,53063],{"class":40},[34,72442,52459],{"class":44},[34,72444,48],{"class":40},[108,72446,72447],{},[2122,72448],{"alt":29,"src":72449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[19,72451,72453],{"id":72452},"_356-数组map方法","3.5.6 数组map方法",[108,72455,72456],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[108,72458,72459],{},[2122,72460],{"alt":29,"src":72461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[108,72463,72464],{},[2122,72465],{"alt":29,"src":72466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[108,72468,72469,72472],{},[111,72470,72471],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[108,72474,72475],{},"map有返回值，但是forEach没有返回值",[108,72477,72478],{},"map是个方法。用的时候要加 ()",[108,72480,72481],{},"map返回的是一个数组",[19,72483,72485],{"id":72484},"_357-数组中join方法","3.5.7 数组中join方法",[108,72487,72488],{},[2122,72489],{"alt":29,"src":72490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[108,72492,72493],{},"类似于python中拼接字符串一样！",[752,72495,72496,72499,72502],{},[755,72497,72498],{},"小括号为空则逗号分开",[755,72500,72501],{},"小括号为空字符串 ''，则元素之间没有分隔符",[755,72503,72504],{},"小括号用啥符号就用进行分割",[19,72506,72508],{"id":72507},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[752,72510,72511,72514,72517,72520,72523],{},[755,72512,72513],{},"记住本地时间获取快速方式：new Date().toDateString()",[755,72515,72516],{},"尽量减少DOM操作，用好map+join的渲染方式",[755,72518,72519],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[755,72521,72522],{},"return可以实现函数的结束",[755,72524,72525],{},"禁止跳转是 preventDefault() 不要忘记",[24,72527,72529],{"className":51284,"code":72528,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,72530,72531,72541,72555,72559,72567,72581,72601,72613,72621,72627,72637,72647,72651,72655,72661,72671,72683,72687,72691,72698,72710,72724,72734,72738,72742,72749,72756,72763,72775,72787,72797,72809,72813,72817,72824,72831,72843,72855,72865,72877,72907,72911,72915,72922,72934,72946,72970,72980,72990,72994,72998,73006,73017,73029,73041,73053,73070,73082,73094,73098,73102,73109,73121,73133,73145,73156,73174,73187,73199,73223,73234,73238,73242,73250,73260,73264,73268,73274,73286,73297,73307,73311,73315,73321,73343,73347,73351,73357,73363,73375,73385,73397,73427,73440,73457,73461,73465,73476,73498,73508,73512,73516,73529,73539,73551,73563,73575,73587,73597,73607,73617,73628,73641,73645,73653,73661,73665,73673,73686,73706,73739,73772,73805,73831,73849,73867,73875,73901,73919,73937,73955,73973,73991,73999,74007,74025,74033,74062,74070,74078,74086,74099,74111,74123,74135,74147,74159,74172,74184,74192,74200,74208,74213,74218,74222,74226,74230,74234,74238,74242,74247,74252,74257,74262,74270,74278,74286,74291,74296,74301,74306,74311,74316,74321,74326,74331,74336,74341,74346,74351,74356,74360,74365,74370,74380,74389,74393,74398,74407,74423,74465,74505,74544,74609,74617,74621,74626,74644,74652,74657,74662,74692,74698,74703,74716,74728,74740,74752,74764,74776,74788,74792,74802,74806,74811,74816,74820,74829,74833,74838,74843,74862,74867,74887,74891,74896,74900,74905,74923,74941,74959,74978,74997,75016,75021,75027,75048,75054,75063,75069,75075,75081,75108,75121,75126,75136,75142,75148,75154,75160,75165,75171,75177,75183,75189,75222,75227,75232,75237,75242,75248,75254,75260,75271,75276,75282,75289,75303,75309,75333,75338,75343,75349,75355,75376,75382,75395,75401,75407,75413,75419,75424,75430,75436,75442,75460,75474,75480,75488,75494,75516,75521,75526,75531,75536,75541,75550,75559,75564],{"__ignoreMap":29},[34,72532,72533,72535,72537,72539],{"class":36,"line":37},[34,72534,51948],{"class":40},[34,72536,51951],{"class":44},[34,72538,51954],{"class":149},[34,72540,48],{"class":40},[34,72542,72543,72545,72547,72549,72551,72553],{"class":36,"line":51},[34,72544,41],{"class":40},[34,72546,51286],{"class":44},[34,72548,51965],{"class":149},[34,72550,153],{"class":40},[34,72552,51970],{"class":156},[34,72554,48],{"class":40},[34,72556,72557],{"class":36,"line":60},[34,72558,3053],{"emptyLinePlaceholder":726},[34,72560,72561,72563,72565],{"class":36,"line":76},[34,72562,41],{"class":40},[34,72564,51983],{"class":44},[34,72566,48],{"class":40},[34,72568,72569,72571,72573,72575,72577,72579],{"class":36,"line":93},[34,72570,52790],{"class":40},[34,72572,51993],{"class":44},[34,72574,51996],{"class":149},[34,72576,153],{"class":40},[34,72578,52001],{"class":156},[34,72580,48],{"class":40},[34,72582,72583,72585,72587,72589,72591,72593,72595,72597,72599],{"class":36,"line":99},[34,72584,52790],{"class":40},[34,72586,51993],{"class":44},[34,72588,15573],{"class":149},[34,72590,153],{"class":40},[34,72592,52040],{"class":156},[34,72594,52020],{"class":149},[34,72596,153],{"class":40},[34,72598,52047],{"class":156},[34,72600,48],{"class":40},[34,72602,72603,72605,72607,72609,72611],{"class":36,"line":353},[34,72604,52790],{"class":40},[34,72606,52056],{"class":44},[34,72608,52059],{"class":40},[34,72610,52056],{"class":44},[34,72612,48],{"class":40},[34,72614,72615,72617,72619],{"class":36,"line":359},[34,72616,52790],{"class":40},[34,72618,45],{"class":44},[34,72620,48],{"class":40},[34,72622,72623,72625],{"class":36,"line":579},[34,72624,7056],{"class":44},[34,72626,57],{"class":40},[34,72628,72629,72631,72633,72635],{"class":36,"line":589},[34,72630,55340],{"class":63},[34,72632,67],{"class":40},[34,72634,987],{"class":63},[34,72636,73],{"class":40},[34,72638,72639,72641,72643,72645],{"class":36,"line":601},[34,72640,55351],{"class":63},[34,72642,67],{"class":40},[34,72644,987],{"class":63},[34,72646,73],{"class":40},[34,72648,72649],{"class":36,"line":613},[34,72650,2840],{"class":40},[34,72652,72653],{"class":36,"line":618},[34,72654,3053],{"emptyLinePlaceholder":726},[34,72656,72657,72659],{"class":36,"line":628},[34,72658,57922],{"class":44},[34,72660,57],{"class":40},[34,72662,72663,72665,72667,72669],{"class":36,"line":640},[34,72664,57929],{"class":63},[34,72666,67],{"class":40},[34,72668,52239],{"class":63},[34,72670,73],{"class":40},[34,72672,72673,72675,72677,72679,72681],{"class":36,"line":2301},[34,72674,62717],{"class":63},[34,72676,67],{"class":40},[34,72678,1495],{"class":63},[34,72680,88],{"class":87},[34,72682,73],{"class":40},[34,72684,72685],{"class":36,"line":2307},[34,72686,2840],{"class":40},[34,72688,72689],{"class":36,"line":2328},[34,72690,3053],{"emptyLinePlaceholder":726},[34,72692,72693,72696],{"class":36,"line":2333},[34,72694,72695],{"class":149},"    .info",[34,72697,57],{"class":40},[34,72699,72700,72702,72704,72706,72708],{"class":36,"line":2347},[34,72701,55415],{"class":63},[34,72703,67],{"class":40},[34,72705,52137],{"class":63},[34,72707,88],{"class":87},[34,72709,73],{"class":40},[34,72711,72712,72714,72716,72718,72720,72722],{"class":36,"line":2352},[34,72713,55351],{"class":63},[34,72715,67],{"class":40},[34,72717,1241],{"class":63},[34,72719,88],{"class":87},[34,72721,52203],{"class":63},[34,72723,73],{"class":40},[34,72725,72726,72728,72730,72732],{"class":36,"line":2381},[34,72727,57929],{"class":63},[34,72729,67],{"class":40},[34,72731,52239],{"class":63},[34,72733,73],{"class":40},[34,72735,72736],{"class":36,"line":2386},[34,72737,2840],{"class":40},[34,72739,72740],{"class":36,"line":2403},[34,72741,3053],{"emptyLinePlaceholder":726},[34,72743,72744,72747],{"class":36,"line":2408},[34,72745,72746],{"class":149},"    .uname",[34,72748,32117],{"class":40},[34,72750,72751,72754],{"class":36,"line":2413},[34,72752,72753],{"class":149},"    .age",[34,72755,32117],{"class":40},[34,72757,72758,72761],{"class":36,"line":2418},[34,72759,72760],{"class":149},"    .salary",[34,72762,57],{"class":40},[34,72764,72765,72767,72769,72771,72773],{"class":36,"line":2432},[34,72766,55415],{"class":63},[34,72768,67],{"class":40},[34,72770,1106],{"class":63},[34,72772,88],{"class":87},[34,72774,73],{"class":40},[34,72776,72777,72779,72781,72783,72785],{"class":36,"line":2437},[34,72778,55429],{"class":63},[34,72780,67],{"class":40},[34,72782,1495],{"class":63},[34,72784,88],{"class":87},[34,72786,73],{"class":40},[34,72788,72789,72791,72793,72795],{"class":36,"line":3230},[34,72790,62421],{"class":63},[34,72792,67],{"class":40},[34,72794,546],{"class":63},[34,72796,73],{"class":40},[34,72798,72799,72801,72803,72805,72807],{"class":36,"line":3244},[34,72800,62391],{"class":63},[34,72802,67],{"class":40},[34,72804,1370],{"class":63},[34,72806,88],{"class":87},[34,72808,73],{"class":40},[34,72810,72811],{"class":36,"line":3252},[34,72812,2840],{"class":40},[34,72814,72815],{"class":36,"line":3257},[34,72816,3053],{"emptyLinePlaceholder":726},[34,72818,72819,72822],{"class":36,"line":3263},[34,72820,72821],{"class":149},"    .gender",[34,72823,32117],{"class":40},[34,72825,72826,72829],{"class":36,"line":3269},[34,72827,72828],{"class":149},"    .city",[34,72830,57],{"class":40},[34,72832,72833,72835,72837,72839,72841],{"class":36,"line":3274},[34,72834,55415],{"class":63},[34,72836,67],{"class":40},[34,72838,1106],{"class":63},[34,72840,88],{"class":87},[34,72842,73],{"class":40},[34,72844,72845,72847,72849,72851,72853],{"class":36,"line":8601},[34,72846,55429],{"class":63},[34,72848,67],{"class":40},[34,72850,1619],{"class":63},[34,72852,88],{"class":87},[34,72854,73],{"class":40},[34,72856,72857,72859,72861,72863],{"class":36,"line":8625},[34,72858,62421],{"class":63},[34,72860,67],{"class":40},[34,72862,546],{"class":63},[34,72864,73],{"class":40},[34,72866,72867,72869,72871,72873,72875],{"class":36,"line":8630},[34,72868,62391],{"class":63},[34,72870,67],{"class":40},[34,72872,1370],{"class":63},[34,72874,88],{"class":87},[34,72876,73],{"class":40},[34,72878,72879,72881,72883,72885,72887,72889,72892,72894,72896,72898,72901,72903,72905],{"class":36,"line":8636},[34,72880,62617],{"class":63},[34,72882,67],{"class":40},[34,72884,1013],{"class":63},[34,72886,88],{"class":87},[34,72888,52168],{"class":63},[34,72890,72891],{"class":63}," rgb",[34,72893,801],{"class":40},[34,72895,2376],{"class":63},[34,72897,13088],{"class":40},[34,72899,72900],{"class":63},"197",[34,72902,13088],{"class":40},[34,72904,72900],{"class":63},[34,72906,3372],{"class":40},[34,72908,72909],{"class":36,"line":8663},[34,72910,2840],{"class":40},[34,72912,72913],{"class":36,"line":8668},[34,72914,3053],{"emptyLinePlaceholder":726},[34,72916,72917,72920],{"class":36,"line":8674},[34,72918,72919],{"class":44},"    button",[34,72921,57],{"class":40},[34,72923,72924,72926,72928,72930,72932],{"class":36,"line":8686},[34,72925,55429],{"class":63},[34,72927,67],{"class":40},[34,72929,1619],{"class":63},[34,72931,88],{"class":87},[34,72933,73],{"class":40},[34,72935,72936,72938,72940,72942,72944],{"class":36,"line":8698},[34,72937,55415],{"class":63},[34,72939,67],{"class":40},[34,72941,1279],{"class":63},[34,72943,88],{"class":87},[34,72945,73],{"class":40},[34,72947,72948,72950,72952,72955,72957,72959,72961,72964,72966,72968],{"class":36,"line":8710},[34,72949,55528],{"class":63},[34,72951,67],{"class":40},[34,72953,72954],{"class":63},"rgb",[34,72956,801],{"class":40},[34,72958,1762],{"class":63},[34,72960,13088],{"class":40},[34,72962,72963],{"class":63},"187",[34,72965,13088],{"class":40},[34,72967,1094],{"class":63},[34,72969,3372],{"class":40},[34,72971,72972,72974,72976,72978],{"class":36,"line":10369},[34,72973,58059],{"class":63},[34,72975,67],{"class":40},[34,72977,61485],{"class":63},[34,72979,73],{"class":40},[34,72981,72982,72984,72986,72988],{"class":36,"line":10394},[34,72983,62617],{"class":63},[34,72985,67],{"class":40},[34,72987,987],{"class":63},[34,72989,73],{"class":40},[34,72991,72992],{"class":36,"line":10417},[34,72993,2840],{"class":40},[34,72995,72996],{"class":36,"line":10441},[34,72997,3053],{"emptyLinePlaceholder":726},[34,72999,73000,73002,73004],{"class":36,"line":10446},[34,73001,72919],{"class":44},[34,73003,52335],{"class":44},[34,73005,57],{"class":40},[34,73007,73008,73010,73012,73015],{"class":36,"line":10451},[34,73009,55652],{"class":63},[34,73011,67],{"class":40},[34,73013,73014],{"class":63},"inline-block",[34,73016,73],{"class":40},[34,73018,73019,73021,73023,73025,73027],{"class":36,"line":10456},[34,73020,55415],{"class":63},[34,73022,67],{"class":40},[34,73024,1241],{"class":63},[34,73026,88],{"class":87},[34,73028,73],{"class":40},[34,73030,73031,73033,73035,73037,73039],{"class":36,"line":10465},[34,73032,55429],{"class":63},[34,73034,67],{"class":40},[34,73036,1241],{"class":63},[34,73038,88],{"class":87},[34,73040,73],{"class":40},[34,73042,73043,73045,73047,73049,73051],{"class":36,"line":10470},[34,73044,58002],{"class":63},[34,73046,67],{"class":40},[34,73048,1267],{"class":63},[34,73050,88],{"class":87},[34,73052,73],{"class":40},[34,73054,73055,73057,73059,73061,73063,73065,73068],{"class":36,"line":10476},[34,73056,62617],{"class":63},[34,73058,67],{"class":40},[34,73060,1013],{"class":63},[34,73062,88],{"class":87},[34,73064,52168],{"class":63},[34,73066,73067],{"class":63}," #fff",[34,73069,73],{"class":40},[34,73071,73072,73074,73076,73078,73080],{"class":36,"line":10497},[34,73073,55777],{"class":63},[34,73075,67],{"class":40},[34,73077,1114],{"class":63},[34,73079,88],{"class":87},[34,73081,73],{"class":40},[34,73083,73084,73086,73088,73090,73092],{"class":36,"line":10503},[34,73085,62391],{"class":63},[34,73087,67],{"class":40},[34,73089,1013],{"class":63},[34,73091,88],{"class":87},[34,73093,73],{"class":40},[34,73095,73096],{"class":36,"line":10517},[34,73097,2840],{"class":40},[34,73099,73100],{"class":36,"line":10523},[34,73101,3053],{"emptyLinePlaceholder":726},[34,73103,73104,73107],{"class":36,"line":10550},[34,73105,73106],{"class":149},"    .total",[34,73108,57],{"class":40},[34,73110,73111,73113,73115,73117,73119],{"class":36,"line":10559},[34,73112,55415],{"class":63},[34,73114,67],{"class":40},[34,73116,62270],{"class":63},[34,73118,88],{"class":87},[34,73120,73],{"class":40},[34,73122,73123,73125,73127,73129,73131],{"class":36,"line":10565},[34,73124,55429],{"class":63},[34,73126,67],{"class":40},[34,73128,1196],{"class":63},[34,73130,88],{"class":87},[34,73132,73],{"class":40},[34,73134,73135,73137,73139,73141,73143],{"class":36,"line":10573},[34,73136,58002],{"class":63},[34,73138,67],{"class":40},[34,73140,1196],{"class":63},[34,73142,88],{"class":87},[34,73144,73],{"class":40},[34,73146,73147,73149,73151,73154],{"class":36,"line":10578},[34,73148,57929],{"class":63},[34,73150,67],{"class":40},[34,73152,73153],{"class":63},"right",[34,73155,73],{"class":40},[34,73157,73158,73160,73162,73164,73166,73168,73170,73172],{"class":36,"line":17256},[34,73159,55351],{"class":63},[34,73161,67],{"class":40},[34,73163,1196],{"class":63},[34,73165,88],{"class":87},[34,73167,52203],{"class":63},[34,73169,2691],{"class":63},[34,73171,88],{"class":87},[34,73173,73],{"class":40},[34,73175,73176,73179,73181,73183,73185],{"class":36,"line":17262},[34,73177,73178],{"class":63},"      padding-right",[34,73180,67],{"class":40},[34,73182,1241],{"class":63},[34,73184,88],{"class":87},[34,73186,73],{"class":40},[34,73188,73189,73191,73193,73195,73197],{"class":36,"line":17285},[34,73190,55565],{"class":63},[34,73192,67],{"class":40},[34,73194,1318],{"class":63},[34,73196,88],{"class":87},[34,73198,73],{"class":40},[34,73200,73201,73203,73205,73207,73209,73212,73214,73217,73219,73221],{"class":36,"line":17291},[34,73202,55528],{"class":63},[34,73204,67],{"class":40},[34,73206,72954],{"class":63},[34,73208,801],{"class":40},[34,73210,73211],{"class":63},"237",[34,73213,13088],{"class":40},[34,73215,73216],{"class":63},"235",[34,73218,13088],{"class":40},[34,73220,73216],{"class":63},[34,73222,3372],{"class":40},[34,73224,73225,73228,73230,73232],{"class":36,"line":17314},[34,73226,73227],{"class":63},"      box-sizing",[34,73229,67],{"class":40},[34,73231,61148],{"class":63},[34,73233,73],{"class":40},[34,73235,73236],{"class":36,"line":17328},[34,73237,2840],{"class":40},[34,73239,73240],{"class":36,"line":17348},[34,73241,3053],{"emptyLinePlaceholder":726},[34,73243,73244,73246,73248],{"class":36,"line":17354},[34,73245,73106],{"class":149},[34,73247,52335],{"class":44},[34,73249,57],{"class":40},[34,73251,73252,73254,73256,73258],{"class":36,"line":17365},[34,73253,58059],{"class":63},[34,73255,67],{"class":40},[34,73257,58064],{"class":63},[34,73259,73],{"class":40},[34,73261,73262],{"class":36,"line":17388},[34,73263,2840],{"class":40},[34,73265,73266],{"class":36,"line":17410},[34,73267,3053],{"emptyLinePlaceholder":726},[34,73269,73270,73272],{"class":36,"line":17415},[34,73271,65661],{"class":44},[34,73273,57],{"class":40},[34,73275,73276,73278,73280,73282,73284],{"class":36,"line":17421},[34,73277,55415],{"class":63},[34,73279,67],{"class":40},[34,73281,62270],{"class":63},[34,73283,88],{"class":87},[34,73285,73],{"class":40},[34,73287,73288,73290,73292,73295],{"class":36,"line":17435},[34,73289,55351],{"class":63},[34,73291,67],{"class":40},[34,73293,73294],{"class":63},"auto",[34,73296,73],{"class":40},[34,73298,73299,73301,73303,73305],{"class":36,"line":17448},[34,73300,65668],{"class":63},[34,73302,67],{"class":40},[34,73304,65673],{"class":63},[34,73306,73],{"class":40},[34,73308,73309],{"class":36,"line":17453},[34,73310,2840],{"class":40},[34,73312,73313],{"class":36,"line":17467},[34,73314,3053],{"emptyLinePlaceholder":726},[34,73316,73317,73319],{"class":36,"line":17472},[34,73318,65753],{"class":44},[34,73320,57],{"class":40},[34,73322,73323,73325,73327,73329,73331,73333,73335,73337,73339,73341],{"class":36,"line":17478},[34,73324,55528],{"class":63},[34,73326,67],{"class":40},[34,73328,72954],{"class":63},[34,73330,801],{"class":40},[34,73332,73211],{"class":63},[34,73334,13088],{"class":40},[34,73336,73216],{"class":63},[34,73338,13088],{"class":40},[34,73340,73216],{"class":63},[34,73342,3372],{"class":40},[34,73344,73345],{"class":36,"line":17483},[34,73346,2840],{"class":40},[34,73348,73349],{"class":36,"line":17497},[34,73350,3053],{"emptyLinePlaceholder":726},[34,73352,73353,73355],{"class":36,"line":17502},[34,73354,65753],{"class":44},[34,73356,32117],{"class":40},[34,73358,73359,73361],{"class":36,"line":17507},[34,73360,65819],{"class":44},[34,73362,57],{"class":40},[34,73364,73365,73367,73369,73371,73373],{"class":36,"line":17521},[34,73366,55429],{"class":63},[34,73368,67],{"class":40},[34,73370,1068],{"class":63},[34,73372,88],{"class":87},[34,73374,73],{"class":40},[34,73376,73377,73379,73381,73383],{"class":36,"line":17533},[34,73378,57929],{"class":63},[34,73380,67],{"class":40},[34,73382,24388],{"class":63},[34,73384,73],{"class":40},[34,73386,73387,73389,73391,73393,73395],{"class":36,"line":17538},[34,73388,55565],{"class":63},[34,73390,67],{"class":40},[34,73392,1344],{"class":63},[34,73394,88],{"class":87},[34,73396,73],{"class":40},[34,73398,73399,73401,73403,73405,73407,73409,73411,73413,73416,73418,73421,73423,73425],{"class":36,"line":17551},[34,73400,62617],{"class":63},[34,73402,67],{"class":40},[34,73404,1013],{"class":63},[34,73406,88],{"class":87},[34,73408,52168],{"class":63},[34,73410,72891],{"class":63},[34,73412,801],{"class":40},[34,73414,73415],{"class":63},"228",[34,73417,13088],{"class":40},[34,73419,73420],{"class":63},"225",[34,73422,13088],{"class":40},[34,73424,73420],{"class":63},[34,73426,3372],{"class":40},[34,73428,73429,73432,73434,73436,73438],{"class":36,"line":17556},[34,73430,73431],{"class":63},"      padding-left",[34,73433,67],{"class":40},[34,73435,1114],{"class":63},[34,73437,88],{"class":87},[34,73439,73],{"class":40},[34,73441,73442,73444,73446,73448,73451,73453,73455],{"class":36,"line":17561},[34,73443,62501],{"class":63},[34,73445,67],{"class":40},[34,73447,28772],{"class":63},[34,73449,73450],{"class":63}," linear",[34,73452,62508],{"class":63},[34,73454,1490],{"class":87},[34,73456,73],{"class":40},[34,73458,73459],{"class":36,"line":17566},[34,73460,2840],{"class":40},[34,73462,73463],{"class":36,"line":17579},[34,73464,3053],{"emptyLinePlaceholder":726},[34,73466,73467,73470,73472,73474],{"class":36,"line":17584},[34,73468,73469],{"class":44},"    tbody",[34,73471,70779],{"class":44},[34,73473,584],{"class":149},[34,73475,57],{"class":40},[34,73477,73478,73480,73482,73484,73486,73488,73490,73492,73494,73496],{"class":36,"line":33284},[34,73479,55528],{"class":63},[34,73481,67],{"class":40},[34,73483,72954],{"class":63},[34,73485,801],{"class":40},[34,73487,73211],{"class":63},[34,73489,13088],{"class":40},[34,73491,73216],{"class":63},[34,73493,13088],{"class":40},[34,73495,73216],{"class":63},[34,73497,3372],{"class":40},[34,73499,73500,73502,73504,73506],{"class":36,"line":33290},[34,73501,62665],{"class":63},[34,73503,67],{"class":40},[34,73505,62670],{"class":63},[34,73507,73],{"class":40},[34,73509,73510],{"class":36,"line":33296},[34,73511,2840],{"class":40},[34,73513,73514],{"class":36,"line":33302},[34,73515,3053],{"emptyLinePlaceholder":726},[34,73517,73518,73520,73522,73525,73527],{"class":36,"line":33308},[34,73519,73469],{"class":44},[34,73521,70779],{"class":44},[34,73523,73524],{"class":44}," td",[34,73526,2058],{"class":44},[34,73528,57],{"class":40},[34,73530,73531,73533,73535,73537],{"class":36,"line":33319},[34,73532,55652],{"class":63},[34,73534,67],{"class":40},[34,73536,61512],{"class":63},[34,73538,73],{"class":40},[34,73540,73541,73543,73545,73547,73549],{"class":36,"line":33325},[34,73542,55415],{"class":63},[34,73544,67],{"class":40},[34,73546,1701],{"class":63},[34,73548,88],{"class":87},[34,73550,73],{"class":40},[34,73552,73553,73555,73557,73559,73561],{"class":36,"line":33345},[34,73554,55429],{"class":63},[34,73556,67],{"class":40},[34,73558,1619],{"class":63},[34,73560,88],{"class":87},[34,73562,73],{"class":40},[34,73564,73565,73567,73569,73571,73573],{"class":36,"line":33351},[34,73566,58002],{"class":63},[34,73568,67],{"class":40},[34,73570,1619],{"class":63},[34,73572,88],{"class":87},[34,73574,73],{"class":40},[34,73576,73577,73579,73581,73583,73585],{"class":36,"line":33362},[34,73578,62717],{"class":63},[34,73580,67],{"class":40},[34,73582,875],{"class":63},[34,73584,88],{"class":87},[34,73586,73],{"class":40},[34,73588,73589,73591,73593,73595],{"class":36,"line":33368},[34,73590,58059],{"class":63},[34,73592,67],{"class":40},[34,73594,61485],{"class":63},[34,73596,73],{"class":40},[34,73598,73599,73601,73603,73605],{"class":36,"line":33374},[34,73600,57929],{"class":63},[34,73602,67],{"class":40},[34,73604,52239],{"class":63},[34,73606,73],{"class":40},[34,73608,73609,73611,73613,73615],{"class":36,"line":33380},[34,73610,64608],{"class":63},[34,73612,67],{"class":40},[34,73614,546],{"class":63},[34,73616,73],{"class":40},[34,73618,73619,73621,73623,73626],{"class":36,"line":33386},[34,73620,55528],{"class":63},[34,73622,67],{"class":40},[34,73624,73625],{"class":63},"orange",[34,73627,73],{"class":40},[34,73629,73630,73632,73634,73637,73639],{"class":36,"line":33392},[34,73631,55777],{"class":63},[34,73633,67],{"class":40},[34,73635,73636],{"class":63},"12.5",[34,73638,88],{"class":87},[34,73640,73],{"class":40},[34,73642,73643],{"class":36,"line":33398},[34,73644,2840],{"class":40},[34,73646,73647,73649,73651],{"class":36,"line":33404},[34,73648,53063],{"class":40},[34,73650,45],{"class":44},[34,73652,48],{"class":40},[34,73654,73655,73657,73659],{"class":36,"line":33424},[34,73656,102],{"class":40},[34,73658,51983],{"class":44},[34,73660,48],{"class":40},[34,73662,73663],{"class":36,"line":33430},[34,73664,3053],{"emptyLinePlaceholder":726},[34,73666,73667,73669,73671],{"class":36,"line":33446},[34,73668,41],{"class":40},[34,73670,52446],{"class":44},[34,73672,48],{"class":40},[34,73674,73675,73677,73679,73682,73684],{"class":36,"line":33452},[34,73676,52790],{"class":40},[34,73678,14],{"class":44},[34,73680,73681],{"class":40},">学生就业统计表\u003C\u002F",[34,73683,14],{"class":44},[34,73685,48],{"class":40},[34,73687,73688,73690,73692,73694,73696,73698,73700,73702,73704],{"class":36,"line":33466},[34,73689,52790],{"class":40},[34,73691,67263],{"class":44},[34,73693,54132],{"class":149},[34,73695,153],{"class":40},[34,73697,63302],{"class":156},[34,73699,69705],{"class":149},[34,73701,153],{"class":40},[34,73703,32427],{"class":156},[34,73705,48],{"class":40},[34,73707,73708,73710,73712,73714,73716,73718,73720,73722,73724,73726,73728,73731,73733,73735,73737],{"class":36,"line":33472},[34,73709,51990],{"class":40},[34,73711,669],{"class":44},[34,73713,54469],{"class":149},[34,73715,153],{"class":40},[34,73717,63337],{"class":156},[34,73719,15573],{"class":149},[34,73721,153],{"class":40},[34,73723,69731],{"class":156},[34,73725,61662],{"class":149},[34,73727,153],{"class":40},[34,73729,73730],{"class":156},"\"姓名\"",[34,73732,54132],{"class":149},[34,73734,153],{"class":40},[34,73736,69731],{"class":156},[34,73738,48],{"class":40},[34,73740,73741,73743,73745,73747,73749,73751,73753,73755,73757,73759,73761,73764,73766,73768,73770],{"class":36,"line":33487},[34,73742,51990],{"class":40},[34,73744,669],{"class":44},[34,73746,54469],{"class":149},[34,73748,153],{"class":40},[34,73750,63337],{"class":156},[34,73752,15573],{"class":149},[34,73754,153],{"class":40},[34,73756,69759],{"class":156},[34,73758,61662],{"class":149},[34,73760,153],{"class":40},[34,73762,73763],{"class":156},"\"年龄\"",[34,73765,54132],{"class":149},[34,73767,153],{"class":40},[34,73769,69759],{"class":156},[34,73771,48],{"class":40},[34,73773,73774,73776,73778,73780,73782,73784,73786,73788,73790,73792,73794,73797,73799,73801,73803],{"class":36,"line":33493},[34,73775,51990],{"class":40},[34,73777,669],{"class":44},[34,73779,54469],{"class":149},[34,73781,153],{"class":40},[34,73783,63337],{"class":156},[34,73785,15573],{"class":149},[34,73787,153],{"class":40},[34,73789,69861],{"class":156},[34,73791,61662],{"class":149},[34,73793,153],{"class":40},[34,73795,73796],{"class":156},"\"薪资\"",[34,73798,54132],{"class":149},[34,73800,153],{"class":40},[34,73802,69861],{"class":156},[34,73804,48],{"class":40},[34,73806,73807,73809,73811,73813,73815,73817,73819,73821,73823,73825,73827,73829],{"class":36,"line":33502},[34,73808,51990],{"class":40},[34,73810,69779],{"class":44},[34,73812,15573],{"class":149},[34,73814,153],{"class":40},[34,73816,69786],{"class":156},[34,73818,15612],{"class":149},[34,73820,153],{"class":40},[34,73822,8305],{"class":156},[34,73824,54132],{"class":149},[34,73826,153],{"class":40},[34,73828,69786],{"class":156},[34,73830,48],{"class":40},[34,73832,73833,73835,73837,73839,73841,73843,73845,73847],{"class":36,"line":33508},[34,73834,55877],{"class":40},[34,73836,69801],{"class":44},[34,73838,67289],{"class":149},[34,73840,153],{"class":40},[34,73842,10614],{"class":156},[34,73844,69810],{"class":40},[34,73846,69801],{"class":44},[34,73848,48],{"class":40},[34,73850,73851,73853,73855,73857,73859,73861,73863,73865],{"class":36,"line":33517},[34,73852,55877],{"class":40},[34,73854,69801],{"class":44},[34,73856,67289],{"class":149},[34,73858,153],{"class":40},[34,73860,10683],{"class":156},[34,73862,69829],{"class":40},[34,73864,69801],{"class":44},[34,73866,48],{"class":40},[34,73868,73869,73871,73873],{"class":36,"line":33523},[34,73870,52423],{"class":40},[34,73872,69779],{"class":44},[34,73874,48],{"class":40},[34,73876,73877,73879,73881,73883,73885,73887,73889,73891,73893,73895,73897,73899],{"class":36,"line":33529},[34,73878,51990],{"class":40},[34,73880,69779],{"class":44},[34,73882,15573],{"class":149},[34,73884,153],{"class":40},[34,73886,69883],{"class":156},[34,73888,15612],{"class":149},[34,73890,153],{"class":40},[34,73892,8305],{"class":156},[34,73894,54132],{"class":149},[34,73896,153],{"class":40},[34,73898,69883],{"class":156},[34,73900,48],{"class":40},[34,73902,73903,73905,73907,73909,73911,73913,73915,73917],{"class":36,"line":33538},[34,73904,55877],{"class":40},[34,73906,69801],{"class":44},[34,73908,67289],{"class":149},[34,73910,153],{"class":40},[34,73912,69904],{"class":156},[34,73914,69907],{"class":40},[34,73916,69801],{"class":44},[34,73918,48],{"class":40},[34,73920,73921,73923,73925,73927,73929,73931,73933,73935],{"class":36,"line":33544},[34,73922,55877],{"class":40},[34,73924,69801],{"class":44},[34,73926,67289],{"class":149},[34,73928,153],{"class":40},[34,73930,69924],{"class":156},[34,73932,69927],{"class":40},[34,73934,69801],{"class":44},[34,73936,48],{"class":40},[34,73938,73939,73941,73943,73945,73947,73949,73951,73953],{"class":36,"line":33555},[34,73940,55877],{"class":40},[34,73942,69801],{"class":44},[34,73944,67289],{"class":149},[34,73946,153],{"class":40},[34,73948,69944],{"class":156},[34,73950,69947],{"class":40},[34,73952,69801],{"class":44},[34,73954,48],{"class":40},[34,73956,73957,73959,73961,73963,73965,73967,73969,73971],{"class":36,"line":33561},[34,73958,55877],{"class":40},[34,73960,69801],{"class":44},[34,73962,67289],{"class":149},[34,73964,153],{"class":40},[34,73966,69964],{"class":156},[34,73968,69967],{"class":40},[34,73970,69801],{"class":44},[34,73972,48],{"class":40},[34,73974,73975,73977,73979,73981,73983,73985,73987,73989],{"class":36,"line":33580},[34,73976,55877],{"class":40},[34,73978,69801],{"class":44},[34,73980,67289],{"class":149},[34,73982,153],{"class":40},[34,73984,69984],{"class":156},[34,73986,69987],{"class":40},[34,73988,69801],{"class":44},[34,73990,48],{"class":40},[34,73992,73993,73995,73997],{"class":36,"line":33586},[34,73994,52423],{"class":40},[34,73996,69779],{"class":44},[34,73998,48],{"class":40},[34,74000,74001,74003,74005],{"class":36,"line":33597},[34,74002,51990],{"class":40},[34,74004,54532],{"class":44},[34,74006,48],{"class":40},[34,74008,74009,74011,74013,74016,74018,74021,74023],{"class":36,"line":33603},[34,74010,55877],{"class":40},[34,74012,34],{"class":44},[34,74014,74015],{"class":40},">+\u003C\u002F",[34,74017,34],{"class":44},[34,74019,74020],{"class":40},">添加\u003C\u002F",[34,74022,54532],{"class":44},[34,74024,48],{"class":40},[34,74026,74027,74029,74031],{"class":36,"line":33623},[34,74028,53063],{"class":40},[34,74030,67263],{"class":44},[34,74032,48],{"class":40},[34,74034,74035,74037,74039,74041,74043,74045,74048,74050,74053,74055,74058,74060],{"class":36,"line":33639},[34,74036,52790],{"class":40},[34,74038,52258],{"class":44},[34,74040,54132],{"class":149},[34,74042,153],{"class":40},[34,74044,63219],{"class":156},[34,74046,74047],{"class":40},">共有数据 \u003C",[34,74049,34],{"class":44},[34,74051,74052],{"class":40},">0\u003C\u002F",[34,74054,34],{"class":44},[34,74056,74057],{"class":40},"> 条\u003C\u002F",[34,74059,52258],{"class":44},[34,74061,48],{"class":40},[34,74063,74064,74066,74068],{"class":36,"line":33645},[34,74065,52790],{"class":40},[34,74067,934],{"class":44},[34,74069,48],{"class":40},[34,74071,74072,74074,74076],{"class":36,"line":33659},[34,74073,51990],{"class":40},[34,74075,937],{"class":44},[34,74077,48],{"class":40},[34,74079,74080,74082,74084],{"class":36,"line":33665},[34,74081,55877],{"class":40},[34,74083,940],{"class":44},[34,74085,48],{"class":40},[34,74087,74088,74090,74092,74095,74097],{"class":36,"line":33671},[34,74089,55945],{"class":40},[34,74091,943],{"class":44},[34,74093,74094],{"class":40},">ID\u003C\u002F",[34,74096,943],{"class":44},[34,74098,48],{"class":40},[34,74100,74101,74103,74105,74107,74109],{"class":36,"line":33682},[34,74102,55945],{"class":40},[34,74104,943],{"class":44},[34,74106,70090],{"class":40},[34,74108,943],{"class":44},[34,74110,48],{"class":40},[34,74112,74113,74115,74117,74119,74121],{"class":36,"line":33688},[34,74114,55945],{"class":40},[34,74116,943],{"class":44},[34,74118,70103],{"class":40},[34,74120,943],{"class":44},[34,74122,48],{"class":40},[34,74124,74125,74127,74129,74131,74133],{"class":36,"line":33694},[34,74126,55945],{"class":40},[34,74128,943],{"class":44},[34,74130,70116],{"class":40},[34,74132,943],{"class":44},[34,74134,48],{"class":40},[34,74136,74137,74139,74141,74143,74145],{"class":36,"line":33704},[34,74138,55945],{"class":40},[34,74140,943],{"class":44},[34,74142,70129],{"class":40},[34,74144,943],{"class":44},[34,74146,48],{"class":40},[34,74148,74149,74151,74153,74155,74157],{"class":36,"line":33710},[34,74150,55945],{"class":40},[34,74152,943],{"class":44},[34,74154,70142],{"class":40},[34,74156,943],{"class":44},[34,74158,48],{"class":40},[34,74160,74161,74163,74165,74168,74170],{"class":36,"line":33721},[34,74162,55945],{"class":40},[34,74164,943],{"class":44},[34,74166,74167],{"class":40},">录入时间\u003C\u002F",[34,74169,943],{"class":44},[34,74171,48],{"class":40},[34,74173,74174,74176,74178,74180,74182],{"class":36,"line":33727},[34,74175,55945],{"class":40},[34,74177,943],{"class":44},[34,74179,70155],{"class":40},[34,74181,943],{"class":44},[34,74183,48],{"class":40},[34,74185,74186,74188,74190],{"class":36,"line":33737},[34,74187,56050],{"class":40},[34,74189,940],{"class":44},[34,74191,48],{"class":40},[34,74193,74194,74196,74198],{"class":36,"line":33742},[34,74195,52423],{"class":40},[34,74197,937],{"class":44},[34,74199,48],{"class":40},[34,74201,74202,74204,74206],{"class":36,"line":33748},[34,74203,51990],{"class":40},[34,74205,980],{"class":44},[34,74207,48],{"class":40},[34,74209,74210],{"class":36,"line":33797},[34,74211,74212],{"class":205},"      \u003C!-- \u003Ctr>\n",[34,74214,74215],{"class":36,"line":33844},[34,74216,74217],{"class":205},"        \u003Ctd>1\u003C\u002Ftd>\n",[34,74219,74220],{"class":36,"line":33849},[34,74221,74217],{"class":205},[34,74223,74224],{"class":36,"line":33855},[34,74225,74217],{"class":205},[34,74227,74228],{"class":36,"line":33874},[34,74229,74217],{"class":205},[34,74231,74232],{"class":36,"line":33880},[34,74233,74217],{"class":205},[34,74235,74236],{"class":36,"line":33900},[34,74237,74217],{"class":205},[34,74239,74240],{"class":36,"line":33906},[34,74241,74217],{"class":205},[34,74243,74244],{"class":36,"line":33912},[34,74245,74246],{"class":205},"        \u003Ctd>\n",[34,74248,74249],{"class":36,"line":33922},[34,74250,74251],{"class":205},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[34,74253,74254],{"class":36,"line":33927},[34,74255,74256],{"class":205},"        \u003C\u002Ftd>\n",[34,74258,74259],{"class":36,"line":33933},[34,74260,74261],{"class":205},"      \u003C\u002Ftr> -->\n",[34,74263,74264,74266,74268],{"class":36,"line":33949},[34,74265,52423],{"class":40},[34,74267,980],{"class":44},[34,74269,48],{"class":40},[34,74271,74272,74274,74276],{"class":36,"line":33994},[34,74273,53063],{"class":40},[34,74275,934],{"class":44},[34,74277,48],{"class":40},[34,74279,74280,74282,74284],{"class":36,"line":34000},[34,74281,52790],{"class":40},[34,74283,52459],{"class":44},[34,74285,48],{"class":40},[34,74287,74288],{"class":36,"line":34006},[34,74289,74290],{"class":205},"    \u002F\u002F const initData = [{\n",[34,74292,74293],{"class":36,"line":34012},[34,74294,74295],{"class":205},"    \u002F\u002F   unameId: 1,\n",[34,74297,74298],{"class":36,"line":34023},[34,74299,74300],{"class":205},"    \u002F\u002F   uname: '华晨宇',\n",[34,74302,74303],{"class":36,"line":34029},[34,74304,74305],{"class":205},"    \u002F\u002F   age: 22,\n",[34,74307,74308],{"class":36,"line":34035},[34,74309,74310],{"class":205},"    \u002F\u002F   salary: 12000,\n",[34,74312,74313],{"class":36,"line":34041},[34,74314,74315],{"class":205},"    \u002F\u002F   gender: '男',\n",[34,74317,74318],{"class":36,"line":34059},[34,74319,74320],{"class":205},"    \u002F\u002F   city: '北京',\n",[34,74322,74323],{"class":36,"line":34073},[34,74324,74325],{"class":205},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[34,74327,74328],{"class":36,"line":34082},[34,74329,74330],{"class":205},"    \u002F\u002F }]\n",[34,74332,74333],{"class":36,"line":34091},[34,74334,74335],{"class":205},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[34,74337,74338],{"class":36,"line":34100},[34,74339,74340],{"class":205},"    \u002F\u002F 1.渲染业务\n",[34,74342,74343],{"class":36,"line":34109},[34,74344,74345],{"class":205},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[34,74347,74348],{"class":36,"line":34115},[34,74349,74350],{"class":205},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[34,74352,74353],{"class":36,"line":34121},[34,74354,74355],{"class":205},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[34,74357,74358],{"class":36,"line":34129},[34,74359,3053],{"emptyLinePlaceholder":726},[34,74361,74362],{"class":36,"line":34134},[34,74363,74364],{"class":205},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[34,74366,74367],{"class":36,"line":34140},[34,74368,74369],{"class":205},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[34,74371,74372,74374,74376,74378],{"class":36,"line":34151},[34,74373,11874],{"class":87},[34,74375,58338],{"class":63},[34,74377,14217],{"class":87},[34,74379,52484],{"class":40},[34,74381,74382,74385,74387],{"class":36,"line":34157},[34,74383,74384],{"class":40},"    console.",[34,74386,58890],{"class":149},[34,74388,53058],{"class":40},[34,74390,74391],{"class":36,"line":34177},[34,74392,3053],{"emptyLinePlaceholder":726},[34,74394,74395],{"class":36,"line":34183},[34,74396,74397],{"class":205},"    \u002F\u002F 时间函数\n",[34,74399,74400,74402,74405],{"class":36,"line":34189},[34,74401,70719],{"class":87},[34,74403,74404],{"class":149}," getTime",[34,74406,11506],{"class":40},[34,74408,74409,74411,74414,74416,74418,74421],{"class":36,"line":34195},[34,74410,58871],{"class":87},[34,74412,74413],{"class":63}," date",[34,74415,14217],{"class":87},[34,74417,12231],{"class":87},[34,74419,74420],{"class":149}," Date",[34,74422,2629],{"class":40},[34,74424,74425,74427,74429,74431,74434,74437,74439,74441,74443,74446,74449,74451,74453,74455,74457,74459,74461,74463],{"class":36,"line":34212},[34,74426,58871],{"class":87},[34,74428,16743],{"class":63},[34,74430,14217],{"class":87},[34,74432,74433],{"class":40}," date.",[34,74435,74436],{"class":149},"getHours",[34,74438,13703],{"class":40},[34,74440,41],{"class":87},[34,74442,2691],{"class":63},[34,74444,74445],{"class":87}," ?",[34,74447,74448],{"class":156}," '0'",[34,74450,46217],{"class":87},[34,74452,74433],{"class":40},[34,74454,74436],{"class":149},[34,74456,13703],{"class":40},[34,74458,1653],{"class":87},[34,74460,74433],{"class":40},[34,74462,74436],{"class":149},[34,74464,2629],{"class":40},[34,74466,74467,74469,74472,74474,74476,74479,74481,74483,74485,74487,74489,74491,74493,74495,74497,74499,74501,74503],{"class":36,"line":34218},[34,74468,58871],{"class":87},[34,74470,74471],{"class":63}," m",[34,74473,14217],{"class":87},[34,74475,74433],{"class":40},[34,74477,74478],{"class":149},"getMinutes",[34,74480,13703],{"class":40},[34,74482,41],{"class":87},[34,74484,2691],{"class":63},[34,74486,74445],{"class":87},[34,74488,74448],{"class":156},[34,74490,46217],{"class":87},[34,74492,74433],{"class":40},[34,74494,74478],{"class":149},[34,74496,13703],{"class":40},[34,74498,1653],{"class":87},[34,74500,74433],{"class":40},[34,74502,74478],{"class":149},[34,74504,2629],{"class":40},[34,74506,74507,74509,74511,74513,74515,74518,74520,74522,74524,74526,74528,74530,74532,74534,74536,74538,74540,74542],{"class":36,"line":34224},[34,74508,58871],{"class":87},[34,74510,9081],{"class":63},[34,74512,14217],{"class":87},[34,74514,74433],{"class":40},[34,74516,74517],{"class":149},"getSeconds",[34,74519,13703],{"class":40},[34,74521,41],{"class":87},[34,74523,2691],{"class":63},[34,74525,74445],{"class":87},[34,74527,74448],{"class":156},[34,74529,46217],{"class":87},[34,74531,74433],{"class":40},[34,74533,74517],{"class":149},[34,74535,13703],{"class":40},[34,74537,1653],{"class":87},[34,74539,74433],{"class":40},[34,74541,74517],{"class":149},[34,74543,2629],{"class":40},[34,74545,74546,74548,74551,74553,74555,74558,74560,74563,74565,74568,74570,74572,74575,74577,74579,74581,74583,74585,74587,74590,74592,74595,74597,74600,74602,74604,74606],{"class":36,"line":34230},[34,74547,58871],{"class":87},[34,74549,74550],{"class":63}," str",[34,74552,14217],{"class":87},[34,74554,63541],{"class":156},[34,74556,74557],{"class":40},"date",[34,74559,1353],{"class":156},[34,74561,74562],{"class":149},"getFullYear",[34,74564,3080],{"class":156},[34,74566,74567],{"class":156},"}\u002F${",[34,74569,74557],{"class":40},[34,74571,1353],{"class":156},[34,74573,74574],{"class":149},"getMonth",[34,74576,13703],{"class":156},[34,74578,1276],{"class":87},[34,74580,25771],{"class":63},[34,74582,74567],{"class":156},[34,74584,74557],{"class":40},[34,74586,1353],{"class":156},[34,74588,74589],{"class":149},"getDate",[34,74591,3080],{"class":156},[34,74593,74594],{"class":156},"} ${",[34,74596,1210],{"class":40},[34,74598,74599],{"class":156},"}:${",[34,74601,1339],{"class":40},[34,74603,74599],{"class":156},[34,74605,1490],{"class":40},[34,74607,74608],{"class":156},"}`\n",[34,74610,74611,74614],{"class":36,"line":34236},[34,74612,74613],{"class":87},"      return",[34,74615,74616],{"class":40}," str\n",[34,74618,74619],{"class":36,"line":34242},[34,74620,2840],{"class":40},[34,74622,74623],{"class":36,"line":34269},[34,74624,74625],{"class":205},"    \u002F\u002F 渲染函数\n",[34,74627,74628,74630,74632,74634,74636,74638,74640,74642],{"class":36,"line":34293},[34,74629,11874],{"class":87},[34,74631,70382],{"class":63},[34,74633,14217],{"class":87},[34,74635,55041],{"class":40},[34,74637,55044],{"class":149},[34,74639,801],{"class":40},[34,74641,70393],{"class":156},[34,74643,807],{"class":40},[34,74645,74646,74648,74650],{"class":36,"line":34299},[34,74647,70719],{"class":87},[34,74649,70722],{"class":149},[34,74651,11506],{"class":40},[34,74653,74654],{"class":36,"line":34305},[34,74655,74656],{"class":205},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[34,74658,74659],{"class":36,"line":34311},[34,74660,74661],{"class":205},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[34,74663,74664,74666,74669,74671,74673,74676,74678,74680,74682,74685,74687,74690],{"class":36,"line":34322},[34,74665,58871],{"class":87},[34,74667,74668],{"class":63}," trArr",[34,74670,14217],{"class":87},[34,74672,52611],{"class":40},[34,74674,74675],{"class":149},"map",[34,74677,801],{"class":40},[34,74679,55094],{"class":87},[34,74681,2312],{"class":40},[34,74683,74684],{"class":5869},"ele",[34,74686,13088],{"class":40},[34,74688,74689],{"class":5869},"index",[34,74691,13095],{"class":40},[34,74693,74694,74696],{"class":36,"line":34333},[34,74695,15405],{"class":87},[34,74697,70803],{"class":156},[34,74699,74700],{"class":36,"line":34339},[34,74701,74702],{"class":156},"      \u003Ctr>\n",[34,74704,74705,74707,74709,74711,74714],{"class":36,"line":34356},[34,74706,70808],{"class":156},[34,74708,74684],{"class":40},[34,74710,1353],{"class":156},[34,74712,74713],{"class":40},"unameId",[34,74715,70823],{"class":156},[34,74717,74718,74720,74722,74724,74726],{"class":36,"line":34379},[34,74719,70808],{"class":156},[34,74721,74684],{"class":40},[34,74723,1353],{"class":156},[34,74725,70839],{"class":40},[34,74727,70823],{"class":156},[34,74729,74730,74732,74734,74736,74738],{"class":36,"line":34402},[34,74731,70808],{"class":156},[34,74733,74684],{"class":40},[34,74735,1353],{"class":156},[34,74737,70856],{"class":40},[34,74739,70823],{"class":156},[34,74741,74742,74744,74746,74748,74750],{"class":36,"line":34408},[34,74743,70808],{"class":156},[34,74745,74684],{"class":40},[34,74747,1353],{"class":156},[34,74749,70873],{"class":40},[34,74751,70823],{"class":156},[34,74753,74754,74756,74758,74760,74762],{"class":36,"line":34413},[34,74755,70808],{"class":156},[34,74757,74684],{"class":40},[34,74759,1353],{"class":156},[34,74761,70890],{"class":40},[34,74763,70823],{"class":156},[34,74765,74766,74768,74770,74772,74774],{"class":36,"line":34422},[34,74767,70808],{"class":156},[34,74769,74684],{"class":40},[34,74771,1353],{"class":156},[34,74773,70907],{"class":40},[34,74775,70823],{"class":156},[34,74777,74778,74780,74782,74784,74786],{"class":36,"line":34432},[34,74779,70808],{"class":156},[34,74781,74684],{"class":40},[34,74783,1353],{"class":156},[34,74785,3040],{"class":40},[34,74787,70823],{"class":156},[34,74789,74790],{"class":36,"line":34438},[34,74791,74246],{"class":156},[34,74793,74794,74797,74799],{"class":36,"line":34443},[34,74795,74796],{"class":156},"          \u003Ca href=\"#\" data-id=\"${",[34,74798,74689],{"class":40},[34,74800,74801],{"class":156},"}\">删除\u003C\u002Fa>\n",[34,74803,74804],{"class":36,"line":34449},[34,74805,74256],{"class":156},[34,74807,74808],{"class":36,"line":34462},[34,74809,74810],{"class":156},"      \u003C\u002Ftr>\n",[34,74812,74813],{"class":36,"line":34468},[34,74814,74815],{"class":156},"  `\n",[34,74817,74818],{"class":36,"line":34479},[34,74819,65453],{"class":40},[34,74821,74822,74824,74826],{"class":36,"line":34490},[34,74823,58887],{"class":40},[34,74825,58890],{"class":149},[34,74827,74828],{"class":40},"(trArr)\n",[34,74830,74831],{"class":36,"line":34509},[34,74832,3053],{"emptyLinePlaceholder":726},[34,74834,74835],{"class":36,"line":50169},[34,74836,74837],{"class":205},"      \u002F\u002F (2) 把数组转换为字符串join\n",[34,74839,74840],{"class":36,"line":50174},[34,74841,74842],{"class":205},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[34,74844,74845,74847,74849,74852,74855,74857,74860],{"class":36,"line":50183},[34,74846,70734],{"class":40},[34,74848,153],{"class":87},[34,74850,74851],{"class":40}," trArr.",[34,74853,74854],{"class":149},"join",[34,74856,801],{"class":40},[34,74858,74859],{"class":156},"''",[34,74861,807],{"class":40},[34,74863,74864],{"class":36,"line":50192},[34,74865,74866],{"class":205},"      \u002F\u002F 显示共有几条\n",[34,74868,74869,74871,74873,74875,74878,74881,74883,74885],{"class":36,"line":50197},[34,74870,56414],{"class":40},[34,74872,55044],{"class":149},[34,74874,801],{"class":40},[34,74876,74877],{"class":156},"'.total span'",[34,74879,74880],{"class":40},").innerHTML ",[34,74882,153],{"class":87},[34,74884,52611],{"class":40},[34,74886,56474],{"class":63},[34,74888,74889],{"class":36,"line":50202},[34,74890,2840],{"class":40},[34,74892,74893],{"class":36,"line":50207},[34,74894,74895],{"class":205},"    \u002F\u002F render()\n",[34,74897,74898],{"class":36,"line":50220},[34,74899,3053],{"emptyLinePlaceholder":726},[34,74901,74902],{"class":36,"line":50225},[34,74903,74904],{"class":205},"    \u002F\u002F 获取DOM对象\n",[34,74906,74907,74909,74911,74913,74915,74917,74919,74921],{"class":36,"line":50234},[34,74908,11874],{"class":87},[34,74910,70456],{"class":63},[34,74912,14217],{"class":87},[34,74914,55041],{"class":40},[34,74916,55044],{"class":149},[34,74918,801],{"class":40},[34,74920,70467],{"class":156},[34,74922,807],{"class":40},[34,74924,74925,74927,74929,74931,74933,74935,74937,74939],{"class":36,"line":50243},[34,74926,11874],{"class":87},[34,74928,70283],{"class":63},[34,74930,14217],{"class":87},[34,74932,55041],{"class":40},[34,74934,55044],{"class":149},[34,74936,801],{"class":40},[34,74938,70294],{"class":156},[34,74940,807],{"class":40},[34,74942,74943,74945,74947,74949,74951,74953,74955,74957],{"class":36,"line":50260},[34,74944,11874],{"class":87},[34,74946,16341],{"class":63},[34,74948,14217],{"class":87},[34,74950,55041],{"class":40},[34,74952,55044],{"class":149},[34,74954,801],{"class":40},[34,74956,70313],{"class":156},[34,74958,807],{"class":40},[34,74960,74962,74964,74966,74968,74970,74972,74974,74976],{"class":36,"line":74961},231,[34,74963,11874],{"class":87},[34,74965,70342],{"class":63},[34,74967,14217],{"class":87},[34,74969,55041],{"class":40},[34,74971,55044],{"class":149},[34,74973,801],{"class":40},[34,74975,70353],{"class":156},[34,74977,807],{"class":40},[34,74979,74981,74983,74985,74987,74989,74991,74993,74995],{"class":36,"line":74980},232,[34,74982,11874],{"class":87},[34,74984,70322],{"class":63},[34,74986,14217],{"class":87},[34,74988,55041],{"class":40},[34,74990,55044],{"class":149},[34,74992,801],{"class":40},[34,74994,70333],{"class":156},[34,74996,807],{"class":40},[34,74998,75000,75002,75004,75006,75008,75010,75012,75014],{"class":36,"line":74999},233,[34,75001,11874],{"class":87},[34,75003,70362],{"class":63},[34,75005,14217],{"class":87},[34,75007,55041],{"class":40},[34,75009,55044],{"class":149},[34,75011,801],{"class":40},[34,75013,70373],{"class":156},[34,75015,807],{"class":40},[34,75017,75019],{"class":36,"line":75018},234,[34,75020,3053],{"emptyLinePlaceholder":726},[34,75022,75024],{"class":36,"line":75023},235,[34,75025,75026],{"class":205},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[34,75028,75030,75032,75034,75036,75038,75040,75042,75044,75046],{"class":36,"line":75029},236,[34,75031,70474],{"class":40},[34,75033,58456],{"class":149},[34,75035,801],{"class":40},[34,75037,70481],{"class":156},[34,75039,13088],{"class":40},[34,75041,55094],{"class":87},[34,75043,2312],{"class":40},[34,75045,872],{"class":5869},[34,75047,13095],{"class":40},[34,75049,75051],{"class":36,"line":75050},237,[34,75052,75053],{"class":205},"      \u002F\u002F 禁止浏览器跳转\n",[34,75055,75057,75059,75061],{"class":36,"line":75056},238,[34,75058,70501],{"class":40},[34,75060,70504],{"class":149},[34,75062,2629],{"class":40},[34,75064,75066],{"class":36,"line":75065},239,[34,75067,75068],{"class":205},"      \u002F\u002F 非空判断\n",[34,75070,75072],{"class":36,"line":75071},240,[34,75073,75074],{"class":205},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[34,75076,75078],{"class":36,"line":75077},241,[34,75079,75080],{"class":205},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[34,75082,75084,75086,75088,75090,75093,75095,75098,75101,75103,75105],{"class":36,"line":75083},242,[34,75085,55125],{"class":87},[34,75087,2312],{"class":40},[34,75089,1022],{"class":87},[34,75091,75092],{"class":40},"uname.value ",[34,75094,71988],{"class":87},[34,75096,75097],{"class":87}," !",[34,75099,75100],{"class":40},"age.value ",[34,75102,71988],{"class":87},[34,75104,75097],{"class":87},[34,75106,75107],{"class":40},"salary.value) {\n",[34,75109,75111,75113,75115,75117,75119],{"class":36,"line":75110},243,[34,75112,15405],{"class":87},[34,75114,70575],{"class":149},[34,75116,801],{"class":40},[34,75118,70580],{"class":156},[34,75120,807],{"class":40},[34,75122,75124],{"class":36,"line":75123},244,[34,75125,53044],{"class":40},[34,75127,75129,75131,75133],{"class":36,"line":75128},245,[34,75130,58650],{"class":40},[34,75132,52530],{"class":149},[34,75134,75135],{"class":40},"({\n",[34,75137,75139],{"class":36,"line":75138},246,[34,75140,75141],{"class":205},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[34,75143,75145],{"class":36,"line":75144},247,[34,75146,75147],{"class":205},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[34,75149,75151],{"class":36,"line":75150},248,[34,75152,75153],{"class":205},"        \u002F\u002F 对象的序号应为数组长度+1\n",[34,75155,75157],{"class":36,"line":75156},249,[34,75158,75159],{"class":205},"        \u002F\u002F unameId: arr.length + 1,\n",[34,75161,75163],{"class":36,"line":75162},250,[34,75164,3053],{"emptyLinePlaceholder":726},[34,75166,75168],{"class":36,"line":75167},251,[34,75169,75170],{"class":205},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[34,75172,75174],{"class":36,"line":75173},252,[34,75175,75176],{"class":205},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[34,75178,75180],{"class":36,"line":75179},253,[34,75181,75182],{"class":205},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[34,75184,75186],{"class":36,"line":75185},254,[34,75187,75188],{"class":205},"        \u002F\u002F 0当假看\n",[34,75190,75192,75195,75197,75199,75202,75204,75206,75208,75211,75213,75215,75218,75220],{"class":36,"line":75191},255,[34,75193,75194],{"class":40},"        unameId: arr.",[34,75196,52614],{"class":63},[34,75198,74445],{"class":87},[34,75200,75201],{"class":40}," arr[arr.",[34,75203,52614],{"class":63},[34,75205,52917],{"class":87},[34,75207,25771],{"class":63},[34,75209,75210],{"class":40},"].unameId ",[34,75212,1276],{"class":87},[34,75214,25771],{"class":63},[34,75216,75217],{"class":87}," :",[34,75219,25771],{"class":63},[34,75221,32117],{"class":40},[34,75223,75225],{"class":36,"line":75224},256,[34,75226,70628],{"class":40},[34,75228,75230],{"class":36,"line":75229},257,[34,75231,70633],{"class":40},[34,75233,75235],{"class":36,"line":75234},258,[34,75236,70643],{"class":40},[34,75238,75240],{"class":36,"line":75239},259,[34,75241,70638],{"class":40},[34,75243,75245],{"class":36,"line":75244},260,[34,75246,75247],{"class":40},"        city: city.value,\n",[34,75249,75251],{"class":36,"line":75250},261,[34,75252,75253],{"class":205},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[34,75255,75257],{"class":36,"line":75256},262,[34,75258,75259],{"class":205},"        \u002F\u002F time: new Date().toDateString()\n",[34,75261,75263,75266,75269],{"class":36,"line":75262},263,[34,75264,75265],{"class":40},"        time: ",[34,75267,75268],{"class":149},"getTime",[34,75270,2629],{"class":40},[34,75272,75274],{"class":36,"line":75273},264,[34,75275,65453],{"class":40},[34,75277,75279],{"class":36,"line":75278},265,[34,75280,75281],{"class":205},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[34,75283,75285,75287],{"class":36,"line":75284},266,[34,75286,70703],{"class":149},[34,75288,2629],{"class":40},[34,75290,75292,75294,75296,75298,75300],{"class":36,"line":75291},267,[34,75293,70686],{"class":63},[34,75295,1353],{"class":40},[34,75297,70691],{"class":149},[34,75299,13703],{"class":40},[34,75301,75302],{"class":205},"\u002F\u002F重置表单\n",[34,75304,75306],{"class":36,"line":75305},268,[34,75307,75308],{"class":205},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[34,75310,75312,75315,75317,75319,75322,75324,75326,75328,75330],{"class":36,"line":75311},269,[34,75313,75314],{"class":40},"      localStorage.",[34,75316,72285],{"class":149},[34,75318,801],{"class":40},[34,75320,75321],{"class":156},"'data'",[34,75323,13088],{"class":40},[34,75325,72295],{"class":63},[34,75327,1353],{"class":40},[34,75329,72300],{"class":149},[34,75331,75332],{"class":40},"(arr))\n",[34,75334,75336],{"class":36,"line":75335},270,[34,75337,34112],{"class":40},[34,75339,75341],{"class":36,"line":75340},271,[34,75342,3053],{"emptyLinePlaceholder":726},[34,75344,75346],{"class":36,"line":75345},272,[34,75347,75348],{"class":205},"    \u002F\u002F 3.删除业务\n",[34,75350,75352],{"class":36,"line":75351},273,[34,75353,75354],{"class":205},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[34,75356,75358,75360,75362,75364,75366,75368,75370,75372,75374],{"class":36,"line":75357},274,[34,75359,70976],{"class":40},[34,75361,58456],{"class":149},[34,75363,801],{"class":40},[34,75365,58461],{"class":156},[34,75367,13088],{"class":40},[34,75369,55094],{"class":87},[34,75371,2312],{"class":40},[34,75373,872],{"class":5869},[34,75375,13095],{"class":40},[34,75377,75379],{"class":36,"line":75378},275,[34,75380,75381],{"class":205},"      \u002F\u002F 判断是否点击的是删除按钮\n",[34,75383,75385,75387,75389,75391,75393],{"class":36,"line":75384},276,[34,75386,55125],{"class":87},[34,75388,67672],{"class":40},[34,75390,55131],{"class":87},[34,75392,68894],{"class":156},[34,75394,13095],{"class":40},[34,75396,75398],{"class":36,"line":75397},277,[34,75399,75400],{"class":205},"        \u002F\u002F alert(1)\n",[34,75402,75404],{"class":36,"line":75403},278,[34,75405,75406],{"class":205},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[34,75408,75410],{"class":36,"line":75409},279,[34,75411,75412],{"class":205},"        \u002F\u002F console.log(e.target)\n",[34,75414,75416],{"class":36,"line":75415},280,[34,75417,75418],{"class":205},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[34,75420,75422],{"class":36,"line":75421},281,[34,75423,3053],{"emptyLinePlaceholder":726},[34,75425,75427],{"class":36,"line":75426},282,[34,75428,75429],{"class":205},"        \u002F\u002F 确认框，确然是否真的要删除\n",[34,75431,75433],{"class":36,"line":75432},283,[34,75434,75435],{"class":205},"        \u002F\u002F confirm()为确认框\n",[34,75437,75439],{"class":36,"line":75438},284,[34,75440,75441],{"class":205},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[34,75443,75445,75447,75449,75452,75454,75457],{"class":36,"line":75444},285,[34,75446,3150],{"class":87},[34,75448,2312],{"class":40},[34,75450,75451],{"class":149},"confirm",[34,75453,801],{"class":40},[34,75455,75456],{"class":156},"'您确定要删除这条数据吗？'",[34,75458,75459],{"class":40},")) {\n",[34,75461,75463,75466,75468,75470,75472],{"class":36,"line":75462},286,[34,75464,75465],{"class":40},"          arr.",[34,75467,58653],{"class":149},[34,75469,71029],{"class":40},[34,75471,1013],{"class":63},[34,75473,807],{"class":40},[34,75475,75477],{"class":36,"line":75476},287,[34,75478,75479],{"class":205},"          \u002F\u002F 3.4 重新渲染页面\n",[34,75481,75483,75486],{"class":36,"line":75482},288,[34,75484,75485],{"class":149},"          render",[34,75487,2629],{"class":40},[34,75489,75491],{"class":36,"line":75490},289,[34,75492,75493],{"class":205},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[34,75495,75497,75500,75502,75504,75506,75508,75510,75512,75514],{"class":36,"line":75496},290,[34,75498,75499],{"class":40},"          localStorage.",[34,75501,72285],{"class":149},[34,75503,801],{"class":40},[34,75505,75321],{"class":156},[34,75507,13088],{"class":40},[34,75509,72295],{"class":63},[34,75511,1353],{"class":40},[34,75513,72300],{"class":149},[34,75515,75332],{"class":40},[34,75517,75519],{"class":36,"line":75518},291,[34,75520,3182],{"class":40},[34,75522,75524],{"class":36,"line":75523},292,[34,75525,53044],{"class":40},[34,75527,75529],{"class":36,"line":75528},293,[34,75530,3053],{"emptyLinePlaceholder":726},[34,75532,75534],{"class":36,"line":75533},294,[34,75535,34112],{"class":40},[34,75537,75539],{"class":36,"line":75538},295,[34,75540,3053],{"emptyLinePlaceholder":726},[34,75542,75544,75546,75548],{"class":36,"line":75543},296,[34,75545,53063],{"class":40},[34,75547,52459],{"class":44},[34,75549,48],{"class":40},[34,75551,75553,75555,75557],{"class":36,"line":75552},297,[34,75554,102],{"class":40},[34,75556,52446],{"class":44},[34,75558,48],{"class":40},[34,75560,75562],{"class":36,"line":75561},298,[34,75563,3053],{"emptyLinePlaceholder":726},[34,75565,75567,75569,75571],{"class":36,"line":75566},299,[34,75568,102],{"class":40},[34,75570,51286],{"class":44},[34,75572,48],{"class":40},[14,75574,75576],{"id":75575},"_36-正则表达式","3.6 正则表达式",[108,75578,75579],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[108,75581,75582],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[108,75584,75585],{},"正则表达式的作用：",[1800,75587,75588,75595,75601],{},[755,75589,75590,75591,75594],{},"表单验证（ ",[111,75592,75593],{},"匹配"," ）",[755,75596,75597,75598,75594],{},"过滤敏感词（ ",[111,75599,75600],{},"替换",[755,75602,75603,75604,75594],{},"字符串中提取我们想要的部分（ ",[111,75605,75606],{},"提取",[19,75608,75610],{"id":75609},"_361-语法","3.6.1 语法",[108,75612,75613],{},"正则表达式使用步骤：",[752,75615,75616,75619],{},[755,75617,75618],{},"定义规则",[755,75620,75621],{},"查找是否匹配",[108,75623,75624],{},"正则表达式里边不需要写引号",[108,75626,75627],{},[2122,75628],{"alt":29,"src":75629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[108,75631,75632],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[108,75634,75635],{},"reg.test(str)",[108,75637,75638],{},[2122,75639],{"alt":29,"src":75640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[108,75642,75643],{},[2122,75644],{"alt":29,"src":75645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[19,75647,75649],{"id":75648},"_362-元字符","3.6.2 元字符",[752,75651,75652,75655,75658,75661,75668],{},[755,75653,75654],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[755,75656,75657],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[755,75659,75660],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[755,75662,75663,75664],{},"正则验证工具：",[520,75665,75666],{"href":75666,"rel":75667},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24517],[755,75669,75670],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22650,75672,75674],{"id":75673},"_3621-边界符","3.6.2.1 边界符",[108,75676,75677],{},[2122,75678],{"alt":29,"src":75679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[108,75681,75682],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[108,75684,75685],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[108,75687,75688],{},"只匹配一次",[108,75690,75691],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22650,75693,75695],{"id":75694},"_3622-量词","3.6.2.2 量词",[108,75697,75698],{},[2122,75699],{"alt":29,"src":75700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[108,75702,75703],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22650,75705,75707],{"id":75706},"_3623-元字符","3.6.2.3 元字符",[108,75709,75710],{},[2122,75711],{"alt":29,"src":75712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[108,75714,75715],{},"匹配的是a或b或c []只选一个",[108,75717,75718],{},[2122,75719],{"alt":29,"src":75720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[108,75722,75723],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[108,75725,75726],{},[2122,75727],{"alt":29,"src":75728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[108,75730,75731],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[108,75733,75734],{},[2122,75735],{"alt":29,"src":75736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[24,75738,75740],{"className":51284,"code":75739,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,75741,75742,75752,75766,75770,75778,75792,75812,75824,75832,75836,75844,75852,75857,75888,75915,75943,75947,75952,75980,76011,76016,76021,76052,76084,76116,76120,76125,76156,76186,76216,76220,76225,76256,76287,76317,76347,76351,76356,76389,76393,76398,76429,76460,76464,76469,76500,76530,76561,76565,76570,76602,76633,76664,76691,76722,76754,76787,76818,76849,76881,76912,76920,76928,76932],{"__ignoreMap":29},[34,75743,75744,75746,75748,75750],{"class":36,"line":37},[34,75745,51948],{"class":40},[34,75747,51951],{"class":44},[34,75749,51954],{"class":149},[34,75751,48],{"class":40},[34,75753,75754,75756,75758,75760,75762,75764],{"class":36,"line":51},[34,75755,41],{"class":40},[34,75757,51286],{"class":44},[34,75759,51965],{"class":149},[34,75761,153],{"class":40},[34,75763,51970],{"class":156},[34,75765,48],{"class":40},[34,75767,75768],{"class":36,"line":60},[34,75769,3053],{"emptyLinePlaceholder":726},[34,75771,75772,75774,75776],{"class":36,"line":76},[34,75773,41],{"class":40},[34,75775,51983],{"class":44},[34,75777,48],{"class":40},[34,75779,75780,75782,75784,75786,75788,75790],{"class":36,"line":93},[34,75781,52790],{"class":40},[34,75783,51993],{"class":44},[34,75785,51996],{"class":149},[34,75787,153],{"class":40},[34,75789,52001],{"class":156},[34,75791,48],{"class":40},[34,75793,75794,75796,75798,75800,75802,75804,75806,75808,75810],{"class":36,"line":99},[34,75795,52790],{"class":40},[34,75797,51993],{"class":44},[34,75799,15573],{"class":149},[34,75801,153],{"class":40},[34,75803,52040],{"class":156},[34,75805,52020],{"class":149},[34,75807,153],{"class":40},[34,75809,52047],{"class":156},[34,75811,48],{"class":40},[34,75813,75814,75816,75818,75820,75822],{"class":36,"line":353},[34,75815,52790],{"class":40},[34,75817,52056],{"class":44},[34,75819,52059],{"class":40},[34,75821,52056],{"class":44},[34,75823,48],{"class":40},[34,75825,75826,75828,75830],{"class":36,"line":359},[34,75827,102],{"class":40},[34,75829,51983],{"class":44},[34,75831,48],{"class":40},[34,75833,75834],{"class":36,"line":579},[34,75835,3053],{"emptyLinePlaceholder":726},[34,75837,75838,75840,75842],{"class":36,"line":589},[34,75839,41],{"class":40},[34,75841,52446],{"class":44},[34,75843,48],{"class":40},[34,75845,75846,75848,75850],{"class":36,"line":601},[34,75847,52790],{"class":40},[34,75849,52459],{"class":44},[34,75851,48],{"class":40},[34,75853,75854],{"class":36,"line":613},[34,75855,75856],{"class":205},"    \u002F\u002F 元字符中\n",[34,75858,75859,75861,75863,75865,75867,75870,75872,75874,75877,75879,75882,75885],{"class":36,"line":618},[34,75860,74384],{"class":40},[34,75862,58890],{"class":149},[34,75864,801],{"class":40},[34,75866,1379],{"class":156},[34,75868,75869],{"class":48628},"哈",[34,75871,1379],{"class":156},[34,75873,1353],{"class":40},[34,75875,75876],{"class":149},"test",[34,75878,801],{"class":40},[34,75880,75881],{"class":156},"'哈'",[34,75883,75884],{"class":40},"))  ",[34,75886,75887],{"class":205},"\u002F\u002Ftrue\n",[34,75889,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75911,75913],{"class":36,"line":628},[34,75891,74384],{"class":40},[34,75893,58890],{"class":149},[34,75895,801],{"class":40},[34,75897,1379],{"class":156},[34,75899,75869],{"class":48628},[34,75901,1379],{"class":156},[34,75903,1353],{"class":40},[34,75905,75876],{"class":149},[34,75907,801],{"class":40},[34,75909,75910],{"class":156},"'哈哈'",[34,75912,75884],{"class":40},[34,75914,75887],{"class":205},[34,75916,75917,75919,75921,75923,75925,75927,75929,75931,75933,75935,75938,75941],{"class":36,"line":640},[34,75918,74384],{"class":40},[34,75920,58890],{"class":149},[34,75922,801],{"class":40},[34,75924,1379],{"class":156},[34,75926,75869],{"class":48628},[34,75928,1379],{"class":156},[34,75930,1353],{"class":40},[34,75932,75876],{"class":149},[34,75934,801],{"class":40},[34,75936,75937],{"class":156},"'二哈'",[34,75939,75940],{"class":40},"))   ",[34,75942,75887],{"class":205},[34,75944,75945],{"class":36,"line":2301},[34,75946,3053],{"emptyLinePlaceholder":726},[34,75948,75949],{"class":36,"line":2307},[34,75950,75951],{"class":205},"    \u002F\u002F 1.边界符\n",[34,75953,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978],{"class":36,"line":2328},[34,75955,74384],{"class":40},[34,75957,58890],{"class":149},[34,75959,801],{"class":40},[34,75961,1379],{"class":156},[34,75963,1759],{"class":87},[34,75965,75869],{"class":48628},[34,75967,1379],{"class":156},[34,75969,1353],{"class":40},[34,75971,75876],{"class":149},[34,75973,801],{"class":40},[34,75975,75881],{"class":156},[34,75977,75884],{"class":40},[34,75979,75887],{"class":205},[34,75981,75982,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008],{"class":36,"line":2333},[34,75983,74384],{"class":40},[34,75985,58890],{"class":149},[34,75987,801],{"class":40},[34,75989,1379],{"class":156},[34,75991,1759],{"class":87},[34,75993,75869],{"class":48628},[34,75995,1097],{"class":87},[34,75997,1379],{"class":156},[34,75999,1353],{"class":40},[34,76001,75876],{"class":149},[34,76003,801],{"class":40},[34,76005,75910],{"class":156},[34,76007,75884],{"class":40},[34,76009,76010],{"class":205},"\u002F\u002Ffalse\n",[34,76012,76013],{"class":36,"line":2347},[34,76014,76015],{"class":205},"    \u002F\u002F 2.量词\n",[34,76017,76018],{"class":36,"line":2352},[34,76019,76020],{"class":205},"    \u002F\u002F 量词 * 类似于 >= 0\n",[34,76022,76023,76025,76027,76029,76031,76033,76035,76038,76040,76042,76044,76046,76048,76050],{"class":36,"line":2381},[34,76024,74384],{"class":40},[34,76026,58890],{"class":149},[34,76028,801],{"class":40},[34,76030,1379],{"class":156},[34,76032,1759],{"class":87},[34,76034,75869],{"class":48628},[34,76036,76037],{"class":87},"*$",[34,76039,1379],{"class":156},[34,76041,1353],{"class":40},[34,76043,75876],{"class":149},[34,76045,801],{"class":40},[34,76047,75910],{"class":156},[34,76049,75884],{"class":40},[34,76051,75887],{"class":205},[34,76053,76054,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76079,76081],{"class":36,"line":2386},[34,76055,74384],{"class":40},[34,76057,58890],{"class":149},[34,76059,801],{"class":40},[34,76061,1379],{"class":156},[34,76063,1759],{"class":87},[34,76065,75869],{"class":48628},[34,76067,76037],{"class":87},[34,76069,1379],{"class":156},[34,76071,1353],{"class":40},[34,76073,75876],{"class":149},[34,76075,801],{"class":40},[34,76077,76078],{"class":156},"'二哈好傻'",[34,76080,75884],{"class":40},[34,76082,76083],{"class":205},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[34,76085,76086,76088,76090,76092,76094,76096,76098,76100,76102,76104,76106,76108,76111,76113],{"class":36,"line":2403},[34,76087,74384],{"class":40},[34,76089,58890],{"class":149},[34,76091,801],{"class":40},[34,76093,1379],{"class":156},[34,76095,1759],{"class":87},[34,76097,75869],{"class":48628},[34,76099,76037],{"class":87},[34,76101,1379],{"class":156},[34,76103,1353],{"class":40},[34,76105,75876],{"class":149},[34,76107,801],{"class":40},[34,76109,76110],{"class":156},"'哈好哈'",[34,76112,75940],{"class":40},[34,76114,76115],{"class":205},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[34,76117,76118],{"class":36,"line":2408},[34,76119,3053],{"emptyLinePlaceholder":726},[34,76121,76122],{"class":36,"line":2413},[34,76123,76124],{"class":205},"    \u002F\u002F +类似于>=1\n",[34,76126,76127,76129,76131,76133,76135,76137,76139,76142,76144,76146,76148,76150,76152,76154],{"class":36,"line":2418},[34,76128,74384],{"class":40},[34,76130,58890],{"class":149},[34,76132,801],{"class":40},[34,76134,1379],{"class":156},[34,76136,1759],{"class":87},[34,76138,75869],{"class":48628},[34,76140,76141],{"class":87},"+$",[34,76143,1379],{"class":156},[34,76145,1353],{"class":40},[34,76147,75876],{"class":149},[34,76149,801],{"class":40},[34,76151,75910],{"class":156},[34,76153,75884],{"class":40},[34,76155,75887],{"class":205},[34,76157,76158,76160,76162,76164,76166,76168,76170,76172,76174,76176,76178,76180,76182,76184],{"class":36,"line":2432},[34,76159,74384],{"class":40},[34,76161,58890],{"class":149},[34,76163,801],{"class":40},[34,76165,1379],{"class":156},[34,76167,1759],{"class":87},[34,76169,75869],{"class":48628},[34,76171,76141],{"class":87},[34,76173,1379],{"class":156},[34,76175,1353],{"class":40},[34,76177,75876],{"class":149},[34,76179,801],{"class":40},[34,76181,76078],{"class":156},[34,76183,75884],{"class":40},[34,76185,76083],{"class":205},[34,76187,76188,76190,76192,76194,76196,76198,76200,76202,76204,76206,76208,76210,76212,76214],{"class":36,"line":2437},[34,76189,74384],{"class":40},[34,76191,58890],{"class":149},[34,76193,801],{"class":40},[34,76195,1379],{"class":156},[34,76197,1759],{"class":87},[34,76199,75869],{"class":48628},[34,76201,76141],{"class":87},[34,76203,1379],{"class":156},[34,76205,1353],{"class":40},[34,76207,75876],{"class":149},[34,76209,801],{"class":40},[34,76211,76110],{"class":156},[34,76213,75940],{"class":40},[34,76215,76010],{"class":205},[34,76217,76218],{"class":36,"line":3230},[34,76219,3053],{"emptyLinePlaceholder":726},[34,76221,76222],{"class":36,"line":3244},[34,76223,76224],{"class":205},"    \u002F\u002F ?类似于0次或一次\n",[34,76226,76227,76229,76231,76233,76235,76237,76240,76242,76244,76246,76248,76250,76252,76254],{"class":36,"line":3252},[34,76228,74384],{"class":40},[34,76230,58890],{"class":149},[34,76232,801],{"class":40},[34,76234,1379],{"class":156},[34,76236,1759],{"class":87},[34,76238,76239],{"class":48628},"哈？",[34,76241,1097],{"class":87},[34,76243,1379],{"class":156},[34,76245,1353],{"class":40},[34,76247,75876],{"class":149},[34,76249,801],{"class":40},[34,76251,74859],{"class":156},[34,76253,75940],{"class":40},[34,76255,75887],{"class":205},[34,76257,76258,76260,76262,76264,76266,76268,76270,76273,76275,76277,76279,76281,76283,76285],{"class":36,"line":3257},[34,76259,74384],{"class":40},[34,76261,58890],{"class":149},[34,76263,801],{"class":40},[34,76265,1379],{"class":156},[34,76267,1759],{"class":87},[34,76269,75869],{"class":48628},[34,76271,76272],{"class":87},"?$",[34,76274,1379],{"class":156},[34,76276,1353],{"class":40},[34,76278,75876],{"class":149},[34,76280,801],{"class":40},[34,76282,75910],{"class":156},[34,76284,75884],{"class":40},[34,76286,76010],{"class":205},[34,76288,76289,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76311,76313,76315],{"class":36,"line":3263},[34,76290,74384],{"class":40},[34,76292,58890],{"class":149},[34,76294,801],{"class":40},[34,76296,1379],{"class":156},[34,76298,1759],{"class":87},[34,76300,75869],{"class":48628},[34,76302,76272],{"class":87},[34,76304,1379],{"class":156},[34,76306,1353],{"class":40},[34,76308,75876],{"class":149},[34,76310,801],{"class":40},[34,76312,76078],{"class":156},[34,76314,75884],{"class":40},[34,76316,76083],{"class":205},[34,76318,76319,76321,76323,76325,76327,76329,76331,76333,76335,76337,76339,76341,76343,76345],{"class":36,"line":3269},[34,76320,74384],{"class":40},[34,76322,58890],{"class":149},[34,76324,801],{"class":40},[34,76326,1379],{"class":156},[34,76328,1759],{"class":87},[34,76330,75869],{"class":48628},[34,76332,76272],{"class":87},[34,76334,1379],{"class":156},[34,76336,1353],{"class":40},[34,76338,75876],{"class":149},[34,76340,801],{"class":40},[34,76342,76110],{"class":156},[34,76344,75884],{"class":40},[34,76346,76010],{"class":205},[34,76348,76349],{"class":36,"line":3274},[34,76350,3053],{"emptyLinePlaceholder":726},[34,76352,76353],{"class":36,"line":8601},[34,76354,76355],{"class":205},"    \u002F\u002F {n}写几，就必须出现几次\n",[34,76357,76358,76360,76362,76364,76366,76368,76370,76373,76375,76377,76379,76381,76384,76387],{"class":36,"line":8625},[34,76359,74384],{"class":40},[34,76361,58890],{"class":149},[34,76363,801],{"class":40},[34,76365,1379],{"class":156},[34,76367,1759],{"class":87},[34,76369,75869],{"class":48628},[34,76371,76372],{"class":87},"{4}$",[34,76374,1379],{"class":156},[34,76376,1353],{"class":40},[34,76378,75876],{"class":149},[34,76380,801],{"class":40},[34,76382,76383],{"class":156},"'哈哈哈哈'",[34,76385,76386],{"class":40},")) ",[34,76388,75887],{"class":205},[34,76390,76391],{"class":36,"line":8630},[34,76392,3053],{"emptyLinePlaceholder":726},[34,76394,76395],{"class":36,"line":8636},[34,76396,76397],{"class":205},"    \u002F\u002F {n,}大于等于n次\n",[34,76399,76400,76402,76404,76406,76408,76410,76412,76415,76417,76419,76421,76423,76425,76427],{"class":36,"line":8663},[34,76401,74384],{"class":40},[34,76403,58890],{"class":149},[34,76405,801],{"class":40},[34,76407,1379],{"class":156},[34,76409,1759],{"class":87},[34,76411,75869],{"class":48628},[34,76413,76414],{"class":87},"{4,}$",[34,76416,1379],{"class":156},[34,76418,1353],{"class":40},[34,76420,75876],{"class":149},[34,76422,801],{"class":40},[34,76424,76383],{"class":156},[34,76426,76386],{"class":40},[34,76428,75887],{"class":205},[34,76430,76431,76433,76435,76437,76439,76441,76443,76445,76447,76449,76451,76453,76456,76458],{"class":36,"line":8668},[34,76432,74384],{"class":40},[34,76434,58890],{"class":149},[34,76436,801],{"class":40},[34,76438,1379],{"class":156},[34,76440,1759],{"class":87},[34,76442,75869],{"class":48628},[34,76444,76414],{"class":87},[34,76446,1379],{"class":156},[34,76448,1353],{"class":40},[34,76450,75876],{"class":149},[34,76452,801],{"class":40},[34,76454,76455],{"class":156},"'哈哈哈哈哈'",[34,76457,76386],{"class":40},[34,76459,75887],{"class":205},[34,76461,76462],{"class":36,"line":8674},[34,76463,3053],{"emptyLinePlaceholder":726},[34,76465,76466],{"class":36,"line":8686},[34,76467,76468],{"class":205},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[34,76470,76471,76473,76475,76477,76479,76481,76483,76486,76488,76490,76492,76494,76496,76498],{"class":36,"line":8698},[34,76472,74384],{"class":40},[34,76474,58890],{"class":149},[34,76476,801],{"class":40},[34,76478,1379],{"class":156},[34,76480,1759],{"class":87},[34,76482,75869],{"class":48628},[34,76484,76485],{"class":87},"{4,6}$",[34,76487,1379],{"class":156},[34,76489,1353],{"class":40},[34,76491,75876],{"class":149},[34,76493,801],{"class":40},[34,76495,76383],{"class":156},[34,76497,76386],{"class":40},[34,76499,75887],{"class":205},[34,76501,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522,76524,76526,76528],{"class":36,"line":8710},[34,76503,74384],{"class":40},[34,76505,58890],{"class":149},[34,76507,801],{"class":40},[34,76509,1379],{"class":156},[34,76511,1759],{"class":87},[34,76513,75869],{"class":48628},[34,76515,76485],{"class":87},[34,76517,1379],{"class":156},[34,76519,1353],{"class":40},[34,76521,75876],{"class":149},[34,76523,801],{"class":40},[34,76525,76455],{"class":156},[34,76527,76386],{"class":40},[34,76529,75887],{"class":205},[34,76531,76532,76534,76536,76538,76540,76542,76544,76546,76548,76550,76552,76554,76557,76559],{"class":36,"line":10369},[34,76533,74384],{"class":40},[34,76535,58890],{"class":149},[34,76537,801],{"class":40},[34,76539,1379],{"class":156},[34,76541,1759],{"class":87},[34,76543,75869],{"class":48628},[34,76545,76485],{"class":87},[34,76547,1379],{"class":156},[34,76549,1353],{"class":40},[34,76551,75876],{"class":149},[34,76553,801],{"class":40},[34,76555,76556],{"class":156},"'哈哈哈哈哈哈哈'",[34,76558,76386],{"class":40},[34,76560,76010],{"class":205},[34,76562,76563],{"class":36,"line":10394},[34,76564,3053],{"emptyLinePlaceholder":726},[34,76566,76567],{"class":36,"line":10417},[34,76568,76569],{"class":205},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[34,76571,76572,76574,76576,76578,76580,76582,76585,76587,76589,76591,76593,76595,76598,76600],{"class":36,"line":10441},[34,76573,74384],{"class":40},[34,76575,58890],{"class":149},[34,76577,801],{"class":40},[34,76579,1379],{"class":156},[34,76581,1759],{"class":87},[34,76583,76584],{"class":63},"[abc]",[34,76586,1097],{"class":87},[34,76588,1379],{"class":156},[34,76590,1353],{"class":40},[34,76592,75876],{"class":149},[34,76594,801],{"class":40},[34,76596,76597],{"class":156},"'a'",[34,76599,75884],{"class":40},[34,76601,75887],{"class":205},[34,76603,76604,76606,76608,76610,76612,76614,76616,76618,76620,76622,76624,76626,76629,76631],{"class":36,"line":10446},[34,76605,74384],{"class":40},[34,76607,58890],{"class":149},[34,76609,801],{"class":40},[34,76611,1379],{"class":156},[34,76613,1759],{"class":87},[34,76615,76584],{"class":63},[34,76617,1097],{"class":87},[34,76619,1379],{"class":156},[34,76621,1353],{"class":40},[34,76623,75876],{"class":149},[34,76625,801],{"class":40},[34,76627,76628],{"class":156},"'b'",[34,76630,75884],{"class":40},[34,76632,75887],{"class":205},[34,76634,76635,76637,76639,76641,76643,76645,76647,76649,76651,76653,76655,76657,76660,76662],{"class":36,"line":10451},[34,76636,74384],{"class":40},[34,76638,58890],{"class":149},[34,76640,801],{"class":40},[34,76642,1379],{"class":156},[34,76644,1759],{"class":87},[34,76646,76584],{"class":63},[34,76648,1097],{"class":87},[34,76650,1379],{"class":156},[34,76652,1353],{"class":40},[34,76654,75876],{"class":149},[34,76656,801],{"class":40},[34,76658,76659],{"class":156},"'c'",[34,76661,75884],{"class":40},[34,76663,75887],{"class":205},[34,76665,76666,76668,76670,76672,76674,76676,76678,76680,76682,76684,76687,76689],{"class":36,"line":10456},[34,76667,74384],{"class":40},[34,76669,58890],{"class":149},[34,76671,801],{"class":40},[34,76673,1379],{"class":156},[34,76675,76584],{"class":63},[34,76677,1379],{"class":156},[34,76679,1353],{"class":40},[34,76681,75876],{"class":149},[34,76683,801],{"class":40},[34,76685,76686],{"class":156},"'ab'",[34,76688,75884],{"class":40},[34,76690,75887],{"class":205},[34,76692,76693,76695,76697,76699,76701,76703,76705,76707,76709,76711,76713,76715,76717,76719],{"class":36,"line":10465},[34,76694,74384],{"class":40},[34,76696,58890],{"class":149},[34,76698,801],{"class":40},[34,76700,1379],{"class":156},[34,76702,1759],{"class":87},[34,76704,76584],{"class":63},[34,76706,1097],{"class":87},[34,76708,1379],{"class":156},[34,76710,1353],{"class":40},[34,76712,75876],{"class":149},[34,76714,801],{"class":40},[34,76716,76686],{"class":156},[34,76718,75884],{"class":40},[34,76720,76721],{"class":205},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[34,76723,76724,76726,76728,76730,76732,76734,76736,76739,76741,76743,76745,76747,76749,76751],{"class":36,"line":10470},[34,76725,74384],{"class":40},[34,76727,58890],{"class":149},[34,76729,801],{"class":40},[34,76731,1379],{"class":156},[34,76733,1759],{"class":87},[34,76735,76584],{"class":63},[34,76737,76738],{"class":87},"{2}$",[34,76740,1379],{"class":156},[34,76742,1353],{"class":40},[34,76744,75876],{"class":149},[34,76746,801],{"class":40},[34,76748,76686],{"class":156},[34,76750,75884],{"class":40},[34,76752,76753],{"class":205},"\u002F\u002Ftrue   可以选两个\n",[34,76755,76756,76758,76760,76762,76764,76766,76769,76771,76773,76775,76777,76779,76782,76784],{"class":36,"line":10476},[34,76757,74384],{"class":40},[34,76759,58890],{"class":149},[34,76761,801],{"class":40},[34,76763,1379],{"class":156},[34,76765,1759],{"class":87},[34,76767,76768],{"class":63},"[a-z]",[34,76770,1097],{"class":87},[34,76772,1379],{"class":156},[34,76774,1353],{"class":40},[34,76776,75876],{"class":149},[34,76778,801],{"class":40},[34,76780,76781],{"class":156},"'p'",[34,76783,75940],{"class":40},[34,76785,76786],{"class":205},"\u002F\u002Ftrue   依然只能选一个\n",[34,76788,76789,76791,76793,76795,76797,76799,76802,76804,76806,76808,76810,76812,76814,76816],{"class":36,"line":10497},[34,76790,74384],{"class":40},[34,76792,58890],{"class":149},[34,76794,801],{"class":40},[34,76796,1379],{"class":156},[34,76798,1759],{"class":87},[34,76800,76801],{"class":63},"[A-Z]",[34,76803,1097],{"class":87},[34,76805,1379],{"class":156},[34,76807,1353],{"class":40},[34,76809,75876],{"class":149},[34,76811,801],{"class":40},[34,76813,76781],{"class":156},[34,76815,75940],{"class":40},[34,76817,76010],{"class":205},[34,76819,76820,76822,76824,76826,76828,76830,76832,76834,76836,76838,76840,76842,76845,76847],{"class":36,"line":10503},[34,76821,74384],{"class":40},[34,76823,58890],{"class":149},[34,76825,801],{"class":40},[34,76827,1379],{"class":156},[34,76829,1759],{"class":87},[34,76831,76801],{"class":63},[34,76833,1097],{"class":87},[34,76835,1379],{"class":156},[34,76837,1353],{"class":40},[34,76839,75876],{"class":149},[34,76841,801],{"class":40},[34,76843,76844],{"class":156},"'P'",[34,76846,75940],{"class":40},[34,76848,75887],{"class":205},[34,76850,76851,76853,76855,76857,76859,76861,76864,76866,76868,76870,76872,76874,76877,76879],{"class":36,"line":10517},[34,76852,74384],{"class":40},[34,76854,58890],{"class":149},[34,76856,801],{"class":40},[34,76858,1379],{"class":156},[34,76860,1759],{"class":87},[34,76862,76863],{"class":63},"[0-9]",[34,76865,1097],{"class":87},[34,76867,1379],{"class":156},[34,76869,1353],{"class":40},[34,76871,75876],{"class":149},[34,76873,801],{"class":40},[34,76875,76876],{"class":156},"'0'",[34,76878,75940],{"class":40},[34,76880,75887],{"class":205},[34,76882,76883,76885,76887,76889,76891,76893,76896,76898,76900,76902,76904,76906,76908,76910],{"class":36,"line":10523},[34,76884,74384],{"class":40},[34,76886,58890],{"class":149},[34,76888,801],{"class":40},[34,76890,1379],{"class":156},[34,76892,1759],{"class":87},[34,76894,76895],{"class":63},"[a-zA-Z0-9]",[34,76897,1097],{"class":87},[34,76899,1379],{"class":156},[34,76901,1353],{"class":40},[34,76903,75876],{"class":149},[34,76905,801],{"class":40},[34,76907,76781],{"class":156},[34,76909,75884],{"class":40},[34,76911,75887],{"class":205},[34,76913,76914,76916,76918],{"class":36,"line":10550},[34,76915,53063],{"class":40},[34,76917,52459],{"class":44},[34,76919,48],{"class":40},[34,76921,76922,76924,76926],{"class":36,"line":10559},[34,76923,102],{"class":40},[34,76925,52446],{"class":44},[34,76927,48],{"class":40},[34,76929,76930],{"class":36,"line":10565},[34,76931,3053],{"emptyLinePlaceholder":726},[34,76933,76934,76936,76938],{"class":36,"line":10573},[34,76935,102],{"class":40},[34,76937,51286],{"class":44},[34,76939,48],{"class":40},[22650,76941,76943],{"id":76942},"_3624-修饰符","3.6.2.4 修饰符",[108,76945,76946],{},[2122,76947],{"alt":29,"src":76948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[108,76950,76951],{},"replace是个方法，使用的时候一定不要忘记括号()",[108,76953,76954],{},[2122,76955],{"alt":29,"src":76956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[24,76958,76960],{"className":51284,"code":76959,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[31,76961,76962,76972,76986,76994,77008,77028,77040,77048,77056,77064,77096,77127,77132,77164,77175,77208,77217,77225,77233],{"__ignoreMap":29},[34,76963,76964,76966,76968,76970],{"class":36,"line":37},[34,76965,51948],{"class":40},[34,76967,51951],{"class":44},[34,76969,51954],{"class":149},[34,76971,48],{"class":40},[34,76973,76974,76976,76978,76980,76982,76984],{"class":36,"line":51},[34,76975,41],{"class":40},[34,76977,51286],{"class":44},[34,76979,51965],{"class":149},[34,76981,153],{"class":40},[34,76983,51970],{"class":156},[34,76985,48],{"class":40},[34,76987,76988,76990,76992],{"class":36,"line":60},[34,76989,41],{"class":40},[34,76991,51983],{"class":44},[34,76993,48],{"class":40},[34,76995,76996,76998,77000,77002,77004,77006],{"class":36,"line":76},[34,76997,52790],{"class":40},[34,76999,51993],{"class":44},[34,77001,51996],{"class":149},[34,77003,153],{"class":40},[34,77005,52001],{"class":156},[34,77007,48],{"class":40},[34,77009,77010,77012,77014,77016,77018,77020,77022,77024,77026],{"class":36,"line":93},[34,77011,52790],{"class":40},[34,77013,51993],{"class":44},[34,77015,15573],{"class":149},[34,77017,153],{"class":40},[34,77019,52040],{"class":156},[34,77021,52020],{"class":149},[34,77023,153],{"class":40},[34,77025,52047],{"class":156},[34,77027,48],{"class":40},[34,77029,77030,77032,77034,77036,77038],{"class":36,"line":99},[34,77031,52790],{"class":40},[34,77033,52056],{"class":44},[34,77035,52059],{"class":40},[34,77037,52056],{"class":44},[34,77039,48],{"class":40},[34,77041,77042,77044,77046],{"class":36,"line":353},[34,77043,102],{"class":40},[34,77045,51983],{"class":44},[34,77047,48],{"class":40},[34,77049,77050,77052,77054],{"class":36,"line":359},[34,77051,41],{"class":40},[34,77053,52446],{"class":44},[34,77055,48],{"class":40},[34,77057,77058,77060,77062],{"class":36,"line":579},[34,77059,52790],{"class":40},[34,77061,52459],{"class":44},[34,77063,48],{"class":40},[34,77065,77066,77068,77070,77072,77074,77076,77079,77081,77083,77085,77087,77089,77092,77094],{"class":36,"line":589},[34,77067,74384],{"class":40},[34,77069,58890],{"class":149},[34,77071,801],{"class":40},[34,77073,1379],{"class":156},[34,77075,1759],{"class":87},[34,77077,77078],{"class":48628},"java",[34,77080,1097],{"class":87},[34,77082,1379],{"class":156},[34,77084,1353],{"class":40},[34,77086,75876],{"class":149},[34,77088,801],{"class":40},[34,77090,77091],{"class":156},"'java'",[34,77093,76386],{"class":40},[34,77095,75887],{"class":205},[34,77097,77098,77100,77102,77104,77106,77108,77110,77112,77114,77116,77118,77120,77123,77125],{"class":36,"line":601},[34,77099,74384],{"class":40},[34,77101,58890],{"class":149},[34,77103,801],{"class":40},[34,77105,1379],{"class":156},[34,77107,1759],{"class":87},[34,77109,77078],{"class":48628},[34,77111,1097],{"class":87},[34,77113,1379],{"class":156},[34,77115,1353],{"class":40},[34,77117,75876],{"class":149},[34,77119,801],{"class":40},[34,77121,77122],{"class":156},"'Java'",[34,77124,76386],{"class":40},[34,77126,76010],{"class":205},[34,77128,77129],{"class":36,"line":613},[34,77130,77131],{"class":205},"    \u002F\u002F 不区分大小写、\n",[34,77133,77134,77136,77138,77140,77142,77144,77146,77148,77150,77152,77154,77156,77158,77160,77162],{"class":36,"line":618},[34,77135,74384],{"class":40},[34,77137,58890],{"class":149},[34,77139,801],{"class":40},[34,77141,1379],{"class":156},[34,77143,1759],{"class":87},[34,77145,77078],{"class":48628},[34,77147,1097],{"class":87},[34,77149,1379],{"class":156},[34,77151,1236],{"class":87},[34,77153,1353],{"class":40},[34,77155,75876],{"class":149},[34,77157,801],{"class":40},[34,77159,77122],{"class":156},[34,77161,76386],{"class":40},[34,77163,75887],{"class":205},[34,77165,77166,77168,77170,77172],{"class":36,"line":628},[34,77167,11874],{"class":87},[34,77169,74550],{"class":63},[34,77171,14217],{"class":87},[34,77173,77174],{"class":156}," 'java是一门编程语言，学完java工资很高'\n",[34,77176,77177,77179,77182,77184,77187,77190,77192,77194,77196,77198,77201,77203,77206],{"class":36,"line":640},[34,77178,11874],{"class":87},[34,77180,77181],{"class":63}," result",[34,77183,14217],{"class":87},[34,77185,77186],{"class":40}," str.",[34,77188,77189],{"class":149},"replace",[34,77191,801],{"class":40},[34,77193,1379],{"class":156},[34,77195,77078],{"class":48628},[34,77197,1379],{"class":156},[34,77199,77200],{"class":87},"ig",[34,77202,13088],{"class":40},[34,77204,77205],{"class":156},"'前端'",[34,77207,807],{"class":40},[34,77209,77210,77212,77214],{"class":36,"line":2301},[34,77211,74384],{"class":40},[34,77213,58890],{"class":149},[34,77215,77216],{"class":40},"(result)\n",[34,77218,77219,77221,77223],{"class":36,"line":2307},[34,77220,53063],{"class":40},[34,77222,52459],{"class":44},[34,77224,48],{"class":40},[34,77226,77227,77229,77231],{"class":36,"line":2328},[34,77228,102],{"class":40},[34,77230,52446],{"class":44},[34,77232,48],{"class":40},[34,77234,77235,77237,77239],{"class":36,"line":2333},[34,77236,102],{"class":40},[34,77238,51286],{"class":44},[34,77240,48],{"class":40},[45,77242,77243],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":29,"searchDepth":51,"depth":51,"links":77245},[77246,77256,77268,77285,77292,77300],{"id":54006,"depth":51,"text":54007,"children":77247},[77248,77249,77250,77251,77252,77253,77254,77255],{"id":54010,"depth":60,"text":54011},{"id":54043,"depth":60,"text":54044},{"id":54082,"depth":60,"text":54083},{"id":54240,"depth":60,"text":54241},{"id":54288,"depth":60,"text":54289},{"id":54425,"depth":60,"text":54426},{"id":54746,"depth":60,"text":54747},{"id":57732,"depth":60,"text":57733},{"id":57760,"depth":51,"text":57761,"children":77257},[77258,77259,77260,77261,77262,77263,77264,77265,77266,77267],{"id":57764,"depth":60,"text":57765},{"id":57787,"depth":60,"text":57788},{"id":58702,"depth":60,"text":58703},{"id":59392,"depth":60,"text":59393},{"id":59674,"depth":60,"text":59675},{"id":63830,"depth":60,"text":63831},{"id":64000,"depth":60,"text":64001},{"id":64128,"depth":60,"text":64129},{"id":64153,"depth":60,"text":64154},{"id":65542,"depth":60,"text":65543},{"id":66695,"depth":51,"text":66696,"children":77269},[77270,77271,77272,77273,77274,77275,77276,77277,77278,77279,77280,77281,77282,77283,77284],{"id":66699,"depth":60,"text":66700},{"id":67353,"depth":60,"text":67354},{"id":69048,"depth":60,"text":69049},{"id":69089,"depth":60,"text":69090},{"id":69131,"depth":60,"text":69132},{"id":69145,"depth":60,"text":69146},{"id":69194,"depth":60,"text":69195},{"id":69206,"depth":60,"text":69207},{"id":69221,"depth":60,"text":69222},{"id":69257,"depth":60,"text":69258},{"id":69338,"depth":60,"text":69339},{"id":69466,"depth":60,"text":69467},{"id":69478,"depth":60,"text":69479},{"id":69497,"depth":60,"text":69498},{"id":71601,"depth":60,"text":71602},{"id":71620,"depth":51,"text":71621,"children":77286},[77287,77288,77289,77290,77291],{"id":71641,"depth":60,"text":71642},{"id":71661,"depth":60,"text":71662},{"id":71710,"depth":60,"text":71711},{"id":71835,"depth":60,"text":71836},{"id":72016,"depth":60,"text":72017},{"id":72034,"depth":51,"text":72035,"children":77293},[77294,77295,77296,77297,77298,77299],{"id":72049,"depth":60,"text":72050},{"id":72108,"depth":60,"text":72109},{"id":72132,"depth":60,"text":72133},{"id":72452,"depth":60,"text":72453},{"id":72484,"depth":60,"text":72485},{"id":72507,"depth":60,"text":72508},{"id":75575,"depth":51,"text":75576,"children":77301},[77302,77303],{"id":75609,"depth":60,"text":75610},{"id":75648,"depth":60,"text":75649},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53978,"description":723},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77310,"title":77311,"body":77312,"description":723,"extension":724,"meta":93448,"navigation":726,"path":93449,"seo":93450,"stem":93451,"__hash__":93452},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77313,"toc":93384},[77314,77317,77320,77324,77328,77333,77338,77349,77353,77358,77361,77365,77368,77373,77377,77381,77384,77389,77392,77396,77399,77407,77410,77414,77419,77424,77427,77431,77436,77441,77444,77448,77453,77456,77461,77464,77469,77472,77477,77482,77485,77488,77492,77497,77502,77505,77509,77513,77516,77519,77522,77526,77530,77535,77540,77543,77547,77552,77557,77560,77563,77566,77569,77572,77575,77578,77581,77584,77589,77593,77598,77603,77606,77609,77612,77615,77618,77621,77624,77627,77631,77635,77638,77641,77644,77649,77651,77654,77657,77660,77663,77666,77669,77672,77675,77678,77681,77684,77687,77690,77695,77700,77705,77708,77712,77715,77720,77724,77726,77737,77742,77843,77846,77849,77852,77855,77857,77860,77863,77866,77868,77871,77874,77877,77880,77883,77885,77888,77891,77894,77897,77900,77903,77905,77908,77910,77912,77915,77919,77923,77926,77929,77932,77935,77938,77941,77944,77947,77950,77955,78075,78078,78081,78086,78089,78092,78095,78098,78103,78106,78109,78112,78115,78120,78123,78223,78288,78362,78366,78369,78372,78376,78379,78393,78422,78425,78428,78431,78434,78437,78440,78443,78445,78448,78451,78454,78457,78461,78466,78470,78475,78550,78553,78736,78739,78742,78745,78748,78751,78753,78756,78759,78762,78765,78768,78771,78773,78777,78780,78785,78788,78791,78794,78797,78799,78804,78807,78810,78813,78816,78818,78823,78826,78829,78831,78833,78836,78840,78843,78846,78851,78854,78857,78860,78910,78915,78919,78924,78927,78996,78999,79008,79012,79017,79020,79023,79031,79034,79051,80853,80857,80861,80866,80869,80873,80879,80885,81037,81042,81047,81050,81053,81056,81059,81062,81065,81068,81071,81074,81077,81080,81083,81088,81092,81095,81106,81110,81115,81118,81121,81124,81127,81130,81132,81135,81138,81141,81144,81146,81163,81166,81170,81173,81178,81183,81186,81189,81193,81196,81199,81208,81211,81215,81218,81223,81228,81295,81299,81302,81305,81310,81315,81401,81406,81410,81413,81416,81431,81434,81439,81443,81448,81557,81560,81571,81721,81725,81730,81839,81843,81848,81853,81858,81861,81868,81888,81924,82088,82093,82096,82101,82108,82111,82114,82117,82176,82232,82288,82292,82297,82612,82615,82619,82622,82627,82736,82741,82745,82750,82754,82825,82829,82831,82834,82837,82875,83151,83155,83172,83238,83272,83276,83279,83284,83313,83320,83329,83334,83349,83354,83363,83366,83503,83507,83569,83573,83578,83823,83827,83832,83835,83838,83841,83844,83848,83853,85434,85438,85442,85448,85451,85456,85460,85463,85468,85471,85482,85486,85491,85495,85500,85505,85508,85513,85517,85521,85524,85529,85534,85537,85540,85543,85665,85670,85772,85775,85778,85782,85787,85959,85964,85968,85971,85976,86042,86047,86050,86181,86184,86189,86192,86195,86286,86291,86294,86297,86300,86303,86308,86313,86316,86321,86326,86331,86335,86338,86341,86346,86351,86356,86361,86415,86418,86421,86426,86429,86432,86437,86442,86447,86451,86456,86470,86475,86478,86483,86487,86492,86497,86502,86507,86512,86517,86522,86527,86530,86534,86539,86542,86545,86548,86553,86558,86561,86564,86568,86571,86574,86579,86584,86589,86594,86597,86602,86607,86668,86673,86676,86681,87922,87927,87931,87935,87940,87943,87948,87953,87956,87961,87963,87968,87972,87975,87978,87989,87993,87998,88003,88058,88063,88068,88073,88284,88289,88293,88298,88301,88303,88306,88309,88756,88761,88768,88774,88777,88780,89044,89049,89053,89318,89323,89327,89332,89337,89342,89347,89678,89681,89686,89691,89694,89698,89702,89707,89712,89717,89722,89727,89732,89736,89739,89744,89749,89752,89826,89831,89836,89841,89843,89846,90216,90221,90226,90231,90234,90237,90339,90344,90349,90452,90456,90461,90465,90469,90474,90479,90482,90487,90490,90493,90886,90891,90894,90897,90900,90903,91423,91427,91432,91437,91442,91445,91450,91453,91456,91838,91843,91845,91847,91850,91853,92365,92369,92430,92433,92436,92439,92443,92446,92451,92456,93381],[10,77315,77311],{"id":77316},"_4js进阶",[108,77318,77319],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77321,77323],{"id":77322},"_41-作用域","4.1 作用域",[19,77325,77327],{"id":77326},"_411-局部作用域","4.1.1 局部作用域",[108,77329,77330],{},[2122,77331],{"alt":29,"src":77332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[108,77334,77335],{},[2122,77336],{"alt":29,"src":77337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1800,77339,77340,77343,77346],{},[755,77341,77342],{},"函数作用域在函数内部",[755,77344,77345],{},"块级作用域在{}",[755,77347,77348],{},"对象的那个{}不是作用域，不是块作用域",[19,77350,77352],{"id":77351},"_412-全局作用域","4.1.2 全局作用域",[108,77354,77355],{},[2122,77356],{"alt":29,"src":77357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[108,77359,77360],{},"window.a=10不要这样写",[19,77362,77364],{"id":77363},"_413-作用域链","4.1.3 作用域链",[108,77366,77367],{},"变量查找机制",[108,77369,77370],{},[2122,77371],{"alt":29,"src":77372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77374,77376],{"id":77375},"_42-垃圾回收机制","4.2 垃圾回收机制",[19,77378,77380],{"id":77379},"_421-大体介绍","4.2.1 大体介绍",[108,77382,77383],{},"垃圾回收机制(Garbage Collection) 简称 GC",[108,77385,77386],{},[2122,77387],{"alt":29,"src":77388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[108,77390,77391],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[19,77393,77395],{"id":77394},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[108,77397,77398],{},"堆栈空间分配区别：",[752,77400,77401,77404],{},[755,77402,77403],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[755,77405,77406],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[108,77408,77409],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22650,77411,77413],{"id":77412},"_4221-引用计数","4.2.2.1 引用计数",[108,77415,77416],{},[2122,77417],{"alt":29,"src":77418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[108,77420,77421],{},[2122,77422],{"alt":29,"src":77423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[108,77425,77426],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22650,77428,77430],{"id":77429},"_4222-标记清除法","4.2.2.2 标记清除法",[108,77432,77433],{},[2122,77434],{"alt":29,"src":77435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[108,77437,77438],{},[2122,77439],{"alt":29,"src":77440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[108,77442,77443],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77445,77447],{"id":77446},"_43-闭包","4.3 闭包",[108,77449,77450],{},[2122,77451],{"alt":29,"src":77452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[108,77454,77455],{},"闭包：内层函数+外层函数的变量",[108,77457,77458],{},[2122,77459],{"alt":29,"src":77460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[108,77462,77463],{},"closure就是闭包",[108,77465,77466],{},[2122,77467],{"alt":29,"src":77468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[108,77470,77471],{},"内层函数必须包含外层函数的变量才是闭包",[108,77473,77474],{},[2122,77475],{"alt":29,"src":77476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[108,77478,77479],{},[2122,77480],{"alt":29,"src":77481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[108,77483,77484],{},"闭包可能会引起内存泄漏",[108,77486,77487],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77489,77491],{"id":77490},"_44-变量提升","4.4 变量提升",[108,77493,77494],{},[2122,77495],{"alt":29,"src":77496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[108,77498,77499],{},[2122,77500],{"alt":29,"src":77501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[108,77503,77504],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77506,77508],{"id":77507},"_45-函数进阶","4.5 函数进阶",[19,77510,77512],{"id":77511},"_451-函数提升","4.5.1 函数提升",[108,77514,77515],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[108,77517,77518],{},"只提升函数声明，不提升函数调用",[52459,77520,77521],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[19,77523,77525],{"id":77524},"_452-函数参数","4.5.2 函数参数",[22650,77527,77529],{"id":77528},"_4521-动态参数","4.5.2.1 动态参数",[108,77531,77532],{},[2122,77533],{"alt":29,"src":77534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[108,77536,77537],{},[2122,77538],{"alt":29,"src":77539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[108,77541,77542],{},"箭头函数里边没有arguments",[22650,77544,77546],{"id":77545},"_4522-剩余参数","4.5.2.2 剩余参数",[108,77548,77549],{},[2122,77550],{"alt":29,"src":77551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[108,77553,77554],{},[2122,77555],{"alt":29,"src":77556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[108,77558,77559],{},"剩余参数使用的时候不需要写...",[108,77561,77562],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[108,77564,77565],{},"  function getSum(a,b,...arr) {",[108,77567,77568],{},"  console.log(11)",[108,77570,77571],{},"  }",[108,77573,77574],{},"  getSum(1,2,3,4)",[108,77576,77577],{},"  将1传给a，2传给b，剩下的传给剩余参数",[108,77579,77580],{},"  getSum(1,2)",[108,77582,77583],{},"  将1传给a，2传给b，剩余参数为一个空数组",[108,77585,77586],{},[2122,77587],{"alt":29,"src":77588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22650,77590,77592],{"id":77591},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[108,77594,77595],{},[2122,77596],{"alt":29,"src":77597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[108,77599,77600],{},[2122,77601],{"alt":29,"src":77602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[108,77604,77605],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[108,77607,77608],{},"展开运算符可以用于数组之间的合并：",[108,77610,77611],{},"const arr1 = [1, 2, 3]",[108,77613,77614],{},"const arr2 = [3, 4, 5]",[108,77616,77617],{},"const arr = [...arr1, ...arr2]",[108,77619,77620],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[108,77622,77623],{},"剩余参数：函数参数使用，得到真数组",[108,77625,77626],{},"展开运算符：数组中使用，数组展开",[19,77628,77630],{"id":77629},"_453-箭头函数","4.5.3 箭头函数",[22650,77632,77634],{"id":77633},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[108,77636,77637],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[108,77639,77640],{},"它不是万能的！！！",[108,77642,77643],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[108,77645,77646],{},[2122,77647],{"alt":29,"src":77648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[108,77650,830],{},[108,77652,77653],{},"① 只有一个形参的时候，可以省略小括号：",[108,77655,77656],{},"const fn=x=>{console.log(x)}",[108,77658,77659],{},"② 只有一行代码时可以省略大括号：",[108,77661,77662],{},"const fn=x=>console.log(11)",[108,77664,77665],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[108,77667,77668],{},"const fn=x=>x+x",[108,77670,77671],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[108,77673,77674],{},"⑤ 阻止表单默认提交：",[108,77676,77677],{},"const form = document.querySelector('form')",[108,77679,77680],{},"form.addEventListener('click', ev => ev.preventDefault())",[108,77682,77683],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[108,77685,77686],{},"const fn=uname=>({uname:uname})",[108,77688,77689],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[108,77691,77692],{},[2122,77693],{"alt":29,"src":77694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[108,77696,77697],{},[2122,77698],{"alt":29,"src":77699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[108,77701,77702],{},[2122,77703],{"alt":29,"src":77704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[108,77706,77707],{},"一定不要忘记用()，有()就理解为自带return",[22650,77709,77711],{"id":77710},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[108,77713,77714],{},"箭头函数是没有动态参数的arguments",[108,77716,77717],{},[2122,77718],{"alt":29,"src":77719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22650,77721,77723],{"id":77722},"_4533-箭头函数this","4.5.3.3 箭头函数this",[108,77725,11985],{},[752,77727,77728,77731,77734],{},[755,77729,77730],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[755,77732,77733],{},"事件回调函数使用箭头函数时，this 为全局的 window",[755,77735,77736],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[108,77738,77739],{},[2122,77740],{"alt":29,"src":77741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[24,77743,77745],{"className":53713,"code":77744,"language":53715,"meta":29,"style":29},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[31,77746,77747,77755,77760,77765,77770,77775,77780,77784,77789,77793,77797,77802,77807,77812,77816,77820,77825,77830,77835],{"__ignoreMap":29},[34,77748,77749,77751,77753],{"class":36,"line":37},[34,77750,52790],{"class":40},[34,77752,52459],{"class":44},[34,77754,48],{"class":40},[34,77756,77757],{"class":36,"line":51},[34,77758,77759],{"class":40},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[34,77761,77762],{"class":36,"line":60},[34,77763,77764],{"class":40},"    console.log(this) \u002F\u002F指向window\n",[34,77766,77767],{"class":36,"line":76},[34,77768,77769],{"class":40},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[34,77771,77772],{"class":36,"line":93},[34,77773,77774],{"class":40},"    function fn() {\n",[34,77776,77777],{"class":36,"line":99},[34,77778,77779],{"class":40},"      console.log(this)  \u002F\u002F指向window\n",[34,77781,77782],{"class":36,"line":353},[34,77783,2840],{"class":40},[34,77785,77786],{"class":36,"line":359},[34,77787,77788],{"class":40},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[34,77790,77791],{"class":36,"line":579},[34,77792,3053],{"emptyLinePlaceholder":726},[34,77794,77795],{"class":36,"line":589},[34,77796,72154],{"class":40},[34,77798,77799],{"class":36,"line":601},[34,77800,77801],{"class":40},"      name: 'andy',\n",[34,77803,77804],{"class":36,"line":613},[34,77805,77806],{"class":40},"      sayHai: function () {\n",[34,77808,77809],{"class":36,"line":618},[34,77810,77811],{"class":40},"        console.log(this)\n",[34,77813,77814],{"class":36,"line":628},[34,77815,53044],{"class":40},[34,77817,77818],{"class":36,"line":640},[34,77819,2840],{"class":40},[34,77821,77822],{"class":36,"line":2301},[34,77823,77824],{"class":40},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[34,77826,77827],{"class":36,"line":2307},[34,77828,77829],{"class":40},"    \u002F\u002F 2.箭头函数的this\n",[34,77831,77832],{"class":36,"line":2328},[34,77833,77834],{"class":40},"    const fn = () => console.log(this)\n",[34,77836,77837,77839,77841],{"class":36,"line":2333},[34,77838,53063],{"class":40},[34,77840,52459],{"class":44},[34,77842,48],{"class":40},[108,77844,77845],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[108,77847,77848],{},"const fn = () => console.log(this)",[108,77850,77851],{},"fn() \u002F\u002F指向window",[108,77853,77854],{},"\u002F\u002F 3.对象方法箭头函数 this",[108,77856,117],{},[108,77858,77859],{},"const obj = {",[108,77861,77862],{},"uname: 'pink老师',",[108,77864,77865],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[108,77867,1739],{},[108,77869,77870],{},"调用对象里边的函数",[108,77872,77873],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[108,77875,77876],{},"obj.sayHai()",[108,77878,77879],{},"②",[108,77881,77882],{},"const obj1 = {",[108,77884,77862],{},[108,77886,77887],{},"sayHai: function () {",[108,77889,77890],{},"let i = 10",[108,77892,77893],{},"const count = () => {",[108,77895,77896],{},"console.log(this)",[108,77898,77899],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[108,77901,77902],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[108,77904,1739],{},[108,77906,77907],{},"count()",[108,77909,1739],{},[108,77911,1739],{},[108,77913,77914],{},"obj1.sayHai()",[14,77916,77918],{"id":77917},"_46-解构赋值","4.6 解构赋值",[19,77920,77922],{"id":77921},"_461-数组解构","4.6.1 数组解构",[108,77924,77925],{},"以前要是使用数组中的值的话：",[108,77927,77928],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[108,77930,77931],{},"const arr=[100,60,80]",[108,77933,77934],{},"const max=arr[0]",[108,77936,77937],{},"const min=arr[1]",[108,77939,77940],{},"const avg=arr[2]",[108,77942,77943],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[108,77945,77946],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[108,77948,77949],{},"这个写法就类似于上边的那种用很多const的方法",[108,77951,77952],{},[2122,77953],{"alt":29,"src":77954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[24,77956,77958],{"className":51284,"code":77957,"language":51286,"meta":29,"style":29},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[31,77959,77960,77965,77970,77975,77980,77985,77989,77993,77998,78002,78007,78012,78016,78021,78026,78037,78047,78052,78057,78062,78066,78070],{"__ignoreMap":29},[34,77961,77962],{"class":36,"line":37},[34,77963,77964],{"class":40},"①变量之间交换值:\n",[34,77966,77967],{"class":36,"line":51},[34,77968,77969],{"class":40},"let a=1\n",[34,77971,77972],{"class":36,"line":60},[34,77973,77974],{"class":40},"let b=2;\n",[34,77976,77977],{"class":36,"line":76},[34,77978,77979],{"class":40},"必须加这行代码，不然就会报错\n",[34,77981,77982],{"class":36,"line":93},[34,77983,77984],{"class":40},"[b,a]=[a,b]\n",[34,77986,77987],{"class":36,"line":99},[34,77988,3053],{"emptyLinePlaceholder":726},[34,77990,77991],{"class":36,"line":353},[34,77992,3053],{"emptyLinePlaceholder":726},[34,77994,77995],{"class":36,"line":359},[34,77996,77997],{"class":40},"可以写成下面的方式：\n",[34,77999,78000],{"class":36,"line":579},[34,78001,77969],{"class":40},[34,78003,78004],{"class":36,"line":589},[34,78005,78006],{"class":40},"let b=2\n",[34,78008,78009],{"class":36,"line":601},[34,78010,78011],{"class":40},";[b,a]=[a,b]\n",[34,78013,78014],{"class":36,"line":613},[34,78015,3053],{"emptyLinePlaceholder":726},[34,78017,78018],{"class":36,"line":618},[34,78019,78020],{"class":40},"②排序\n",[34,78022,78023],{"class":36,"line":628},[34,78024,78025],{"class":40},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[34,78027,78028,78031,78034],{"class":36,"line":640},[34,78029,78030],{"class":40},"for (let i = 0; i ",[34,78032,41],{"class":78033},"s7hpK",[34,78035,78036],{"class":40}," arr1.length; i++) {\n",[34,78038,78039,78042,78044],{"class":36,"line":2301},[34,78040,78041],{"class":40},"   for (let j = 0; j ",[34,78043,41],{"class":78033},[34,78045,78046],{"class":40}," arr1.length - 1; j++) {\n",[34,78048,78049],{"class":36,"line":2307},[34,78050,78051],{"class":40},"      if (arr1[j] > arr1[j + 1]) {\n",[34,78053,78054],{"class":36,"line":2328},[34,78055,78056],{"class":40},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[34,78058,78059],{"class":36,"line":2333},[34,78060,78061],{"class":40},"       }\n",[34,78063,78064],{"class":36,"line":2347},[34,78065,4962],{"class":40},[34,78067,78068],{"class":36,"line":2352},[34,78069,241],{"class":40},[34,78071,78072],{"class":36,"line":2381},[34,78073,78074],{"class":40},"console.log(arr1)\n",[108,78076,78077],{},"数组解构的细节：",[108,78079,78080],{},"①变量多，单元值少",[108,78082,78083],{},[2122,78084],{"alt":29,"src":78085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[108,78087,78088],{},"防止出现undefined的方法：",[108,78090,78091],{},"const [a=0,b=0] =[1]",[108,78093,78094],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[108,78096,78097],{},"②变量少，单元值多",[108,78099,78100],{},[2122,78101],{"alt":29,"src":78102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[108,78104,78105],{},"此时可以使用剩余参数来接收多余的值",[108,78107,78108],{},"const [a,b,...c]=[1,2,3,4]",[108,78110,78111],{},"console.log(c) 输出[3,4]",[108,78113,78114],{},"③可以按需导入，忽略某些返回值",[108,78116,78117],{},[2122,78118],{"alt":29,"src":78119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[108,78121,78122],{},"④支持多维数组的结构",[24,78124,78128],{"className":78125,"code":78126,"language":78127,"meta":29,"style":29},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[31,78129,78130,78158,78174,78189,78204],{"__ignoreMap":29},[34,78131,78132,78134,78136,78138,78140,78142,78144,78146,78149,78151,78153,78155],{"class":36,"line":37},[34,78133,7445],{"class":87},[34,78135,52479],{"class":40},[34,78137,153],{"class":87},[34,78139,52872],{"class":40},[34,78141,1013],{"class":63},[34,78143,13088],{"class":40},[34,78145,875],{"class":63},[34,78147,78148],{"class":40},", [",[34,78150,869],{"class":63},[34,78152,13088],{"class":40},[34,78154,1088],{"class":63},[34,78156,78157],{"class":40},"]]\n",[34,78159,78160,78163,78165,78167,78169,78171],{"class":36,"line":51},[34,78161,78162],{"class":40},"console.",[34,78164,58890],{"class":149},[34,78166,4504],{"class":40},[34,78168,987],{"class":63},[34,78170,4869],{"class":40},[34,78172,78173],{"class":205},"  \u002F\u002F1\n",[34,78175,78176,78178,78180,78182,78184,78186],{"class":36,"line":60},[34,78177,78162],{"class":40},[34,78179,58890],{"class":149},[34,78181,4504],{"class":40},[34,78183,1013],{"class":63},[34,78185,4869],{"class":40},[34,78187,78188],{"class":205},"  \u002F\u002F2\n",[34,78190,78191,78193,78195,78197,78199,78201],{"class":36,"line":76},[34,78192,78162],{"class":40},[34,78194,58890],{"class":149},[34,78196,4504],{"class":40},[34,78198,875],{"class":63},[34,78200,4869],{"class":40},[34,78202,78203],{"class":205},"  \u002F\u002F[3,4]\n",[34,78205,78206,78208,78210,78212,78214,78216,78218,78220],{"class":36,"line":93},[34,78207,78162],{"class":40},[34,78209,58890],{"class":149},[34,78211,4504],{"class":40},[34,78213,875],{"class":63},[34,78215,5554],{"class":40},[34,78217,987],{"class":63},[34,78219,4869],{"class":40},[34,78221,78222],{"class":205},"  \u002F\u002F3\n",[24,78224,78226],{"className":78125,"code":78225,"language":78127,"meta":29,"style":29},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[31,78227,78228,78255,78266,78277],{"__ignoreMap":29},[34,78229,78230,78232,78235,78237,78239,78241,78243,78245,78247,78249,78251,78253],{"class":36,"line":37},[34,78231,7445],{"class":87},[34,78233,78234],{"class":40}," [a, b, c] ",[34,78236,153],{"class":87},[34,78238,52872],{"class":40},[34,78240,1013],{"class":63},[34,78242,13088],{"class":40},[34,78244,875],{"class":63},[34,78246,78148],{"class":40},[34,78248,869],{"class":63},[34,78250,13088],{"class":40},[34,78252,1088],{"class":63},[34,78254,78157],{"class":40},[34,78256,78257,78259,78261,78264],{"class":36,"line":51},[34,78258,78162],{"class":40},[34,78260,58890],{"class":149},[34,78262,78263],{"class":40},"(a)",[34,78265,78173],{"class":205},[34,78267,78268,78270,78272,78275],{"class":36,"line":60},[34,78269,78162],{"class":40},[34,78271,58890],{"class":149},[34,78273,78274],{"class":40},"(b)",[34,78276,78188],{"class":205},[34,78278,78279,78281,78283,78286],{"class":36,"line":76},[34,78280,78162],{"class":40},[34,78282,58890],{"class":149},[34,78284,78285],{"class":40},"(c)",[34,78287,78203],{"class":205},[24,78289,78291],{"className":78125,"code":78290,"language":78127,"meta":29,"style":29},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[31,78292,78293,78320,78330,78340,78350],{"__ignoreMap":29},[34,78294,78295,78297,78300,78302,78304,78306,78308,78310,78312,78314,78316,78318],{"class":36,"line":37},[34,78296,7445],{"class":87},[34,78298,78299],{"class":40}," [a, b, [c, d]] ",[34,78301,153],{"class":87},[34,78303,52872],{"class":40},[34,78305,1013],{"class":63},[34,78307,13088],{"class":40},[34,78309,875],{"class":63},[34,78311,78148],{"class":40},[34,78313,869],{"class":63},[34,78315,13088],{"class":40},[34,78317,1088],{"class":63},[34,78319,78157],{"class":40},[34,78321,78322,78324,78326,78328],{"class":36,"line":51},[34,78323,78162],{"class":40},[34,78325,58890],{"class":149},[34,78327,78263],{"class":40},[34,78329,78173],{"class":205},[34,78331,78332,78334,78336,78338],{"class":36,"line":60},[34,78333,78162],{"class":40},[34,78335,58890],{"class":149},[34,78337,78274],{"class":40},[34,78339,78188],{"class":205},[34,78341,78342,78344,78346,78348],{"class":36,"line":76},[34,78343,78162],{"class":40},[34,78345,58890],{"class":149},[34,78347,78285],{"class":40},[34,78349,78222],{"class":205},[34,78351,78352,78354,78356,78359],{"class":36,"line":93},[34,78353,78162],{"class":40},[34,78355,58890],{"class":149},[34,78357,78358],{"class":40},"(d)",[34,78360,78361],{"class":205},"  \u002F\u002F4\n",[19,78363,78365],{"id":78364},"_462-对象解构","4.6.2 对象解构",[108,78367,78368],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[108,78370,78371],{},"用的非常非常多！！！！！！",[22650,78373,78375],{"id":78374},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[108,78377,78378],{},"基本语法：",[752,78380,78381,78384,78387,78390],{},[755,78382,78383],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[755,78385,78386],{},"对象属性的值将被赋值给与属性名相同的变量",[755,78388,78389],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[755,78391,78392],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[24,78394,78396],{"className":51284,"code":78395,"language":51286,"meta":29,"style":29},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[31,78397,78398,78403,78408,78413,78417],{"__ignoreMap":29},[34,78399,78400],{"class":36,"line":37},[34,78401,78402],{"class":40},"const obj = {\n",[34,78404,78405],{"class":36,"line":51},[34,78406,78407],{"class":40},"   uname: 'pink老师',\n",[34,78409,78410],{"class":36,"line":60},[34,78411,78412],{"class":40},"   age: 18,\n",[34,78414,78415],{"class":36,"line":76},[34,78416,241],{"class":40},[34,78418,78419],{"class":36,"line":93},[34,78420,78421],{"class":40},"const { uname, age } = obj\n",[108,78423,78424],{},"上方代码这样写等价于：",[108,78426,78427],{},"const uname等价于obj.uname",[108,78429,78430],{},"变量名可以重新改名：",[108,78432,78433],{},"const uname='red老师'",[108,78435,78436],{},"const user={",[108,78438,78439],{},"  uname:'pink老师',",[108,78441,78442],{},"  age:18",[108,78444,1739],{},[108,78446,78447],{},"const {uname,age}=user",[108,78449,78450],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[108,78452,78453],{},"const {旧变量名：新变量名}=对象",[108,78455,78456],{},"const {uname:username,age}=user",[22650,78458,78460],{"id":78459},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[108,78462,78463],{},[2122,78464],{"alt":29,"src":78465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22650,78467,78469],{"id":78468},"_4623-多级对象解构","4.6.2.3 多级对象解构",[108,78471,78472],{},[2122,78473],{"alt":29,"src":78474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[24,78476,78478],{"className":53713,"code":78477,"language":53715,"meta":29,"style":29},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[31,78479,78480,78488,78493,78498,78503,78508,78513,78518,78523,78528,78532,78537,78542],{"__ignoreMap":29},[34,78481,78482,78484,78486],{"class":36,"line":37},[34,78483,52790],{"class":40},[34,78485,52459],{"class":44},[34,78487,48],{"class":40},[34,78489,78490],{"class":36,"line":51},[34,78491,78492],{"class":40},"    const pig = {\n",[34,78494,78495],{"class":36,"line":60},[34,78496,78497],{"class":40},"      name: '佩奇',\n",[34,78499,78500],{"class":36,"line":76},[34,78501,78502],{"class":40},"      family: {\n",[34,78504,78505],{"class":36,"line":93},[34,78506,78507],{"class":40},"        mother: '猪妈妈',\n",[34,78509,78510],{"class":36,"line":99},[34,78511,78512],{"class":40},"        father: '猪爸爸',\n",[34,78514,78515],{"class":36,"line":353},[34,78516,78517],{"class":40},"        sister: '乔治'\n",[34,78519,78520],{"class":36,"line":359},[34,78521,78522],{"class":40},"      },\n",[34,78524,78525],{"class":36,"line":579},[34,78526,78527],{"class":40},"      age: 6\n",[34,78529,78530],{"class":36,"line":589},[34,78531,2840],{"class":40},[34,78533,78534],{"class":36,"line":601},[34,78535,78536],{"class":40},"    \u002F\u002F 多级对象解构\n",[34,78538,78539],{"class":36,"line":613},[34,78540,78541],{"class":40},"    const { name, family: { mother, father, sister }, age } = pig\n",[34,78543,78544,78546,78548],{"class":36,"line":618},[34,78545,53063],{"class":40},[34,78547,52459],{"class":44},[34,78549,48],{"class":40},[108,78551,78552],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[24,78554,78557],{"className":78555,"code":78556,"language":77078,"meta":29,"style":29},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[31,78558,78559,78564,78575,78587,78599,78608,78612,78623,78635,78645,78650,78654,78664,78675,78684,78688,78692,78703,78714,78723,78727,78732],{"__ignoreMap":29},[34,78560,78561],{"class":36,"line":37},[34,78562,78563],{"class":205},"    \u002F\u002F 这是后台传递过来的数据\n",[34,78565,78566,78568,78571,78573],{"class":36,"line":51},[34,78567,11874],{"class":87},[34,78569,78570],{"class":40}," msg ",[34,78572,153],{"class":87},[34,78574,57],{"class":40},[34,78576,78577,78580,78582,78585],{"class":36,"line":60},[34,78578,78579],{"class":156},"      \"code\"",[34,78581,1653],{"class":87},[34,78583,78584],{"class":63}," 200",[34,78586,32117],{"class":40},[34,78588,78589,78592,78594,78597],{"class":36,"line":76},[34,78590,78591],{"class":156},"      \"msg\"",[34,78593,1653],{"class":87},[34,78595,78596],{"class":156}," \"获取新闻列表成功\"",[34,78598,32117],{"class":40},[34,78600,78601,78604,78606],{"class":36,"line":93},[34,78602,78603],{"class":156},"      \"data\"",[34,78605,1653],{"class":87},[34,78607,56090],{"class":40},[34,78609,78610],{"class":36,"line":99},[34,78611,3163],{"class":40},[34,78613,78614,78617,78619,78621],{"class":36,"line":353},[34,78615,78616],{"class":156},"          \"id\"",[34,78618,1653],{"class":87},[34,78620,25771],{"class":63},[34,78622,32117],{"class":40},[34,78624,78625,78628,78630,78633],{"class":36,"line":359},[34,78626,78627],{"class":156},"          \"title\"",[34,78629,1653],{"class":87},[34,78631,78632],{"class":156}," \"5G商用自己，三大运用商收入下降\"",[34,78634,32117],{"class":40},[34,78636,78637,78640,78642],{"class":36,"line":579},[34,78638,78639],{"class":156},"          \"count\"",[34,78641,1653],{"class":87},[34,78643,78644],{"class":63}," 58\n",[34,78646,78647],{"class":36,"line":589},[34,78648,78649],{"class":40},"        },\n",[34,78651,78652],{"class":36,"line":601},[34,78653,3163],{"class":40},[34,78655,78656,78658,78660,78662],{"class":36,"line":613},[34,78657,78616],{"class":156},[34,78659,1653],{"class":87},[34,78661,15408],{"class":63},[34,78663,32117],{"class":40},[34,78665,78666,78668,78670,78673],{"class":36,"line":618},[34,78667,78627],{"class":156},[34,78669,1653],{"class":87},[34,78671,78672],{"class":156}," \"国际媒体头条速览\"",[34,78674,32117],{"class":40},[34,78676,78677,78679,78681],{"class":36,"line":628},[34,78678,78639],{"class":156},[34,78680,1653],{"class":87},[34,78682,78683],{"class":63}," 56\n",[34,78685,78686],{"class":36,"line":640},[34,78687,78649],{"class":40},[34,78689,78690],{"class":36,"line":2301},[34,78691,3163],{"class":40},[34,78693,78694,78696,78698,78701],{"class":36,"line":2307},[34,78695,78616],{"class":156},[34,78697,1653],{"class":87},[34,78699,78700],{"class":63}," 3",[34,78702,32117],{"class":40},[34,78704,78705,78707,78709,78712],{"class":36,"line":2328},[34,78706,78627],{"class":156},[34,78708,1653],{"class":87},[34,78710,78711],{"class":156}," \"乌克兰和俄罗斯持续冲突\"",[34,78713,32117],{"class":40},[34,78715,78716,78718,78720],{"class":36,"line":2333},[34,78717,78639],{"class":156},[34,78719,1653],{"class":87},[34,78721,78722],{"class":63}," 1669\n",[34,78724,78725],{"class":36,"line":2347},[34,78726,78649],{"class":40},[34,78728,78729],{"class":36,"line":2352},[34,78730,78731],{"class":40},"      ]\n",[34,78733,78734],{"class":36,"line":2381},[34,78735,2840],{"class":40},[108,78737,78738],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[108,78740,78741],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[108,78743,78744],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[108,78746,78747],{},"function({data}) {",[108,78749,78750],{},"console.log(data)",[108,78752,1739],{},[108,78754,78755],{},"render(msg)",[108,78757,78758],{},"实参传递给形参的时候解构了",[108,78760,78761],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[108,78763,78764],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[108,78766,78767],{},"function render({data:mydata}) {",[108,78769,78770],{},"  console.log(data)",[108,78772,1739],{},[19,78774,78776],{"id":78775},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[108,78778,78779],{},"有两种情况：一个是数组结构，一个是立即执行函数",[752,78781,78782],{},[755,78783,78784],{},"如果对一个数组进行遍历，有两种方式：",[108,78786,78787],{},"①法1",[108,78789,78790],{},"const arr=[1,2,3]",[108,78792,78793],{},"arr.map(function(item,index) {",[108,78795,78796],{},"  console.log(item)",[108,78798,53110],{},[108,78800,78801],{},[2122,78802],{"alt":29,"src":78803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[108,78805,78806],{},"②法2",[108,78808,78809],{},"const str='pink'",[108,78811,78812],{},"[1,2,3].map(function(item,index) {",[108,78814,78815],{},"console.log(item)",[108,78817,53110],{},[108,78819,78820],{},[2122,78821],{"alt":29,"src":78822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[108,78824,78825],{},"此时会报错",[108,78827,78828],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[108,78830,78815],{},[108,78832,53110],{},[108,78834,78835],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78837,78839],{"id":78838},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[108,78841,78842],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[108,78844,78845],{},"可以理解为加强版的for循环",[108,78847,78848],{},[2122,78849],{"alt":29,"src":78850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[108,78852,78853],{},"里边不写return，不返回数组，只遍历不返回",[108,78855,78856],{},"map是返回数组",[108,78858,78859],{},"forEach主要用于遍历数组对象",[24,78861,78863],{"className":53713,"code":78862,"language":53715,"meta":29,"style":29},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[31,78864,78865,78873,78878,78883,78888,78893,78897,78902],{"__ignoreMap":29},[34,78866,78867,78869,78871],{"class":36,"line":37},[34,78868,52790],{"class":40},[34,78870,52459],{"class":44},[34,78872,48],{"class":40},[34,78874,78875],{"class":36,"line":51},[34,78876,78877],{"class":40},"    const arr = ['red', 'green', 'pink']\n",[34,78879,78880],{"class":36,"line":60},[34,78881,78882],{"class":40},"    const result = arr.forEach(function (item, index) {\n",[34,78884,78885],{"class":36,"line":76},[34,78886,78887],{"class":40},"      console.log(item)\n",[34,78889,78890],{"class":36,"line":93},[34,78891,78892],{"class":40},"      console.log(index)\n",[34,78894,78895],{"class":36,"line":99},[34,78896,34112],{"class":40},[34,78898,78899],{"class":36,"line":353},[34,78900,78901],{"class":40},"    console.log(result)\n",[34,78903,78904,78906,78908],{"class":36,"line":359},[34,78905,53063],{"class":40},[34,78907,52459],{"class":44},[34,78909,48],{"class":40},[108,78911,78912],{},[2122,78913],{"alt":29,"src":78914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78916,78918],{"id":78917},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[108,78920,78921],{},[2122,78922],{"alt":29,"src":78923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[108,78925,78926],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[24,78928,78930],{"className":53713,"code":78929,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,78931,78932,78940,78948,78953,78958,78962,78966,78971,78975,78980,78988],{"__ignoreMap":29},[34,78933,78934,78936,78938],{"class":36,"line":37},[34,78935,41],{"class":40},[34,78937,52446],{"class":44},[34,78939,48],{"class":40},[34,78941,78942,78944,78946],{"class":36,"line":51},[34,78943,52790],{"class":40},[34,78945,52459],{"class":44},[34,78947,48],{"class":40},[34,78949,78950],{"class":36,"line":60},[34,78951,78952],{"class":40},"    const arr = [10, 20, 30]\n",[34,78954,78955],{"class":36,"line":76},[34,78956,78957],{"class":40},"    const newArr = arr.filter(function (item, index) {\n",[34,78959,78960],{"class":36,"line":93},[34,78961,78887],{"class":40},[34,78963,78964],{"class":36,"line":99},[34,78965,78892],{"class":40},[34,78967,78968],{"class":36,"line":353},[34,78969,78970],{"class":40},"      return item >= 20\n",[34,78972,78973],{"class":36,"line":359},[34,78974,34112],{"class":40},[34,78976,78977],{"class":36,"line":579},[34,78978,78979],{"class":40},"    console.log(newArr)\n",[34,78981,78982,78984,78986],{"class":36,"line":589},[34,78983,53063],{"class":40},[34,78985,52459],{"class":44},[34,78987,48],{"class":40},[34,78989,78990,78992,78994],{"class":36,"line":601},[34,78991,102],{"class":40},[34,78993,52446],{"class":44},[34,78995,48],{"class":40},[108,78997,78998],{},"这个也可以写成箭头函数：",[24,79000,79002],{"className":51284,"code":79001,"language":51286,"meta":29,"style":29},"const newArr = arr.filter(item => item >= 20)\n",[31,79003,79004],{"__ignoreMap":29},[34,79005,79006],{"class":36,"line":37},[34,79007,79001],{"class":40},[14,79009,79011],{"id":79010},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[108,79013,79014],{},[2122,79015],{"alt":29,"src":79016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[108,79018,79019],{},"步骤：",[108,79021,79022],{},"①：渲染页面模块",[1800,79024,79025,79028],{},[755,79026,79027],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[755,79029,79030],{},"用forEach+字符串的形式",[108,79032,79033],{},"②：点击不同需求，显示不同页面内容",[1800,79035,79036,79039,79042,79045,79048],{},[755,79037,79038],{},"点击采取事件委托方式 .filter",[755,79040,79041],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[755,79043,79044],{},"筛选条件是根据点击的 data-index 来判断",[755,79046,79047],{},"可以使用对象解构，把事件对象解构",[755,79049,79050],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[24,79052,79054],{"className":51284,"code":79053,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,79055,79056,79066,79080,79084,79092,79106,79126,79138,79146,79152,79162,79172,79182,79186,79190,79196,79209,79221,79231,79243,79247,79251,79258,79271,79283,79300,79318,79331,79335,79339,79351,79361,79365,79369,79376,79417,79444,79454,79458,79462,79470,79482,79486,79490,79498,79510,79522,79533,79537,79541,79550,79562,79573,79577,79581,79590,79602,79614,79618,79622,79629,79639,79651,79663,79678,79682,79686,79694,79710,79720,79730,79740,79752,79756,79760,79770,79781,79791,79795,79803,79811,79815,79823,79838,79864,79889,79914,79933,79941,79955,79960,79965,79970,79975,79980,79988,79996,80001,80012,80017,80027,80037,80047,80057,80061,80065,80074,80083,80092,80101,80105,80109,80118,80127,80136,80145,80149,80153,80162,80171,80180,80189,80193,80197,80206,80215,80224,80233,80237,80241,80250,80259,80268,80277,80281,80285,80294,80303,80312,80321,80325,80329,80338,80347,80355,80364,80368,80372,80376,80381,80393,80398,80410,80414,80431,80459,80468,80473,80483,80493,80502,80507,80512,80516,80521,80538,80542,80547,80555,80560,80587,80592,80612,80617,80629,80634,80639,80644,80655,80669,80706,80724,80757,80774,80798,80802,80807,80813,80817,80821,80825,80833,80841,80845],{"__ignoreMap":29},[34,79057,79058,79060,79062,79064],{"class":36,"line":37},[34,79059,51948],{"class":40},[34,79061,51951],{"class":44},[34,79063,51954],{"class":149},[34,79065,48],{"class":40},[34,79067,79068,79070,79072,79074,79076,79078],{"class":36,"line":51},[34,79069,41],{"class":40},[34,79071,51286],{"class":44},[34,79073,51965],{"class":149},[34,79075,153],{"class":40},[34,79077,51970],{"class":156},[34,79079,48],{"class":40},[34,79081,79082],{"class":36,"line":60},[34,79083,3053],{"emptyLinePlaceholder":726},[34,79085,79086,79088,79090],{"class":36,"line":76},[34,79087,41],{"class":40},[34,79089,51983],{"class":44},[34,79091,48],{"class":40},[34,79093,79094,79096,79098,79100,79102,79104],{"class":36,"line":93},[34,79095,52790],{"class":40},[34,79097,51993],{"class":44},[34,79099,51996],{"class":149},[34,79101,153],{"class":40},[34,79103,52001],{"class":156},[34,79105,48],{"class":40},[34,79107,79108,79110,79112,79114,79116,79118,79120,79122,79124],{"class":36,"line":99},[34,79109,52790],{"class":40},[34,79111,51993],{"class":44},[34,79113,15573],{"class":149},[34,79115,153],{"class":40},[34,79117,52040],{"class":156},[34,79119,52020],{"class":149},[34,79121,153],{"class":40},[34,79123,52047],{"class":156},[34,79125,48],{"class":40},[34,79127,79128,79130,79132,79134,79136],{"class":36,"line":353},[34,79129,52790],{"class":40},[34,79131,52056],{"class":44},[34,79133,52059],{"class":40},[34,79135,52056],{"class":44},[34,79137,48],{"class":40},[34,79139,79140,79142,79144],{"class":36,"line":359},[34,79141,52790],{"class":40},[34,79143,45],{"class":44},[34,79145,48],{"class":40},[34,79147,79148,79150],{"class":36,"line":579},[34,79149,7056],{"class":44},[34,79151,57],{"class":40},[34,79153,79154,79156,79158,79160],{"class":36,"line":589},[34,79155,55340],{"class":63},[34,79157,67],{"class":40},[34,79159,987],{"class":63},[34,79161,73],{"class":40},[34,79163,79164,79166,79168,79170],{"class":36,"line":601},[34,79165,55351],{"class":63},[34,79167,67],{"class":40},[34,79169,987],{"class":63},[34,79171,73],{"class":40},[34,79173,79174,79176,79178,79180],{"class":36,"line":613},[34,79175,73227],{"class":63},[34,79177,67],{"class":40},[34,79179,61148],{"class":63},[34,79181,73],{"class":40},[34,79183,79184],{"class":36,"line":618},[34,79185,2840],{"class":40},[34,79187,79188],{"class":36,"line":628},[34,79189,3053],{"emptyLinePlaceholder":726},[34,79191,79192,79194],{"class":36,"line":640},[34,79193,62763],{"class":149},[34,79195,57],{"class":40},[34,79197,79198,79200,79202,79205,79207],{"class":36,"line":2301},[34,79199,55415],{"class":63},[34,79201,67],{"class":40},[34,79203,79204],{"class":63},"990",[34,79206,88],{"class":87},[34,79208,73],{"class":40},[34,79210,79211,79213,79215,79217,79219],{"class":36,"line":2307},[34,79212,55351],{"class":63},[34,79214,67],{"class":40},[34,79216,987],{"class":63},[34,79218,52203],{"class":63},[34,79220,73],{"class":40},[34,79222,79223,79225,79227,79229],{"class":36,"line":2328},[34,79224,55652],{"class":63},[34,79226,67],{"class":40},[34,79228,52125],{"class":63},[34,79230,73],{"class":40},[34,79232,79233,79236,79238,79241],{"class":36,"line":2333},[34,79234,79235],{"class":63},"      flex-wrap",[34,79237,67],{"class":40},[34,79239,79240],{"class":63},"wrap",[34,79242,73],{"class":40},[34,79244,79245],{"class":36,"line":2347},[34,79246,2840],{"class":40},[34,79248,79249],{"class":36,"line":2352},[34,79250,3053],{"emptyLinePlaceholder":726},[34,79252,79253,79256],{"class":36,"line":2381},[34,79254,79255],{"class":149},"    .item",[34,79257,57],{"class":40},[34,79259,79260,79262,79264,79267,79269],{"class":36,"line":2386},[34,79261,55415],{"class":63},[34,79263,67],{"class":40},[34,79265,79266],{"class":63},"240",[34,79268,88],{"class":87},[34,79270,73],{"class":40},[34,79272,79273,79275,79277,79279,79281],{"class":36,"line":2403},[34,79274,62640],{"class":63},[34,79276,67],{"class":40},[34,79278,1241],{"class":63},[34,79280,88],{"class":87},[34,79282,73],{"class":40},[34,79284,79285,79287,79289,79291,79293,79296,79298],{"class":36,"line":2408},[34,79286,55340],{"class":63},[34,79288,67],{"class":40},[34,79290,1495],{"class":63},[34,79292,88],{"class":87},[34,79294,79295],{"class":63}," 30",[34,79297,88],{"class":87},[34,79299,73],{"class":40},[34,79301,79302,79304,79306,79308,79311,79314,79316],{"class":36,"line":2413},[34,79303,62501],{"class":63},[34,79305,67],{"class":40},[34,79307,28772],{"class":63},[34,79309,79310],{"class":63}," ease",[34,79312,79313],{"class":63}," .5",[34,79315,1490],{"class":87},[34,79317,73],{"class":40},[34,79319,79320,79323,79325,79327,79329],{"class":36,"line":2418},[34,79321,79322],{"class":63},"      margin-bottom",[34,79324,67],{"class":40},[34,79326,1495],{"class":63},[34,79328,88],{"class":87},[34,79330,73],{"class":40},[34,79332,79333],{"class":36,"line":2432},[34,79334,2840],{"class":40},[34,79336,79337],{"class":36,"line":2437},[34,79338,3053],{"emptyLinePlaceholder":726},[34,79340,79341,79344,79346,79349],{"class":36,"line":3230},[34,79342,79343],{"class":149},"    .item:nth-child",[34,79345,801],{"class":40},[34,79347,79348],{"class":63},"4n",[34,79350,13095],{"class":40},[34,79352,79353,79355,79357,79359],{"class":36,"line":3244},[34,79354,62640],{"class":63},[34,79356,67],{"class":40},[34,79358,987],{"class":63},[34,79360,73],{"class":40},[34,79362,79363],{"class":36,"line":3252},[34,79364,2840],{"class":40},[34,79366,79367],{"class":36,"line":3257},[34,79368,3053],{"emptyLinePlaceholder":726},[34,79370,79371,79374],{"class":36,"line":3263},[34,79372,79373],{"class":149},"    .item:hover",[34,79375,57],{"class":40},[34,79377,79378,79381,79383,79385,79387,79389,79391,79393,79395,79398,79400,79402,79404,79406,79408,79410,79412,79415],{"class":36,"line":3269},[34,79379,79380],{"class":63},"      box-shadow",[34,79382,67],{"class":40},[34,79384,987],{"class":63},[34,79386,88],{"class":87},[34,79388,4746],{"class":63},[34,79390,88],{"class":87},[34,79392,2801],{"class":63},[34,79394,88],{"class":87},[34,79396,79397],{"class":63}," rgba",[34,79399,801],{"class":40},[34,79401,987],{"class":63},[34,79403,13088],{"class":40},[34,79405,987],{"class":63},[34,79407,13088],{"class":40},[34,79409,987],{"class":63},[34,79411,13088],{"class":40},[34,79413,79414],{"class":63},".2",[34,79416,3372],{"class":40},[34,79418,79419,79422,79424,79427,79429,79431,79433,79436,79438,79440,79442],{"class":36,"line":3274},[34,79420,79421],{"class":63},"      transform",[34,79423,67],{"class":40},[34,79425,79426],{"class":63},"translate3d",[34,79428,801],{"class":40},[34,79430,987],{"class":63},[34,79432,13088],{"class":40},[34,79434,79435],{"class":63},"-4",[34,79437,88],{"class":87},[34,79439,13088],{"class":40},[34,79441,987],{"class":63},[34,79443,3372],{"class":40},[34,79445,79446,79448,79450,79452],{"class":36,"line":8601},[34,79447,62665],{"class":63},[34,79449,67],{"class":40},[34,79451,62670],{"class":63},[34,79453,73],{"class":40},[34,79455,79456],{"class":36,"line":8625},[34,79457,2840],{"class":40},[34,79459,79460],{"class":36,"line":8630},[34,79461,3053],{"emptyLinePlaceholder":726},[34,79463,79464,79466,79468],{"class":36,"line":8636},[34,79465,79255],{"class":149},[34,79467,56258],{"class":44},[34,79469,57],{"class":40},[34,79471,79472,79474,79476,79478,79480],{"class":36,"line":8663},[34,79473,55415],{"class":63},[34,79475,67],{"class":40},[34,79477,1106],{"class":63},[34,79479,1123],{"class":87},[34,79481,73],{"class":40},[34,79483,79484],{"class":36,"line":8668},[34,79485,2840],{"class":40},[34,79487,79488],{"class":36,"line":8674},[34,79489,3053],{"emptyLinePlaceholder":726},[34,79491,79492,79494,79496],{"class":36,"line":8686},[34,79493,79255],{"class":149},[34,79495,62944],{"class":149},[34,79497,57],{"class":40},[34,79499,79500,79502,79504,79506,79508],{"class":36,"line":8698},[34,79501,55565],{"class":63},[34,79503,67],{"class":40},[34,79505,1445],{"class":63},[34,79507,88],{"class":87},[34,79509,73],{"class":40},[34,79511,79512,79514,79516,79518,79520],{"class":36,"line":8710},[34,79513,79322],{"class":63},[34,79515,67],{"class":40},[34,79517,1241],{"class":63},[34,79519,88],{"class":87},[34,79521,73],{"class":40},[34,79523,79524,79526,79528,79531],{"class":36,"line":10369},[34,79525,58059],{"class":63},[34,79527,67],{"class":40},[34,79529,79530],{"class":63},"#666",[34,79532,73],{"class":40},[34,79534,79535],{"class":36,"line":10394},[34,79536,2840],{"class":40},[34,79538,79539],{"class":36,"line":10417},[34,79540,3053],{"emptyLinePlaceholder":726},[34,79542,79543,79545,79548],{"class":36,"line":10441},[34,79544,79255],{"class":149},[34,79546,79547],{"class":149}," .price",[34,79549,57],{"class":40},[34,79551,79552,79554,79556,79558,79560],{"class":36,"line":10446},[34,79553,55565],{"class":63},[34,79555,67],{"class":40},[34,79557,1545],{"class":63},[34,79559,88],{"class":87},[34,79561,73],{"class":40},[34,79563,79564,79566,79568,79571],{"class":36,"line":10451},[34,79565,58059],{"class":63},[34,79567,67],{"class":40},[34,79569,79570],{"class":63},"firebrick",[34,79572,73],{"class":40},[34,79574,79575],{"class":36,"line":10456},[34,79576,2840],{"class":40},[34,79578,79579],{"class":36,"line":10465},[34,79580,3053],{"emptyLinePlaceholder":726},[34,79582,79583,79585,79588],{"class":36,"line":10470},[34,79584,79255],{"class":149},[34,79586,79587],{"class":149}," .price::before",[34,79589,57],{"class":40},[34,79591,79592,79595,79597,79600],{"class":36,"line":10476},[34,79593,79594],{"class":63},"      content",[34,79596,67],{"class":40},[34,79598,79599],{"class":156},"'￥'",[34,79601,73],{"class":40},[34,79603,79604,79606,79608,79610,79612],{"class":36,"line":10497},[34,79605,55565],{"class":63},[34,79607,67],{"class":40},[34,79609,1344],{"class":63},[34,79611,88],{"class":87},[34,79613,73],{"class":40},[34,79615,79616],{"class":36,"line":10503},[34,79617,2840],{"class":40},[34,79619,79620],{"class":36,"line":10517},[34,79621,3053],{"emptyLinePlaceholder":726},[34,79623,79624,79627],{"class":36,"line":10523},[34,79625,79626],{"class":149},"    .filter",[34,79628,57],{"class":40},[34,79630,79631,79633,79635,79637],{"class":36,"line":10550},[34,79632,55652],{"class":63},[34,79634,67],{"class":40},[34,79636,52125],{"class":63},[34,79638,73],{"class":40},[34,79640,79641,79643,79645,79647,79649],{"class":36,"line":10559},[34,79642,55415],{"class":63},[34,79644,67],{"class":40},[34,79646,79204],{"class":63},[34,79648,88],{"class":87},[34,79650,73],{"class":40},[34,79652,79653,79655,79657,79659,79661],{"class":36,"line":10565},[34,79654,55351],{"class":63},[34,79656,67],{"class":40},[34,79658,987],{"class":63},[34,79660,52203],{"class":63},[34,79662,73],{"class":40},[34,79664,79665,79667,79669,79671,79673,79675],{"class":36,"line":10573},[34,79666,55340],{"class":63},[34,79668,67],{"class":40},[34,79670,1451],{"class":63},[34,79672,88],{"class":87},[34,79674,79295],{"class":63},[34,79676,79677],{"class":87},"px\n",[34,79679,79680],{"class":36,"line":10578},[34,79681,2840],{"class":40},[34,79683,79684],{"class":36,"line":17256},[34,79685,3053],{"emptyLinePlaceholder":726},[34,79687,79688,79690,79692],{"class":36,"line":17262},[34,79689,79626],{"class":149},[34,79691,2058],{"class":44},[34,79693,57],{"class":40},[34,79695,79696,79698,79700,79702,79704,79706,79708],{"class":36,"line":17285},[34,79697,55340],{"class":63},[34,79699,67],{"class":40},[34,79701,1241],{"class":63},[34,79703,88],{"class":87},[34,79705,9603],{"class":63},[34,79707,88],{"class":87},[34,79709,73],{"class":40},[34,79711,79712,79714,79716,79718],{"class":36,"line":17291},[34,79713,62362],{"class":63},[34,79715,67],{"class":40},[34,79717,62459],{"class":63},[34,79719,73],{"class":40},[34,79721,79722,79724,79726,79728],{"class":36,"line":17314},[34,79723,58059],{"class":63},[34,79725,67],{"class":40},[34,79727,79530],{"class":63},[34,79729,73],{"class":40},[34,79731,79732,79734,79736,79738],{"class":36,"line":17328},[34,79733,64608],{"class":63},[34,79735,67],{"class":40},[34,79737,546],{"class":63},[34,79739,73],{"class":40},[34,79741,79742,79744,79746,79748,79750],{"class":36,"line":17348},[34,79743,62391],{"class":63},[34,79745,67],{"class":40},[34,79747,1495],{"class":63},[34,79749,88],{"class":87},[34,79751,73],{"class":40},[34,79753,79754],{"class":36,"line":17354},[34,79755,2840],{"class":40},[34,79757,79758],{"class":36,"line":17365},[34,79759,3053],{"emptyLinePlaceholder":726},[34,79761,79762,79764,79766,79768],{"class":36,"line":17388},[34,79763,79626],{"class":149},[34,79765,2058],{"class":44},[34,79767,672],{"class":149},[34,79769,57],{"class":40},[34,79771,79772,79774,79776,79779],{"class":36,"line":17410},[34,79773,55528],{"class":63},[34,79775,67],{"class":40},[34,79777,79778],{"class":63},"#05943c",[34,79780,73],{"class":40},[34,79782,79783,79785,79787,79789],{"class":36,"line":17415},[34,79784,58059],{"class":63},[34,79786,67],{"class":40},[34,79788,61485],{"class":63},[34,79790,73],{"class":40},[34,79792,79793],{"class":36,"line":17421},[34,79794,2840],{"class":40},[34,79796,79797,79799,79801],{"class":36,"line":17435},[34,79798,53063],{"class":40},[34,79800,45],{"class":44},[34,79802,48],{"class":40},[34,79804,79805,79807,79809],{"class":36,"line":17448},[34,79806,102],{"class":40},[34,79808,51983],{"class":44},[34,79810,48],{"class":40},[34,79812,79813],{"class":36,"line":17453},[34,79814,3053],{"emptyLinePlaceholder":726},[34,79816,79817,79819,79821],{"class":36,"line":17467},[34,79818,41],{"class":40},[34,79820,52446],{"class":44},[34,79822,48],{"class":40},[34,79824,79825,79827,79829,79831,79833,79836],{"class":36,"line":17472},[34,79826,52790],{"class":40},[34,79828,52258],{"class":44},[34,79830,54132],{"class":149},[34,79832,153],{"class":40},[34,79834,79835],{"class":156},"\"filter\"",[34,79837,48],{"class":40},[34,79839,79840,79842,79844,79846,79848,79850,79853,79855,79857,79860,79862],{"class":36,"line":17478},[34,79841,51990],{"class":40},[34,79843,520],{"class":44},[34,79845,267],{"class":149},[34,79847,153],{"class":40},[34,79849,61703],{"class":156},[34,79851,79852],{"class":149}," data-index",[34,79854,153],{"class":40},[34,79856,4331],{"class":156},[34,79858,79859],{"class":40},">0-100元\u003C\u002F",[34,79861,520],{"class":44},[34,79863,48],{"class":40},[34,79865,79866,79868,79870,79872,79874,79876,79878,79880,79882,79885,79887],{"class":36,"line":17483},[34,79867,51990],{"class":40},[34,79869,520],{"class":44},[34,79871,267],{"class":149},[34,79873,153],{"class":40},[34,79875,61703],{"class":156},[34,79877,79852],{"class":149},[34,79879,153],{"class":40},[34,79881,4354],{"class":156},[34,79883,79884],{"class":40},">100-300元\u003C\u002F",[34,79886,520],{"class":44},[34,79888,48],{"class":40},[34,79890,79891,79893,79895,79897,79899,79901,79903,79905,79907,79910,79912],{"class":36,"line":17497},[34,79892,51990],{"class":40},[34,79894,520],{"class":44},[34,79896,267],{"class":149},[34,79898,153],{"class":40},[34,79900,61703],{"class":156},[34,79902,79852],{"class":149},[34,79904,153],{"class":40},[34,79906,4367],{"class":156},[34,79908,79909],{"class":40},">300元以上\u003C\u002F",[34,79911,520],{"class":44},[34,79913,48],{"class":40},[34,79915,79916,79918,79920,79922,79924,79926,79929,79931],{"class":36,"line":17502},[34,79917,51990],{"class":40},[34,79919,520],{"class":44},[34,79921,267],{"class":149},[34,79923,153],{"class":40},[34,79925,61703],{"class":156},[34,79927,79928],{"class":40},">全部区间\u003C\u002F",[34,79930,520],{"class":44},[34,79932,48],{"class":40},[34,79934,79935,79937,79939],{"class":36,"line":17507},[34,79936,53063],{"class":40},[34,79938,52258],{"class":44},[34,79940,48],{"class":40},[34,79942,79943,79945,79947,79949,79951,79953],{"class":36,"line":17521},[34,79944,52790],{"class":40},[34,79946,52258],{"class":44},[34,79948,54132],{"class":149},[34,79950,153],{"class":40},[34,79952,63247],{"class":156},[34,79954,48],{"class":40},[34,79956,79957],{"class":36,"line":17533},[34,79958,79959],{"class":205},"    \u003C!-- \u003Cdiv class=\"item\">\n",[34,79961,79962],{"class":36,"line":17538},[34,79963,79964],{"class":205},"      \u003Cimg src=\"\" alt=\"\">\n",[34,79966,79967],{"class":36,"line":17551},[34,79968,79969],{"class":205},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[34,79971,79972],{"class":36,"line":17556},[34,79973,79974],{"class":205},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[34,79976,79977],{"class":36,"line":17561},[34,79978,79979],{"class":205},"    \u003C\u002Fdiv> -->\n",[34,79981,79982,79984,79986],{"class":36,"line":17566},[34,79983,53063],{"class":40},[34,79985,52258],{"class":44},[34,79987,48],{"class":40},[34,79989,79990,79992,79994],{"class":36,"line":17579},[34,79991,52790],{"class":40},[34,79993,52459],{"class":44},[34,79995,48],{"class":40},[34,79997,79998],{"class":36,"line":17584},[34,79999,80000],{"class":205},"    \u002F\u002F 2. 初始化数据\n",[34,80002,80003,80005,80008,80010],{"class":36,"line":33284},[34,80004,11874],{"class":87},[34,80006,80007],{"class":63}," goodsList",[34,80009,14217],{"class":87},[34,80011,56090],{"class":40},[34,80013,80014],{"class":36,"line":33290},[34,80015,80016],{"class":40},"      {\n",[34,80018,80019,80022,80025],{"class":36,"line":33296},[34,80020,80021],{"class":40},"        id: ",[34,80023,80024],{"class":156},"'4001172'",[34,80026,32117],{"class":40},[34,80028,80029,80032,80035],{"class":36,"line":33302},[34,80030,80031],{"class":40},"        name: ",[34,80033,80034],{"class":156},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[34,80036,32117],{"class":40},[34,80038,80039,80042,80045],{"class":36,"line":33308},[34,80040,80041],{"class":40},"        price: ",[34,80043,80044],{"class":156},"'289.00'",[34,80046,32117],{"class":40},[34,80048,80049,80052,80055],{"class":36,"line":33319},[34,80050,80051],{"class":40},"        picture: ",[34,80053,80054],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[34,80056,32117],{"class":40},[34,80058,80059],{"class":36,"line":33325},[34,80060,78522],{"class":40},[34,80062,80063],{"class":36,"line":33345},[34,80064,80016],{"class":40},[34,80066,80067,80069,80072],{"class":36,"line":33351},[34,80068,80021],{"class":40},[34,80070,80071],{"class":156},"'4001594'",[34,80073,32117],{"class":40},[34,80075,80076,80078,80081],{"class":36,"line":33362},[34,80077,80031],{"class":40},[34,80079,80080],{"class":156},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[34,80082,32117],{"class":40},[34,80084,80085,80087,80090],{"class":36,"line":33368},[34,80086,80041],{"class":40},[34,80088,80089],{"class":156},"'288.00'",[34,80091,32117],{"class":40},[34,80093,80094,80096,80099],{"class":36,"line":33374},[34,80095,80051],{"class":40},[34,80097,80098],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[34,80100,32117],{"class":40},[34,80102,80103],{"class":36,"line":33380},[34,80104,78522],{"class":40},[34,80106,80107],{"class":36,"line":33386},[34,80108,80016],{"class":40},[34,80110,80111,80113,80116],{"class":36,"line":33392},[34,80112,80021],{"class":40},[34,80114,80115],{"class":156},"'4001009'",[34,80117,32117],{"class":40},[34,80119,80120,80122,80125],{"class":36,"line":33398},[34,80121,80031],{"class":40},[34,80123,80124],{"class":156},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[34,80126,32117],{"class":40},[34,80128,80129,80131,80134],{"class":36,"line":33404},[34,80130,80041],{"class":40},[34,80132,80133],{"class":156},"'109.00'",[34,80135,32117],{"class":40},[34,80137,80138,80140,80143],{"class":36,"line":33424},[34,80139,80051],{"class":40},[34,80141,80142],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[34,80144,32117],{"class":40},[34,80146,80147],{"class":36,"line":33430},[34,80148,78522],{"class":40},[34,80150,80151],{"class":36,"line":33446},[34,80152,80016],{"class":40},[34,80154,80155,80157,80160],{"class":36,"line":33452},[34,80156,80021],{"class":40},[34,80158,80159],{"class":156},"'4001874'",[34,80161,32117],{"class":40},[34,80163,80164,80166,80169],{"class":36,"line":33466},[34,80165,80031],{"class":40},[34,80167,80168],{"class":156},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[34,80170,32117],{"class":40},[34,80172,80173,80175,80178],{"class":36,"line":33472},[34,80174,80041],{"class":40},[34,80176,80177],{"class":156},"'488.00'",[34,80179,32117],{"class":40},[34,80181,80182,80184,80187],{"class":36,"line":33487},[34,80183,80051],{"class":40},[34,80185,80186],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[34,80188,32117],{"class":40},[34,80190,80191],{"class":36,"line":33493},[34,80192,78522],{"class":40},[34,80194,80195],{"class":36,"line":33502},[34,80196,80016],{"class":40},[34,80198,80199,80201,80204],{"class":36,"line":33508},[34,80200,80021],{"class":40},[34,80202,80203],{"class":156},"'4001649'",[34,80205,32117],{"class":40},[34,80207,80208,80210,80213],{"class":36,"line":33517},[34,80209,80031],{"class":40},[34,80211,80212],{"class":156},"'大师监制龙泉青瓷茶叶罐'",[34,80214,32117],{"class":40},[34,80216,80217,80219,80222],{"class":36,"line":33523},[34,80218,80041],{"class":40},[34,80220,80221],{"class":156},"'139.00'",[34,80223,32117],{"class":40},[34,80225,80226,80228,80231],{"class":36,"line":33529},[34,80227,80051],{"class":40},[34,80229,80230],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[34,80232,32117],{"class":40},[34,80234,80235],{"class":36,"line":33538},[34,80236,78522],{"class":40},[34,80238,80239],{"class":36,"line":33544},[34,80240,80016],{"class":40},[34,80242,80243,80245,80248],{"class":36,"line":33555},[34,80244,80021],{"class":40},[34,80246,80247],{"class":156},"'3997185'",[34,80249,32117],{"class":40},[34,80251,80252,80254,80257],{"class":36,"line":33561},[34,80253,80031],{"class":40},[34,80255,80256],{"class":156},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[34,80258,32117],{"class":40},[34,80260,80261,80263,80266],{"class":36,"line":33580},[34,80262,80041],{"class":40},[34,80264,80265],{"class":156},"'108.00'",[34,80267,32117],{"class":40},[34,80269,80270,80272,80275],{"class":36,"line":33586},[34,80271,80051],{"class":40},[34,80273,80274],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[34,80276,32117],{"class":40},[34,80278,80279],{"class":36,"line":33597},[34,80280,78522],{"class":40},[34,80282,80283],{"class":36,"line":33603},[34,80284,80016],{"class":40},[34,80286,80287,80289,80292],{"class":36,"line":33623},[34,80288,80021],{"class":40},[34,80290,80291],{"class":156},"'3997403'",[34,80293,32117],{"class":40},[34,80295,80296,80298,80301],{"class":36,"line":33639},[34,80297,80031],{"class":40},[34,80299,80300],{"class":156},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[34,80302,32117],{"class":40},[34,80304,80305,80307,80310],{"class":36,"line":33645},[34,80306,80041],{"class":40},[34,80308,80309],{"class":156},"'100.00'",[34,80311,32117],{"class":40},[34,80313,80314,80316,80319],{"class":36,"line":33659},[34,80315,80051],{"class":40},[34,80317,80318],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[34,80320,32117],{"class":40},[34,80322,80323],{"class":36,"line":33665},[34,80324,78522],{"class":40},[34,80326,80327],{"class":36,"line":33671},[34,80328,80016],{"class":40},[34,80330,80331,80333,80336],{"class":36,"line":33682},[34,80332,80021],{"class":40},[34,80334,80335],{"class":156},"'3998274'",[34,80337,32117],{"class":40},[34,80339,80340,80342,80345],{"class":36,"line":33688},[34,80341,80031],{"class":40},[34,80343,80344],{"class":156},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[34,80346,32117],{"class":40},[34,80348,80349,80351,80353],{"class":36,"line":33694},[34,80350,80041],{"class":40},[34,80352,80221],{"class":156},[34,80354,32117],{"class":40},[34,80356,80357,80359,80362],{"class":36,"line":33704},[34,80358,80051],{"class":40},[34,80360,80361],{"class":156},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[34,80363,32117],{"class":40},[34,80365,80366],{"class":36,"line":33710},[34,80367,78522],{"class":40},[34,80369,80370],{"class":36,"line":33721},[34,80371,53755],{"class":40},[34,80373,80374],{"class":36,"line":33727},[34,80375,3053],{"emptyLinePlaceholder":726},[34,80377,80378],{"class":36,"line":33737},[34,80379,80380],{"class":205},"    \u002F\u002F 1.渲染函数\n",[34,80382,80383,80385,80387,80389,80391],{"class":36,"line":33742},[34,80384,70719],{"class":87},[34,80386,70722],{"class":149},[34,80388,801],{"class":40},[34,80390,4533],{"class":5869},[34,80392,13095],{"class":40},[34,80394,80395],{"class":36,"line":33748},[34,80396,80397],{"class":205},"      \u002F\u002F 声明空字符串\n",[34,80399,80400,80403,80406,80408],{"class":36,"line":33797},[34,80401,80402],{"class":87},"      let",[34,80404,80405],{"class":40}," str ",[34,80407,153],{"class":87},[34,80409,70739],{"class":156},[34,80411,80412],{"class":36,"line":33844},[34,80413,70744],{"class":205},[34,80415,80416,80418,80421,80423,80426,80429],{"class":36,"line":33849},[34,80417,58650],{"class":40},[34,80419,80420],{"class":149},"forEach",[34,80422,801],{"class":40},[34,80424,80425],{"class":5869},"item",[34,80427,80428],{"class":87}," =>",[34,80430,57],{"class":40},[34,80432,80433,80435,80438,80441,80443,80446,80448,80451,80454,80456],{"class":36,"line":33855},[34,80434,61911],{"class":87},[34,80436,80437],{"class":40}," { ",[34,80439,80440],{"class":63},"name",[34,80442,13088],{"class":40},[34,80444,80445],{"class":63},"price",[34,80447,13088],{"class":40},[34,80449,80450],{"class":63},"picture",[34,80452,80453],{"class":40}," } ",[34,80455,153],{"class":87},[34,80457,80458],{"class":40}," item\n",[34,80460,80461,80464,80466],{"class":36,"line":33874},[34,80462,80463],{"class":40},"        str ",[34,80465,10130],{"class":87},[34,80467,70803],{"class":156},[34,80469,80470],{"class":36,"line":33880},[34,80471,80472],{"class":156},"          \u003Cdiv class=\"item\">\n",[34,80474,80475,80478,80480],{"class":36,"line":33900},[34,80476,80477],{"class":156},"            \u003Cimg src=\"${",[34,80479,80450],{"class":40},[34,80481,80482],{"class":156},"}\" alt=\"\">\n",[34,80484,80485,80488,80490],{"class":36,"line":33906},[34,80486,80487],{"class":156},"            \u003Cp class=\"name\">${",[34,80489,80440],{"class":40},[34,80491,80492],{"class":156},"}\u003C\u002Fp>\n",[34,80494,80495,80498,80500],{"class":36,"line":33912},[34,80496,80497],{"class":156},"            \u003Cp class=\"price\">${",[34,80499,80445],{"class":40},[34,80501,80492],{"class":156},[34,80503,80504],{"class":36,"line":33922},[34,80505,80506],{"class":156},"          \u003C\u002Fdiv>\n",[34,80508,80509],{"class":36,"line":33927},[34,80510,80511],{"class":156},"        `\n",[34,80513,80514],{"class":36,"line":33933},[34,80515,65453],{"class":40},[34,80517,80518],{"class":36,"line":33949},[34,80519,80520],{"class":205},"      \u002F\u002F 追加给List\n",[34,80522,80523,80525,80527,80529,80532,80534,80536],{"class":36,"line":33994},[34,80524,56414],{"class":40},[34,80526,55044],{"class":149},[34,80528,801],{"class":40},[34,80530,80531],{"class":156},"'.list'",[34,80533,74880],{"class":40},[34,80535,153],{"class":87},[34,80537,74616],{"class":40},[34,80539,80540],{"class":36,"line":34000},[34,80541,2840],{"class":40},[34,80543,80544],{"class":36,"line":34006},[34,80545,80546],{"class":205},"    \u002F\u002F 页面一打开就需要渲染\n",[34,80548,80549,80552],{"class":36,"line":34012},[34,80550,80551],{"class":149},"    render",[34,80553,80554],{"class":40},"(goodsList)\n",[34,80556,80557],{"class":36,"line":34023},[34,80558,80559],{"class":205},"    \u002F\u002F 2.过滤筛选\n",[34,80561,80562,80564,80566,80568,80571,80573,80575,80577,80579,80581,80583,80585],{"class":36,"line":34029},[34,80563,53053],{"class":40},[34,80565,55044],{"class":149},[34,80567,801],{"class":40},[34,80569,80570],{"class":156},"'.filter'",[34,80572,31477],{"class":40},[34,80574,58456],{"class":149},[34,80576,801],{"class":40},[34,80578,58461],{"class":156},[34,80580,13088],{"class":40},[34,80582,872],{"class":5869},[34,80584,80428],{"class":87},[34,80586,57],{"class":40},[34,80588,80589],{"class":36,"line":34035},[34,80590,80591],{"class":205},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[34,80593,80594,80596,80598,80601,80603,80605,80607,80609],{"class":36,"line":34041},[34,80595,58871],{"class":87},[34,80597,80437],{"class":40},[34,80599,80600],{"class":63},"tagName",[34,80602,13088],{"class":40},[34,80604,32188],{"class":63},[34,80606,80453],{"class":40},[34,80608,153],{"class":87},[34,80610,80611],{"class":40}," e.target\n",[34,80613,80614],{"class":36,"line":34059},[34,80615,80616],{"class":205},"      \u002F\u002F 判断\n",[34,80618,80619,80621,80623,80625,80627],{"class":36,"line":34073},[34,80620,55125],{"class":87},[34,80622,67672],{"class":40},[34,80624,55131],{"class":87},[34,80626,68894],{"class":156},[34,80628,13095],{"class":40},[34,80630,80631],{"class":36,"line":34082},[34,80632,80633],{"class":205},"        \u002F\u002F console.log(11)\n",[34,80635,80636],{"class":36,"line":34091},[34,80637,80638],{"class":205},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[34,80640,80641],{"class":36,"line":34100},[34,80642,80643],{"class":205},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[34,80645,80646,80648,80650,80652],{"class":36,"line":34109},[34,80647,52476],{"class":87},[34,80649,52479],{"class":40},[34,80651,153],{"class":87},[34,80653,80654],{"class":40}," goodsList\n",[34,80656,80657,80659,80662,80664,80667],{"class":36,"line":34115},[34,80658,3150],{"class":87},[34,80660,80661],{"class":40}," (dataset.index ",[34,80663,55131],{"class":87},[34,80665,80666],{"class":156}," '1'",[34,80668,13095],{"class":40},[34,80670,80671,80674,80676,80679,80682,80684,80686,80688,80691,80693,80695,80698,80700,80702,80704],{"class":36,"line":34121},[34,80672,80673],{"class":40},"          arr ",[34,80675,153],{"class":87},[34,80677,80678],{"class":40}," goodsList.",[34,80680,80681],{"class":149},"filter",[34,80683,801],{"class":40},[34,80685,80425],{"class":5869},[34,80687,80428],{"class":87},[34,80689,80690],{"class":40}," item.price ",[34,80692,2364],{"class":87},[34,80694,4746],{"class":63},[34,80696,80697],{"class":87}," &&",[34,80699,80690],{"class":40},[34,80701,2247],{"class":87},[34,80703,6407],{"class":63},[34,80705,807],{"class":40},[34,80707,80708,80711,80713,80715,80717,80719,80722],{"class":36,"line":34129},[34,80709,80710],{"class":40},"        } ",[34,80712,2355],{"class":87},[34,80714,2358],{"class":87},[34,80716,80661],{"class":40},[34,80718,55131],{"class":87},[34,80720,80721],{"class":156}," '2'",[34,80723,13095],{"class":40},[34,80725,80726,80728,80730,80732,80734,80736,80738,80740,80742,80744,80746,80748,80750,80752,80755],{"class":36,"line":34134},[34,80727,80673],{"class":40},[34,80729,153],{"class":87},[34,80731,80678],{"class":40},[34,80733,80681],{"class":149},[34,80735,801],{"class":40},[34,80737,80425],{"class":5869},[34,80739,80428],{"class":87},[34,80741,80690],{"class":40},[34,80743,2364],{"class":87},[34,80745,6407],{"class":63},[34,80747,80697],{"class":87},[34,80749,80690],{"class":40},[34,80751,2247],{"class":87},[34,80753,80754],{"class":63}," 300",[34,80756,807],{"class":40},[34,80758,80759,80761,80763,80765,80767,80769,80772],{"class":36,"line":34140},[34,80760,80710],{"class":40},[34,80762,2355],{"class":87},[34,80764,2358],{"class":87},[34,80766,80661],{"class":40},[34,80768,55131],{"class":87},[34,80770,80771],{"class":156}," '3'",[34,80773,13095],{"class":40},[34,80775,80776,80778,80780,80782,80784,80786,80788,80790,80792,80794,80796],{"class":36,"line":34151},[34,80777,80673],{"class":40},[34,80779,153],{"class":87},[34,80781,80678],{"class":40},[34,80783,80681],{"class":149},[34,80785,801],{"class":40},[34,80787,80425],{"class":5869},[34,80789,80428],{"class":87},[34,80791,80690],{"class":40},[34,80793,2364],{"class":87},[34,80795,80754],{"class":63},[34,80797,807],{"class":40},[34,80799,80800],{"class":36,"line":34157},[34,80801,3182],{"class":40},[34,80803,80804],{"class":36,"line":34177},[34,80805,80806],{"class":205},"        \u002F\u002F 渲染函数\n",[34,80808,80809,80811],{"class":36,"line":34183},[34,80810,71043],{"class":149},[34,80812,53058],{"class":40},[34,80814,80815],{"class":36,"line":34189},[34,80816,53044],{"class":40},[34,80818,80819],{"class":36,"line":34195},[34,80820,3053],{"emptyLinePlaceholder":726},[34,80822,80823],{"class":36,"line":34212},[34,80824,34112],{"class":40},[34,80826,80827,80829,80831],{"class":36,"line":34218},[34,80828,53063],{"class":40},[34,80830,52459],{"class":44},[34,80832,48],{"class":40},[34,80834,80835,80837,80839],{"class":36,"line":34224},[34,80836,102],{"class":40},[34,80838,52446],{"class":44},[34,80840,48],{"class":40},[34,80842,80843],{"class":36,"line":34230},[34,80844,3053],{"emptyLinePlaceholder":726},[34,80846,80847,80849,80851],{"class":36,"line":34236},[34,80848,102],{"class":40},[34,80850,51286],{"class":44},[34,80852,48],{"class":40},[14,80854,80856],{"id":80855},"_410-深入了解对象","4.10 深入了解对象",[19,80858,80860],{"id":80859},"_4101-创建对象","4.10.1 创建对象",[108,80862,80863],{},[2122,80864],{"alt":29,"src":80865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[108,80867,80868],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[19,80870,80872],{"id":80871},"_4102-构造函数","4.10.2 构造函数",[108,80874,80875,80878],{},[111,80876,80877],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[108,80880,80881,80884],{},[111,80882,80883],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[24,80886,80888],{"className":51284,"code":80887,"language":51286,"meta":29,"style":29},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[31,80889,80890,80898,80903,80924,80937,80949,80961,80965,80970,80997,81002,81029],{"__ignoreMap":29},[34,80891,80892,80894,80896],{"class":36,"line":37},[34,80893,41],{"class":40},[34,80895,52459],{"class":44},[34,80897,48],{"class":40},[34,80899,80900],{"class":36,"line":51},[34,80901,80902],{"class":205},"\u002F\u002F例：\n",[34,80904,80905,80907,80910,80912,80914,80916,80918,80920,80922],{"class":36,"line":60},[34,80906,55094],{"class":87},[34,80908,80909],{"class":149}," Pig",[34,80911,801],{"class":40},[34,80913,80440],{"class":5869},[34,80915,1173],{"class":40},[34,80917,70856],{"class":5869},[34,80919,1173],{"class":40},[34,80921,70873],{"class":5869},[34,80923,13095],{"class":40},[34,80925,80926,80929,80932,80934],{"class":36,"line":76},[34,80927,80928],{"class":63},"    this",[34,80930,80931],{"class":40},".name",[34,80933,153],{"class":87},[34,80935,80936],{"class":40},"name\n",[34,80938,80939,80941,80944,80946],{"class":36,"line":93},[34,80940,80928],{"class":63},[34,80942,80943],{"class":40},".age",[34,80945,153],{"class":87},[34,80947,80948],{"class":40},"age\n",[34,80950,80951,80953,80956,80958],{"class":36,"line":99},[34,80952,80928],{"class":63},[34,80954,80955],{"class":40},".gender",[34,80957,153],{"class":87},[34,80959,80960],{"class":40},"gender    \n",[34,80962,80963],{"class":36,"line":353},[34,80964,241],{"class":40},[34,80966,80967],{"class":36,"line":359},[34,80968,80969],{"class":205},"\u002F\u002F创建佩奇对象\n",[34,80971,80972,80974,80977,80979,80981,80983,80986,80988,80990,80992,80995],{"class":36,"line":579},[34,80973,7445],{"class":87},[34,80975,80976],{"class":63}," Peppa",[34,80978,12370],{"class":87},[34,80980,80909],{"class":149},[34,80982,801],{"class":40},[34,80984,80985],{"class":156},"'佩奇'",[34,80987,1173],{"class":40},[34,80989,1139],{"class":63},[34,80991,1173],{"class":40},[34,80993,80994],{"class":156},"'女'",[34,80996,807],{"class":40},[34,80998,80999],{"class":36,"line":589},[34,81000,81001],{"class":205},"\u002F\u002F创建乔治对象\n",[34,81003,81004,81006,81009,81011,81013,81015,81018,81020,81022,81024,81027],{"class":36,"line":601},[34,81005,7445],{"class":87},[34,81007,81008],{"class":63}," George",[34,81010,12370],{"class":87},[34,81012,80909],{"class":149},[34,81014,801],{"class":40},[34,81016,81017],{"class":156},"'乔治'",[34,81019,1173],{"class":40},[34,81021,869],{"class":63},[34,81023,1173],{"class":40},[34,81025,81026],{"class":156},"'男'",[34,81028,807],{"class":40},[34,81030,81031,81033,81035],{"class":36,"line":613},[34,81032,102],{"class":40},[34,81034,52459],{"class":44},[34,81036,48],{"class":40},[108,81038,81039],{},[2122,81040],{"alt":29,"src":81041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[108,81043,81044],{},[2122,81045],{"alt":29,"src":81046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[108,81048,81049],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[108,81051,81052],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[108,81054,81055],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[108,81057,81058],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[108,81060,81061],{},"这里用等号是因为：对象.属性=值",[108,81063,81064],{},"①利用对象字面量创建对象",[108,81066,81067],{},"const o={",[108,81069,81070],{},"name:'pink'",[108,81072,81073],{},"} ②利用new Object创建对象",[108,81075,81076],{},"const o=new Object({name:'pink'})",[108,81078,81079],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[108,81081,81082],{},"构造函数创建对象的执行过程：",[108,81084,81085],{},[2122,81086],{"alt":29,"src":81087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[19,81089,81091],{"id":81090},"_4103-实例成员","4.10.3 实例成员",[108,81093,81094],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[752,81096,81097,81100,81103],{},[755,81098,81099],{},"实例对象的属性和方法即为实例成员",[755,81101,81102],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[755,81104,81105],{},"构造函数创建的实例对象彼此独立互不影响",[19,81107,81109],{"id":81108},"_4104-静态成员","4.10.4 静态成员",[108,81111,81112],{},[2122,81113],{"alt":29,"src":81114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[108,81116,81117],{},"静态成员有Date.now() Math.PI Math.random()",[108,81119,81120],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[108,81122,81123],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[108,81125,81126],{},"function Pig(name) n {",[108,81128,81129],{},"this.name=name",[108,81131,1739],{},[108,81133,81134],{},"Pig.eyes=2",[108,81136,81137],{},"Pig.sayHai=function () { console.log(this) }",[108,81139,81140],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[108,81142,81143],{},"console.log(Pig.eyes) \u002F\u002F2",[108,81145,11985],{},[752,81147,81148,81151,81154,81157,81160],{},[755,81149,81150],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[755,81152,81153],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[755,81155,81156],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[755,81158,81159],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[755,81161,81162],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[108,81164,81165],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[19,81167,81169],{"id":81168},"_4105-内置构造函数","4.10.5 内置构造函数",[108,81171,81172],{},"内置构造函数包含：",[108,81174,81175],{},[2122,81176],{"alt":29,"src":81177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[108,81179,81180],{},[2122,81181],{"alt":29,"src":81182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[108,81184,81185],{},"这些基本数据类型，js对他们进行了包装",[52459,81187,81188],{},"\n\n\u002F\u002F const str = 'pink'\n\nconsole.log(str.length)\n\nconst num = 12\n\n\u002F\u002F toFixed()是保留几位小数\n\nconsole.log(num.toFixed(2))\n\n\u002F\u002F 虽然写了const str='pink'\n\n\u002F\u002F 但是内部是按照下面的形式进行执行的：\n\n\u002F\u002Fjs底层完成的，把简单数据类型包装为了复杂数据类型，就是把他转化为了对象，就可以直接使用它的属性和方法了，下面这行代码是不需要自己写的\n\nconst str = String('pink')\n\n",[22650,81190,81192],{"id":81191},"_41051-object","4.10.5.1 Object",[108,81194,81195],{},"Object 是内置的构造函数，用于创建普通对象",[108,81197,81198],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[24,81200,81202],{"className":51284,"code":81201,"language":51286,"meta":29,"style":29},"const user=new Object({name:'小明',age:15})\n",[31,81203,81204],{"__ignoreMap":29},[34,81205,81206],{"class":36,"line":37},[34,81207,81201],{"class":40},[108,81209,81210],{},"三个常用的静态方法：",[23562,81212,81214],{"id":81213},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[108,81216,81217],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[108,81219,81220],{},[2122,81221],{"alt":29,"src":81222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[108,81224,81225],{},[2122,81226],{"alt":29,"src":81227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[24,81229,81231],{"className":53713,"code":81230,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,81232,81233,81241,81249,81254,81259,81264,81269,81274,81279,81287],{"__ignoreMap":29},[34,81234,81235,81237,81239],{"class":36,"line":37},[34,81236,41],{"class":40},[34,81238,52446],{"class":44},[34,81240,48],{"class":40},[34,81242,81243,81245,81247],{"class":36,"line":51},[34,81244,52790],{"class":40},[34,81246,52459],{"class":44},[34,81248,48],{"class":40},[34,81250,81251],{"class":36,"line":60},[34,81252,81253],{"class":40},"    const o = { name: 'pink', age: 6 }\n",[34,81255,81256],{"class":36,"line":76},[34,81257,81258],{"class":40},"    \u002F\u002F 获得所有属性名\n",[34,81260,81261],{"class":36,"line":93},[34,81262,81263],{"class":40},"    const arr = Object.keys(o)\n",[34,81265,81266],{"class":36,"line":99},[34,81267,81268],{"class":40},"    console.log(arr)\n",[34,81270,81271],{"class":36,"line":353},[34,81272,81273],{"class":40},"    \u002F\u002F 获得所有属性值\n",[34,81275,81276],{"class":36,"line":359},[34,81277,81278],{"class":40},"    console.log(Object.values(o))\n",[34,81280,81281,81283,81285],{"class":36,"line":579},[34,81282,53063],{"class":40},[34,81284,52459],{"class":44},[34,81286,48],{"class":40},[34,81288,81289,81291,81293],{"class":36,"line":589},[34,81290,102],{"class":40},[34,81292,52446],{"class":44},[34,81294,48],{"class":40},[23562,81296,81298],{"id":81297},"_410512-object-assign","4.10.5.1.2 Object. assign",[108,81300,81301],{},"Object.assign(oo,o)",[108,81303,81304],{},"后的东西添加给前 是追加",[108,81306,81307],{},[2122,81308],{"alt":29,"src":81309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[108,81311,81312],{},[2122,81313],{"alt":29,"src":81314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[24,81316,81318],{"className":53713,"code":81317,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,81319,81320,81328,81336,81340,81344,81348,81352,81356,81360,81365,81370,81375,81380,81385,81393],{"__ignoreMap":29},[34,81321,81322,81324,81326],{"class":36,"line":37},[34,81323,41],{"class":40},[34,81325,52446],{"class":44},[34,81327,48],{"class":40},[34,81329,81330,81332,81334],{"class":36,"line":51},[34,81331,52790],{"class":40},[34,81333,52459],{"class":44},[34,81335,48],{"class":40},[34,81337,81338],{"class":36,"line":60},[34,81339,81253],{"class":40},[34,81341,81342],{"class":36,"line":76},[34,81343,81258],{"class":40},[34,81345,81346],{"class":36,"line":93},[34,81347,81263],{"class":40},[34,81349,81350],{"class":36,"line":99},[34,81351,81268],{"class":40},[34,81353,81354],{"class":36,"line":353},[34,81355,81273],{"class":40},[34,81357,81358],{"class":36,"line":359},[34,81359,81278],{"class":40},[34,81361,81362],{"class":36,"line":579},[34,81363,81364],{"class":40},"    const oo = {}\n",[34,81366,81367],{"class":36,"line":589},[34,81368,81369],{"class":40},"    Object.assign(oo, o)\n",[34,81371,81372],{"class":36,"line":601},[34,81373,81374],{"class":40},"    console.log(oo)\n",[34,81376,81377],{"class":36,"line":613},[34,81378,81379],{"class":40},"    Object.assign(o, { gender: '女' })\n",[34,81381,81382],{"class":36,"line":618},[34,81383,81384],{"class":40},"    console.log(o)\n",[34,81386,81387,81389,81391],{"class":36,"line":628},[34,81388,53063],{"class":40},[34,81390,52459],{"class":44},[34,81392,48],{"class":40},[34,81394,81395,81397,81399],{"class":36,"line":640},[34,81396,102],{"class":40},[34,81398,52446],{"class":44},[34,81400,48],{"class":40},[108,81402,81403],{},[2122,81404],{"alt":29,"src":81405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22650,81407,81409],{"id":81408},"_41052-array","4.10.5.2 Array",[108,81411,81412],{},"Array 是内置的构造函数，用于创建数组",[108,81414,81415],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[24,81417,81419],{"className":51284,"code":81418,"language":51286,"meta":29,"style":29},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[31,81420,81421,81426],{"__ignoreMap":29},[34,81422,81423],{"class":36,"line":37},[34,81424,81425],{"class":40},"const arr=new Array(3,5)\n",[34,81427,81428],{"class":36,"line":51},[34,81429,81430],{"class":40},"console.log(arr)  \u002F\u002F[3,5]\n",[108,81432,81433],{},"Array的实例方法，这个方法是实例成员",[108,81435,81436],{},[2122,81437],{"alt":29,"src":81438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23562,81440,81442],{"id":81441},"_410521-reduce","4.10.5.2.1 reduce",[108,81444,81445],{},[2122,81446],{"alt":29,"src":81447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[24,81449,81451],{"className":53713,"code":81450,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,81452,81453,81461,81469,81474,81479,81484,81489,81493,81498,81503,81508,81512,81517,81522,81526,81531,81536,81541,81549],{"__ignoreMap":29},[34,81454,81455,81457,81459],{"class":36,"line":37},[34,81456,41],{"class":40},[34,81458,52446],{"class":44},[34,81460,48],{"class":40},[34,81462,81463,81465,81467],{"class":36,"line":51},[34,81464,52790],{"class":40},[34,81466,52459],{"class":44},[34,81468,48],{"class":40},[34,81470,81471],{"class":36,"line":60},[34,81472,81473],{"class":40},"    const arr = [1, 5, 8]\n",[34,81475,81476],{"class":36,"line":76},[34,81477,81478],{"class":40},"    \u002F\u002F 1.没有初始值\n",[34,81480,81481],{"class":36,"line":93},[34,81482,81483],{"class":40},"    const total = arr.reduce(function (prev, current) {\n",[34,81485,81486],{"class":36,"line":99},[34,81487,81488],{"class":40},"      return prev + current\n",[34,81490,81491],{"class":36,"line":353},[34,81492,34112],{"class":40},[34,81494,81495],{"class":36,"line":359},[34,81496,81497],{"class":40},"    console.log(total)   \u002F\u002F14\n",[34,81499,81500],{"class":36,"line":579},[34,81501,81502],{"class":40},"    \u002F\u002F 2.有初始值\n",[34,81504,81505],{"class":36,"line":589},[34,81506,81507],{"class":40},"    const total1 = arr.reduce(function (prev, current) {\n",[34,81509,81510],{"class":36,"line":601},[34,81511,81488],{"class":40},[34,81513,81514],{"class":36,"line":613},[34,81515,81516],{"class":40},"    }, 10)\n",[34,81518,81519],{"class":36,"line":618},[34,81520,81521],{"class":40},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[34,81523,81524],{"class":36,"line":628},[34,81525,3053],{"emptyLinePlaceholder":726},[34,81527,81528],{"class":36,"line":640},[34,81529,81530],{"class":40},"    \u002F\u002F 3.箭头函数写法\n",[34,81532,81533],{"class":36,"line":2301},[34,81534,81535],{"class":40},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[34,81537,81538],{"class":36,"line":2307},[34,81539,81540],{"class":40},"    console.log(total2)   \u002F\u002F24\n",[34,81542,81543,81545,81547],{"class":36,"line":2328},[34,81544,53063],{"class":40},[34,81546,52459],{"class":44},[34,81548,48],{"class":40},[34,81550,81551,81553,81555],{"class":36,"line":2333},[34,81552,102],{"class":40},[34,81554,52446],{"class":44},[34,81556,48],{"class":40},[108,81558,81559],{},"执行过程：",[752,81561,81562,81565,81568],{},[755,81563,81564],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[755,81566,81567],{},"每一次循环，把返回值给作为下一次循环的上一次值",[755,81569,81570],{},"如果有起始值，则起始值作为上一次值",[24,81572,81574],{"className":53713,"code":81573,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,81575,81576,81584,81592,81596,81600,81604,81608,81612,81616,81621,81626,81631,81636,81641,81645,81649,81653,81657,81661,81665,81670,81674,81679,81683,81688,81693,81697,81701,81705,81713],{"__ignoreMap":29},[34,81577,81578,81580,81582],{"class":36,"line":37},[34,81579,41],{"class":40},[34,81581,52446],{"class":44},[34,81583,48],{"class":40},[34,81585,81586,81588,81590],{"class":36,"line":51},[34,81587,52790],{"class":40},[34,81589,52459],{"class":44},[34,81591,48],{"class":40},[34,81593,81594],{"class":36,"line":60},[34,81595,81473],{"class":40},[34,81597,81598],{"class":36,"line":76},[34,81599,81478],{"class":40},[34,81601,81602],{"class":36,"line":93},[34,81603,81483],{"class":40},[34,81605,81606],{"class":36,"line":99},[34,81607,81488],{"class":40},[34,81609,81610],{"class":36,"line":353},[34,81611,34112],{"class":40},[34,81613,81614],{"class":36,"line":359},[34,81615,81497],{"class":40},[34,81617,81618],{"class":36,"line":579},[34,81619,81620],{"class":40},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[34,81622,81623],{"class":36,"line":589},[34,81624,81625],{"class":40},"    \u002F\u002F     1              5                    6\n",[34,81627,81628],{"class":36,"line":601},[34,81629,81630],{"class":40},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[34,81632,81633],{"class":36,"line":613},[34,81634,81635],{"class":40},"    \u002F\u002F     6              8                    14\n",[34,81637,81638],{"class":36,"line":618},[34,81639,81640],{"class":40},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[34,81642,81643],{"class":36,"line":628},[34,81644,81502],{"class":40},[34,81646,81647],{"class":36,"line":640},[34,81648,81507],{"class":40},[34,81650,81651],{"class":36,"line":2301},[34,81652,81488],{"class":40},[34,81654,81655],{"class":36,"line":2307},[34,81656,81516],{"class":40},[34,81658,81659],{"class":36,"line":2328},[34,81660,81521],{"class":40},[34,81662,81663],{"class":36,"line":2333},[34,81664,81620],{"class":40},[34,81666,81667],{"class":36,"line":2347},[34,81668,81669],{"class":40},"    \u002F\u002F     10             1                     11\n",[34,81671,81672],{"class":36,"line":2352},[34,81673,81630],{"class":40},[34,81675,81676],{"class":36,"line":2381},[34,81677,81678],{"class":40},"    \u002F\u002F     11             5                    16\n",[34,81680,81681],{"class":36,"line":2386},[34,81682,81630],{"class":40},[34,81684,81685],{"class":36,"line":2403},[34,81686,81687],{"class":40},"    \u002F\u002F     16             8                    24\n",[34,81689,81690],{"class":36,"line":2408},[34,81691,81692],{"class":40},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[34,81694,81695],{"class":36,"line":2413},[34,81696,81530],{"class":40},[34,81698,81699],{"class":36,"line":2418},[34,81700,81535],{"class":40},[34,81702,81703],{"class":36,"line":2432},[34,81704,81540],{"class":40},[34,81706,81707,81709,81711],{"class":36,"line":2437},[34,81708,53063],{"class":40},[34,81710,52459],{"class":44},[34,81712,48],{"class":40},[34,81714,81715,81717,81719],{"class":36,"line":3230},[34,81716,102],{"class":40},[34,81718,52446],{"class":44},[34,81720,48],{"class":40},[23562,81722,81724],{"id":81723},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[108,81726,81727],{},[2122,81728],{"alt":29,"src":81729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[24,81731,81733],{"className":53713,"code":81732,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,81734,81735,81743,81751,81756,81761,81766,81771,81775,81780,81785,81790,81795,81800,81805,81809,81814,81818,81823,81831],{"__ignoreMap":29},[34,81736,81737,81739,81741],{"class":36,"line":37},[34,81738,41],{"class":40},[34,81740,52446],{"class":44},[34,81742,48],{"class":40},[34,81744,81745,81747,81749],{"class":36,"line":51},[34,81746,52790],{"class":40},[34,81748,52459],{"class":44},[34,81750,48],{"class":40},[34,81752,81753],{"class":36,"line":60},[34,81754,81755],{"class":40},"    const arr = [\n",[34,81757,81758],{"class":36,"line":76},[34,81759,81760],{"class":40},"      { name: '张三', salary: 10000 },\n",[34,81762,81763],{"class":36,"line":93},[34,81764,81765],{"class":40},"      { name: '李四', salary: 10000 },\n",[34,81767,81768],{"class":36,"line":99},[34,81769,81770],{"class":40},"      { name: '王五', salary: 10000 }\n",[34,81772,81773],{"class":36,"line":353},[34,81774,53755],{"class":40},[34,81776,81777],{"class":36,"line":359},[34,81778,81779],{"class":40},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[34,81781,81782],{"class":36,"line":579},[34,81783,81784],{"class":40},"    \u002F\u002F prev是累计值\n",[34,81786,81787],{"class":36,"line":589},[34,81788,81789],{"class":40},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[34,81791,81792],{"class":36,"line":601},[34,81793,81794],{"class":40},"    console.log(total)\n",[34,81796,81797],{"class":36,"line":613},[34,81798,81799],{"class":40},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[34,81801,81802],{"class":36,"line":618},[34,81803,81804],{"class":40},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[34,81806,81807],{"class":36,"line":628},[34,81808,81799],{"class":40},[34,81810,81811],{"class":36,"line":640},[34,81812,81813],{"class":40},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[34,81815,81816],{"class":36,"line":2301},[34,81817,81799],{"class":40},[34,81819,81820],{"class":36,"line":2307},[34,81821,81822],{"class":40},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[34,81824,81825,81827,81829],{"class":36,"line":2328},[34,81826,53063],{"class":40},[34,81828,52459],{"class":44},[34,81830,48],{"class":40},[34,81832,81833,81835,81837],{"class":36,"line":2333},[34,81834,102],{"class":40},[34,81836,52446],{"class":44},[34,81838,48],{"class":40},[23562,81840,81842],{"id":81841},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[108,81844,81845],{},[2122,81846],{"alt":29,"src":81847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[108,81849,81850],{},[2122,81851],{"alt":29,"src":81852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[752,81854,81855],{},[755,81856,81857],{},"find()",[108,81859,81860],{},"循环查找，找到第一个就ok",[108,81862,81863],{},[520,81864,81867],{"href":81865,"rel":81866},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24517],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[24,81869,81871],{"className":51284,"code":81870,"language":51286,"meta":29,"style":29},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[31,81872,81873,81878,81883],{"__ignoreMap":29},[34,81874,81875],{"class":36,"line":37},[34,81876,81877],{"class":40},"const array1 = [5, 12, 8, 130, 44]\n",[34,81879,81880],{"class":36,"line":51},[34,81881,81882],{"class":40},"const found = array1.find((element) => element > 10)\n",[34,81884,81885],{"class":36,"line":60},[34,81886,81887],{"class":40},"console.log(found)  \u002F\u002F12\n",[108,81889,81890,81892,81893,81898,81899,81902,81903,81905,81906,81911,81912,81914,81915,81917,81918,81920,81921],{},[31,81891,81857],{}," 方法是一个",[520,81894,81897],{"href":81895,"rel":81896},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FArray#%E8%BF%AD%E4%BB%A3%E6%96%B9%E6%B3%95",[24517],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[31,81900,81901],{},"callbackFn"," 函数，直到 ",[31,81904,81901],{}," 返回一个",[520,81907,81910],{"href":81908,"rel":81909},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24517],"真值","。然后 ",[31,81913,81857],{}," 返回该元素并停止迭代数组。如果 ",[31,81916,81901],{}," 从未返回真值，则 ",[31,81919,81857],{}," 返回 ",[31,81922,81923],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[24,81925,81927],{"className":53713,"code":81926,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[31,81928,81929,81937,81945,81950,81955,81960,81964,81969,81974,81978,81983,81988,81992,81996,82001,82006,82010,82014,82019,82024,82029,82034,82039,82043,82048,82053,82058,82063,82067,82072,82080],{"__ignoreMap":29},[34,81930,81931,81933,81935],{"class":36,"line":37},[34,81932,41],{"class":40},[34,81934,52446],{"class":44},[34,81936,48],{"class":40},[34,81938,81939,81941,81943],{"class":36,"line":51},[34,81940,52790],{"class":40},[34,81942,52459],{"class":44},[34,81944,48],{"class":40},[34,81946,81947],{"class":36,"line":60},[34,81948,81949],{"class":40},"    const arr = ['red', 'blue', 'green']\n",[34,81951,81952],{"class":36,"line":76},[34,81953,81954],{"class":40},"    const found = arr.find(item => item === 'pink')\n",[34,81956,81957],{"class":36,"line":93},[34,81958,81959],{"class":40},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[34,81961,81962],{"class":36,"line":99},[34,81963,3053],{"emptyLinePlaceholder":726},[34,81965,81966],{"class":36,"line":353},[34,81967,81968],{"class":40},"    \u002F\u002F 使用场景，用于查找数据\n",[34,81970,81971],{"class":36,"line":359},[34,81972,81973],{"class":40},"    const arr1 = [\n",[34,81975,81976],{"class":36,"line":579},[34,81977,80016],{"class":40},[34,81979,81980],{"class":36,"line":589},[34,81981,81982],{"class":40},"        name: '小米',\n",[34,81984,81985],{"class":36,"line":601},[34,81986,81987],{"class":40},"        price: 1999\n",[34,81989,81990],{"class":36,"line":613},[34,81991,78522],{"class":40},[34,81993,81994],{"class":36,"line":618},[34,81995,80016],{"class":40},[34,81997,81998],{"class":36,"line":628},[34,81999,82000],{"class":40},"        name: '华为',\n",[34,82002,82003],{"class":36,"line":640},[34,82004,82005],{"class":40},"        price: 3999\n",[34,82007,82008],{"class":36,"line":2301},[34,82009,53044],{"class":40},[34,82011,82012],{"class":36,"line":2307},[34,82013,53755],{"class":40},[34,82015,82016],{"class":36,"line":2328},[34,82017,82018],{"class":40},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[34,82020,82021],{"class":36,"line":2333},[34,82022,82023],{"class":40},"    \u002F\u002F const found1 = arr1.find(item => {\n",[34,82025,82026],{"class":36,"line":2347},[34,82027,82028],{"class":40},"    \u002F\u002F   if (item.name === '小米') {\n",[34,82030,82031],{"class":36,"line":2352},[34,82032,82033],{"class":40},"    \u002F\u002F     return item\n",[34,82035,82036],{"class":36,"line":2381},[34,82037,82038],{"class":40},"    \u002F\u002F   }\n",[34,82040,82041],{"class":36,"line":2386},[34,82042,63928],{"class":40},[34,82044,82045],{"class":36,"line":2403},[34,82046,82047],{"class":40},"    \u002F\u002F 另一种写法\n",[34,82049,82050],{"class":36,"line":2408},[34,82051,82052],{"class":40},"    const found1 = arr1.find(item => {\n",[34,82054,82055],{"class":36,"line":2413},[34,82056,82057],{"class":40},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[34,82059,82060],{"class":36,"line":2418},[34,82061,82062],{"class":40},"      return item.name = '小米'\n",[34,82064,82065],{"class":36,"line":2432},[34,82066,34112],{"class":40},[34,82068,82069],{"class":36,"line":2437},[34,82070,82071],{"class":40},"    console.log(found1)\n",[34,82073,82074,82076,82078],{"class":36,"line":3230},[34,82075,53063],{"class":40},[34,82077,52459],{"class":44},[34,82079,48],{"class":40},[34,82081,82082,82084,82086],{"class":36,"line":3244},[34,82083,102],{"class":40},[34,82085,52446],{"class":44},[34,82087,48],{"class":40},[108,82089,82090],{},[2122,82091],{"alt":29,"src":82092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[108,82094,82095],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[752,82097,82098],{"start":51},[755,82099,82100],{},"every()返回的是布尔值",[108,82102,82103],{},[520,82104,82107],{"href":82105,"rel":82106},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24517],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[108,82109,82110],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[108,82112,82113],{},"some是只有有一个就没问题",[108,82115,82116],{},"every是必须全是才行",[24,82118,82122],{"className":82119,"code":82120,"language":82121,"meta":29,"style":29},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[31,82123,82124,82140,82154,82158,82167],{"__ignoreMap":29},[34,82125,82126,82128,82131,82133,82135,82138],{"class":36,"line":37},[34,82127,55094],{"class":87},[34,82129,82130],{"class":40}," isBigEnough(element, ",[34,82132,74689],{"class":87},[34,82134,13088],{"class":40},[34,82136,82137],{"class":87},"array",[34,82139,13095],{"class":40},[34,82141,82142,82145,82148,82150,82152],{"class":36,"line":51},[34,82143,82144],{"class":87},"  return",[34,82146,82147],{"class":40}," element ",[34,82149,2364],{"class":87},[34,82151,2691],{"class":63},[34,82153,73],{"class":40},[34,82155,82156],{"class":36,"line":60},[34,82157,241],{"class":40},[34,82159,82160,82163,82165],{"class":36,"line":76},[34,82161,82162],{"class":40},"[12, 5, 8, 130, 44].every(isBigEnough); ",[34,82164,33980],{"class":87},[34,82166,55161],{"class":40},[34,82168,82169,82172,82174],{"class":36,"line":93},[34,82170,82171],{"class":40},"[12, 54, 18, 130, 44].every(isBigEnough); ",[34,82173,33980],{"class":87},[34,82175,58583],{"class":40},[24,82177,82179],{"className":53713,"code":82178,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,82180,82181,82189,82197,82202,82206,82211,82216,82224],{"__ignoreMap":29},[34,82182,82183,82185,82187],{"class":36,"line":37},[34,82184,41],{"class":40},[34,82186,52446],{"class":44},[34,82188,48],{"class":40},[34,82190,82191,82193,82195],{"class":36,"line":51},[34,82192,52790],{"class":40},[34,82194,52459],{"class":44},[34,82196,48],{"class":40},[34,82198,82199],{"class":36,"line":60},[34,82200,82201],{"class":40},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[34,82203,82204],{"class":36,"line":76},[34,82205,78952],{"class":40},[34,82207,82208],{"class":36,"line":93},[34,82209,82210],{"class":40},"    const flag = arr.every(item => item >= 10)\n",[34,82212,82213],{"class":36,"line":99},[34,82214,82215],{"class":40},"    console.log(flag)    \u002F\u002Ftrue\n",[34,82217,82218,82220,82222],{"class":36,"line":353},[34,82219,53063],{"class":40},[34,82221,52459],{"class":44},[34,82223,48],{"class":40},[34,82225,82226,82228,82230],{"class":36,"line":359},[34,82227,102],{"class":40},[34,82229,52446],{"class":44},[34,82231,48],{"class":40},[24,82233,82235],{"className":53713,"code":82234,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,82236,82237,82245,82253,82257,82262,82267,82272,82280],{"__ignoreMap":29},[34,82238,82239,82241,82243],{"class":36,"line":37},[34,82240,41],{"class":40},[34,82242,52446],{"class":44},[34,82244,48],{"class":40},[34,82246,82247,82249,82251],{"class":36,"line":51},[34,82248,52790],{"class":40},[34,82250,52459],{"class":44},[34,82252,48],{"class":40},[34,82254,82255],{"class":36,"line":60},[34,82256,82201],{"class":40},[34,82258,82259],{"class":36,"line":76},[34,82260,82261],{"class":40},"    const arr = [10, 0, 5]\n",[34,82263,82264],{"class":36,"line":93},[34,82265,82266],{"class":40},"    const flag = arr.some(item => item >= 10)\n",[34,82268,82269],{"class":36,"line":99},[34,82270,82271],{"class":40},"    console.log(flag)   \u002F\u002Ftrue\n",[34,82273,82274,82276,82278],{"class":36,"line":353},[34,82275,53063],{"class":40},[34,82277,52459],{"class":44},[34,82279,48],{"class":40},[34,82281,82282,82284,82286],{"class":36,"line":359},[34,82283,102],{"class":40},[34,82285,52446],{"class":44},[34,82287,48],{"class":40},[23562,82289,82291],{"id":82290},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[108,82293,82294],{},[2122,82295],{"alt":29,"src":82296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[24,82298,82300],{"className":51284,"code":82299,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,82301,82302,82312,82326,82330,82338,82352,82372,82384,82392,82399,82411,82423,82435,82447,82457,82467,82471,82479,82487,82491,82499,82511,82519,82541,82546,82551,82584,82592,82600,82604],{"__ignoreMap":29},[34,82303,82304,82306,82308,82310],{"class":36,"line":37},[34,82305,51948],{"class":40},[34,82307,51951],{"class":44},[34,82309,51954],{"class":149},[34,82311,48],{"class":40},[34,82313,82314,82316,82318,82320,82322,82324],{"class":36,"line":51},[34,82315,41],{"class":40},[34,82317,51286],{"class":44},[34,82319,51965],{"class":149},[34,82321,153],{"class":40},[34,82323,51970],{"class":156},[34,82325,48],{"class":40},[34,82327,82328],{"class":36,"line":60},[34,82329,3053],{"emptyLinePlaceholder":726},[34,82331,82332,82334,82336],{"class":36,"line":76},[34,82333,41],{"class":40},[34,82335,51983],{"class":44},[34,82337,48],{"class":40},[34,82339,82340,82342,82344,82346,82348,82350],{"class":36,"line":93},[34,82341,52790],{"class":40},[34,82343,51993],{"class":44},[34,82345,51996],{"class":149},[34,82347,153],{"class":40},[34,82349,52001],{"class":156},[34,82351,48],{"class":40},[34,82353,82354,82356,82358,82360,82362,82364,82366,82368,82370],{"class":36,"line":99},[34,82355,52790],{"class":40},[34,82357,51993],{"class":44},[34,82359,15573],{"class":149},[34,82361,153],{"class":40},[34,82363,52040],{"class":156},[34,82365,52020],{"class":149},[34,82367,153],{"class":40},[34,82369,52047],{"class":156},[34,82371,48],{"class":40},[34,82373,82374,82376,82378,82380,82382],{"class":36,"line":353},[34,82375,52790],{"class":40},[34,82377,52056],{"class":44},[34,82379,52059],{"class":40},[34,82381,52056],{"class":44},[34,82383,48],{"class":40},[34,82385,82386,82388,82390],{"class":36,"line":359},[34,82387,52790],{"class":40},[34,82389,45],{"class":44},[34,82391,48],{"class":40},[34,82393,82394,82397],{"class":36,"line":579},[34,82395,82396],{"class":44},"    div",[34,82398,57],{"class":40},[34,82400,82401,82403,82405,82407,82409],{"class":36,"line":589},[34,82402,55415],{"class":63},[34,82404,67],{"class":40},[34,82406,2376],{"class":63},[34,82408,88],{"class":87},[34,82410,73],{"class":40},[34,82412,82413,82415,82417,82419,82421],{"class":36,"line":601},[34,82414,55429],{"class":63},[34,82416,67],{"class":40},[34,82418,1196],{"class":63},[34,82420,88],{"class":87},[34,82422,73],{"class":40},[34,82424,82425,82427,82429,82431,82433],{"class":36,"line":613},[34,82426,58002],{"class":63},[34,82428,67],{"class":40},[34,82430,1196],{"class":63},[34,82432,88],{"class":87},[34,82434,73],{"class":40},[34,82436,82437,82439,82441,82443,82445],{"class":36,"line":618},[34,82438,65771],{"class":63},[34,82440,67],{"class":40},[34,82442,1293],{"class":63},[34,82444,88],{"class":87},[34,82446,73],{"class":40},[34,82448,82449,82451,82453,82455],{"class":36,"line":628},[34,82450,57929],{"class":63},[34,82452,67],{"class":40},[34,82454,52239],{"class":63},[34,82456,73],{"class":40},[34,82458,82459,82461,82463,82465],{"class":36,"line":640},[34,82460,55528],{"class":63},[34,82462,67],{"class":40},[34,82464,52292],{"class":63},[34,82466,73],{"class":40},[34,82468,82469],{"class":36,"line":2301},[34,82470,2840],{"class":40},[34,82472,82473,82475,82477],{"class":36,"line":2307},[34,82474,53063],{"class":40},[34,82476,45],{"class":44},[34,82478,48],{"class":40},[34,82480,82481,82483,82485],{"class":36,"line":2328},[34,82482,102],{"class":40},[34,82484,51983],{"class":44},[34,82486,48],{"class":40},[34,82488,82489],{"class":36,"line":2333},[34,82490,3053],{"emptyLinePlaceholder":726},[34,82492,82493,82495,82497],{"class":36,"line":2347},[34,82494,41],{"class":40},[34,82496,52446],{"class":44},[34,82498,48],{"class":40},[34,82500,82501,82503,82505,82507,82509],{"class":36,"line":2352},[34,82502,52790],{"class":40},[34,82504,52258],{"class":44},[34,82506,55957],{"class":40},[34,82508,52258],{"class":44},[34,82510,48],{"class":40},[34,82512,82513,82515,82517],{"class":36,"line":2381},[34,82514,52790],{"class":40},[34,82516,52459],{"class":44},[34,82518,48],{"class":40},[34,82520,82521,82523,82526,82528,82531,82534,82536,82539],{"class":36,"line":2386},[34,82522,11874],{"class":87},[34,82524,82525],{"class":63}," spec",[34,82527,14217],{"class":87},[34,82529,82530],{"class":40}," { size: ",[34,82532,82533],{"class":156},"'40cm*40cm'",[34,82535,56107],{"class":40},[34,82537,82538],{"class":156},"'黑色'",[34,82540,56247],{"class":40},[34,82542,82543],{"class":36,"line":2403},[34,82544,82545],{"class":205},"    \u002F\u002F const arr = Object.values(spec)\n",[34,82547,82548],{"class":36,"line":2408},[34,82549,82550],{"class":205},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[34,82552,82553,82555,82557,82559,82562,82564,82566,82569,82572,82575,82577,82579,82582],{"class":36,"line":2413},[34,82554,53053],{"class":40},[34,82556,55044],{"class":149},[34,82558,801],{"class":40},[34,82560,82561],{"class":156},"'div'",[34,82563,74880],{"class":40},[34,82565,153],{"class":87},[34,82567,82568],{"class":40}," Object.",[34,82570,82571],{"class":149},"values",[34,82573,82574],{"class":40},"(spec).",[34,82576,74854],{"class":149},[34,82578,801],{"class":40},[34,82580,82581],{"class":156},"'\u002F'",[34,82583,807],{"class":40},[34,82585,82586,82588,82590],{"class":36,"line":2418},[34,82587,53063],{"class":40},[34,82589,52459],{"class":44},[34,82591,48],{"class":40},[34,82593,82594,82596,82598],{"class":36,"line":2432},[34,82595,102],{"class":40},[34,82597,52446],{"class":44},[34,82599,48],{"class":40},[34,82601,82602],{"class":36,"line":2437},[34,82603,3053],{"emptyLinePlaceholder":726},[34,82605,82606,82608,82610],{"class":36,"line":3230},[34,82607,102],{"class":40},[34,82609,51286],{"class":44},[34,82611,48],{"class":40},[108,82613,82614],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23562,82616,82618],{"id":82617},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[108,82620,82621],{},"静态方法，将伪数组转换为真数组",[108,82623,82624],{},[2122,82625],{"alt":29,"src":82626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[24,82628,82630],{"className":53713,"code":82629,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,82631,82632,82640,82648,82660,82672,82684,82692,82700,82705,82710,82715,82720,82728],{"__ignoreMap":29},[34,82633,82634,82636,82638],{"class":36,"line":37},[34,82635,41],{"class":40},[34,82637,52446],{"class":44},[34,82639,48],{"class":40},[34,82641,82642,82644,82646],{"class":36,"line":51},[34,82643,52790],{"class":40},[34,82645,1800],{"class":44},[34,82647,48],{"class":40},[34,82649,82650,82652,82654,82656,82658],{"class":36,"line":60},[34,82651,51990],{"class":40},[34,82653,755],{"class":44},[34,82655,55957],{"class":40},[34,82657,755],{"class":44},[34,82659,48],{"class":40},[34,82661,82662,82664,82666,82668,82670],{"class":36,"line":76},[34,82663,51990],{"class":40},[34,82665,755],{"class":44},[34,82667,55957],{"class":40},[34,82669,755],{"class":44},[34,82671,48],{"class":40},[34,82673,82674,82676,82678,82680,82682],{"class":36,"line":93},[34,82675,51990],{"class":40},[34,82677,755],{"class":44},[34,82679,55957],{"class":40},[34,82681,755],{"class":44},[34,82683,48],{"class":40},[34,82685,82686,82688,82690],{"class":36,"line":99},[34,82687,53063],{"class":40},[34,82689,1800],{"class":44},[34,82691,48],{"class":40},[34,82693,82694,82696,82698],{"class":36,"line":353},[34,82695,52790],{"class":40},[34,82697,52459],{"class":44},[34,82699,48],{"class":40},[34,82701,82702],{"class":36,"line":359},[34,82703,82704],{"class":40},"    const lis = document.querySelectorAll('li')\n",[34,82706,82707],{"class":36,"line":579},[34,82708,82709],{"class":40},"    const liss = Array.from(lis)\n",[34,82711,82712],{"class":36,"line":589},[34,82713,82714],{"class":40},"    liss.pop()\n",[34,82716,82717],{"class":36,"line":601},[34,82718,82719],{"class":40},"    console.log(liss)\n",[34,82721,82722,82724,82726],{"class":36,"line":613},[34,82723,53063],{"class":40},[34,82725,52459],{"class":44},[34,82727,48],{"class":40},[34,82729,82730,82732,82734],{"class":36,"line":618},[34,82731,102],{"class":40},[34,82733,52446],{"class":44},[34,82735,48],{"class":40},[108,82737,82738],{},[2122,82739],{"alt":29,"src":82740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22650,82742,82744],{"id":82743},"_41053-string","4.10.5.3 String",[108,82746,82747],{},[2122,82748],{"alt":29,"src":82749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23562,82751,82753],{"id":82752},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[24,82755,82757],{"className":53713,"code":82756,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,82758,82759,82767,82775,82780,82785,82790,82794,82799,82804,82809,82817],{"__ignoreMap":29},[34,82760,82761,82763,82765],{"class":36,"line":37},[34,82762,41],{"class":40},[34,82764,52446],{"class":44},[34,82766,48],{"class":40},[34,82768,82769,82771,82773],{"class":36,"line":51},[34,82770,52790],{"class":40},[34,82772,52459],{"class":44},[34,82774,48],{"class":40},[34,82776,82777],{"class":36,"line":60},[34,82778,82779],{"class":40},"    \u002F\u002F 把字符串转化为数组\n",[34,82781,82782],{"class":36,"line":76},[34,82783,82784],{"class":40},"    const str = 'pink,red'\n",[34,82786,82787],{"class":36,"line":93},[34,82788,82789],{"class":40},"    const arr = str.split(',')\n",[34,82791,82792],{"class":36,"line":99},[34,82793,81268],{"class":40},[34,82795,82796],{"class":36,"line":353},[34,82797,82798],{"class":40},"    const str1 = '2025-8-25'\n",[34,82800,82801],{"class":36,"line":359},[34,82802,82803],{"class":40},"    const arr1 = str1.split('-')\n",[34,82805,82806],{"class":36,"line":579},[34,82807,82808],{"class":40},"    console.log(arr1)\n",[34,82810,82811,82813,82815],{"class":36,"line":589},[34,82812,53063],{"class":40},[34,82814,52459],{"class":44},[34,82816,48],{"class":40},[34,82818,82819,82821,82823],{"class":36,"line":601},[34,82820,102],{"class":40},[34,82822,52446],{"class":44},[34,82824,48],{"class":40},[23562,82826,82828],{"id":82827},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[108,82830,5834],{},[108,82832,82833],{},"substring(indexStart)",[108,82835,82836],{},"substring(indexStart, indexEnd)",[1800,82838,82839,82850,82862,82872],{},[755,82840,82841,82842,82845,82846,82849],{},"如果省略了 ",[31,82843,82844],{},"indexEnd","，则 ",[31,82847,82848],{},"substring()"," 提取字符直到字符串的末尾",[755,82851,82852,82853,82856,82857,82845,82859,82861],{},"如果 ",[31,82854,82855],{},"indexStart"," 等于 ",[31,82858,82844],{},[31,82860,82848],{}," 返回一个空字符串",[755,82863,82852,82864,82866,82867,82845,82869,82871],{},[31,82865,82855],{}," 大于 ",[31,82868,82844],{},[31,82870,82848],{}," 的效果就像交换了这两个参数一样",[755,82873,82874],{},"结束的索引号不包含想要截取的部分",[24,82876,82878],{"className":82119,"code":82877,"language":82121,"meta":29,"style":29},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[31,82879,82880,82892,82896,82930,82960,82964,82995,82999,83026,83056,83086,83090,83121],{"__ignoreMap":29},[34,82881,82882,82885,82887,82890],{"class":36,"line":37},[34,82883,82884],{"class":40},"const anyString ",[34,82886,153],{"class":87},[34,82888,82889],{"class":156}," \"Mozilla\"",[34,82891,73],{"class":40},[34,82893,82894],{"class":36,"line":51},[34,82895,3053],{"emptyLinePlaceholder":726},[34,82897,82898,82901,82903,82905,82907,82910,82912,82915,82917,82919,82921,82923,82925,82927],{"class":36,"line":60},[34,82899,82900],{"class":63},"console",[34,82902,1353],{"class":40},[34,82904,58890],{"class":63},[34,82906,801],{"class":40},[34,82908,82909],{"class":63},"anyString",[34,82911,1353],{"class":40},[34,82913,82914],{"class":63},"substring",[34,82916,801],{"class":40},[34,82918,987],{"class":63},[34,82920,13088],{"class":40},[34,82922,1013],{"class":63},[34,82924,75884],{"class":40},[34,82926,33980],{"class":87},[34,82928,82929],{"class":156}," 'M'\n",[34,82931,82932,82934,82936,82938,82940,82942,82944,82946,82948,82950,82952,82954,82956,82958],{"class":36,"line":76},[34,82933,82900],{"class":63},[34,82935,1353],{"class":40},[34,82937,58890],{"class":63},[34,82939,801],{"class":40},[34,82941,82909],{"class":63},[34,82943,1353],{"class":40},[34,82945,82914],{"class":63},[34,82947,801],{"class":40},[34,82949,1013],{"class":63},[34,82951,13088],{"class":40},[34,82953,987],{"class":63},[34,82955,75884],{"class":40},[34,82957,33980],{"class":87},[34,82959,82929],{"class":156},[34,82961,82962],{"class":36,"line":93},[34,82963,3053],{"emptyLinePlaceholder":726},[34,82965,82966,82968,82970,82972,82974,82976,82978,82980,82982,82984,82986,82988,82990,82992],{"class":36,"line":99},[34,82967,82900],{"class":63},[34,82969,1353],{"class":40},[34,82971,58890],{"class":63},[34,82973,801],{"class":40},[34,82975,82909],{"class":63},[34,82977,1353],{"class":40},[34,82979,82914],{"class":63},[34,82981,801],{"class":40},[34,82983,987],{"class":63},[34,82985,13088],{"class":40},[34,82987,1139],{"class":63},[34,82989,75884],{"class":40},[34,82991,33980],{"class":87},[34,82993,82994],{"class":156}," 'Mozill'\n",[34,82996,82997],{"class":36,"line":353},[34,82998,3053],{"emptyLinePlaceholder":726},[34,83000,83001,83003,83005,83007,83009,83011,83013,83015,83017,83019,83021,83023],{"class":36,"line":359},[34,83002,82900],{"class":63},[34,83004,1353],{"class":40},[34,83006,58890],{"class":63},[34,83008,801],{"class":40},[34,83010,82909],{"class":63},[34,83012,1353],{"class":40},[34,83014,82914],{"class":63},[34,83016,801],{"class":40},[34,83018,1088],{"class":63},[34,83020,75884],{"class":40},[34,83022,33980],{"class":87},[34,83024,83025],{"class":156}," 'lla'\n",[34,83027,83028,83030,83032,83034,83036,83038,83040,83042,83044,83046,83048,83050,83052,83054],{"class":36,"line":579},[34,83029,82900],{"class":63},[34,83031,1353],{"class":40},[34,83033,58890],{"class":63},[34,83035,801],{"class":40},[34,83037,82909],{"class":63},[34,83039,1353],{"class":40},[34,83041,82914],{"class":63},[34,83043,801],{"class":40},[34,83045,1088],{"class":63},[34,83047,13088],{"class":40},[34,83049,1164],{"class":63},[34,83051,75940],{"class":40},[34,83053,33980],{"class":87},[34,83055,83025],{"class":156},[34,83057,83058,83060,83062,83064,83066,83068,83070,83072,83074,83076,83078,83080,83082,83084],{"class":36,"line":589},[34,83059,82900],{"class":63},[34,83061,1353],{"class":40},[34,83063,58890],{"class":63},[34,83065,801],{"class":40},[34,83067,82909],{"class":63},[34,83069,1353],{"class":40},[34,83071,82914],{"class":63},[34,83073,801],{"class":40},[34,83075,1164],{"class":63},[34,83077,13088],{"class":40},[34,83079,1088],{"class":63},[34,83081,75884],{"class":40},[34,83083,33980],{"class":87},[34,83085,83025],{"class":156},[34,83087,83088],{"class":36,"line":601},[34,83089,3053],{"emptyLinePlaceholder":726},[34,83091,83092,83094,83096,83098,83100,83102,83104,83106,83108,83110,83112,83114,83116,83118],{"class":36,"line":613},[34,83093,82900],{"class":63},[34,83095,1353],{"class":40},[34,83097,58890],{"class":63},[34,83099,801],{"class":40},[34,83101,82909],{"class":63},[34,83103,1353],{"class":40},[34,83105,82914],{"class":63},[34,83107,801],{"class":40},[34,83109,987],{"class":63},[34,83111,13088],{"class":40},[34,83113,1164],{"class":63},[34,83115,75884],{"class":40},[34,83117,33980],{"class":87},[34,83119,83120],{"class":156}," 'Mozilla'\n",[34,83122,83123,83125,83127,83129,83131,83133,83135,83137,83139,83141,83143,83145,83147,83149],{"class":36,"line":618},[34,83124,82900],{"class":63},[34,83126,1353],{"class":40},[34,83128,58890],{"class":63},[34,83130,801],{"class":40},[34,83132,82909],{"class":63},[34,83134,1353],{"class":40},[34,83136,82914],{"class":63},[34,83138,801],{"class":40},[34,83140,987],{"class":63},[34,83142,13088],{"class":40},[34,83144,1241],{"class":63},[34,83146,75884],{"class":40},[34,83148,33980],{"class":87},[34,83150,83120],{"class":156},[23562,83152,83154],{"id":83153},"_410533-startswith","4.10.5.3.3 startsWith",[108,83156,83157,83160,83161,83166,83167,83169,83170],{},[31,83158,83159],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[111,83162,83163],{},[31,83164,83165],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[31,83168,2022],{}," 或 ",[31,83171,66658],{},[24,83173,83175],{"className":78125,"code":83174,"language":78127,"meta":29,"style":29},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[31,83176,83177,83189,83208,83213,83233],{"__ignoreMap":29},[34,83178,83179,83181,83184,83186],{"class":36,"line":37},[34,83180,7445],{"class":87},[34,83182,83183],{"class":40}," str1 ",[34,83185,153],{"class":87},[34,83187,83188],{"class":156}," \"Saturday night plans\"\n",[34,83190,83191,83193,83195,83198,83201,83203,83206],{"class":36,"line":51},[34,83192,78162],{"class":40},[34,83194,58890],{"class":149},[34,83196,83197],{"class":40},"(str1.",[34,83199,83200],{"class":149},"startsWith",[34,83202,801],{"class":40},[34,83204,83205],{"class":156},"\"Sat\"",[34,83207,31148],{"class":40},[34,83209,83210],{"class":36,"line":60},[34,83211,83212],{"class":205},"\u002F\u002F Expected output: true\n",[34,83214,83215,83217,83219,83221,83223,83225,83227,83229,83231],{"class":36,"line":76},[34,83216,78162],{"class":40},[34,83218,58890],{"class":149},[34,83220,83197],{"class":40},[34,83222,83200],{"class":149},[34,83224,801],{"class":40},[34,83226,83205],{"class":156},[34,83228,13088],{"class":40},[34,83230,869],{"class":63},[34,83232,31148],{"class":40},[34,83234,83235],{"class":36,"line":93},[34,83236,83237],{"class":205},"\u002F\u002F Expected output: false\n",[24,83239,83241],{"className":51284,"code":83240,"language":51286,"meta":29,"style":29},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[31,83242,83243,83248,83253,83257,83262,83267],{"__ignoreMap":29},[34,83244,83245],{"class":36,"line":37},[34,83246,83247],{"class":40},"startsWith(searchString)\n",[34,83249,83250],{"class":36,"line":51},[34,83251,83252],{"class":40},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[34,83254,83255],{"class":36,"line":60},[34,83256,3053],{"emptyLinePlaceholder":726},[34,83258,83259],{"class":36,"line":76},[34,83260,83261],{"class":40},"const str3 = 'pink老师上课中'\n",[34,83263,83264],{"class":36,"line":93},[34,83265,83266],{"class":40},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[34,83268,83269],{"class":36,"line":99},[34,83270,83271],{"class":40},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23562,83273,83275],{"id":83274},"_410534-includes","4.10.5.3.4 includes",[108,83277,83278],{},"includes(searchString) includes(searchString, position)",[752,83280,83281],{},[755,83282,83283],{},"searchString:",[108,83285,83286,83287,83289,83290,83295,83296,83301,83302,22152,83305,83308,83309,83312],{},"一个要在 ",[31,83288,1962],{}," 中查找的字符串。",[520,83291,83294],{"href":83292,"rel":83293},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FRegExp#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E7%89%B9%E6%AE%8A%E5%A4%84%E7%90%86",[24517],"不能是正则表达式","。所有非正则表达式的值都会被",[520,83297,83300],{"href":83298,"rel":83299},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2",[24517],"强制转换为字符串","，因此如果该参数被省略或传入 ",[31,83303,83304],{},"undefined",[31,83306,83307],{},"includes()"," 方法会在字符串中搜索 ",[31,83310,83311],{},"\"undefined\"","，这通常不是你想要的",[752,83314,83315],{"start":51},[755,83316,83317,1653],{},[31,83318,83319],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[108,83321,83322,83323,83326,83327],{},"在字符串中开始搜索 ",[31,83324,83325],{},"searchString"," 的位置。默认值为 ",[31,83328,987],{},[752,83330,83331],{"start":60},[755,83332,83333],{},"返回值：",[108,83335,83336,83337,83339,83340,83344,83345],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[31,83338,83325],{}," 为空字符串的情况），则返回 ",[111,83341,83342],{},[31,83343,2022],{}," ，否则返回 ",[111,83346,83347],{},[31,83348,66658],{},[752,83350,83351],{"start":76},[755,83352,83353],{},"异常：",[108,83355,82852,83356,14448,83358,83362],{},[31,83357,83325],{},[520,83359,83361],{"href":83292,"rel":83360},[24517],"是一个正则表达式","，则会抛出",[108,83364,83365],{},"只要是有就是true，不需要非得以谁开头结尾",[24,83367,83369],{"className":78125,"code":83368,"language":78127,"meta":29,"style":29},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[31,83370,83371,83382,83405,83424,83444,83466,83485],{"__ignoreMap":29},[34,83372,83373,83375,83377,83379],{"class":36,"line":37},[34,83374,7445],{"class":87},[34,83376,80405],{"class":40},[34,83378,153],{"class":87},[34,83380,83381],{"class":156}," \"To be, or not to be, that is the question.\"\n",[34,83383,83384,83386,83388,83391,83394,83396,83399,83402],{"class":36,"line":51},[34,83385,78162],{"class":40},[34,83387,58890],{"class":149},[34,83389,83390],{"class":40},"(str.",[34,83392,83393],{"class":149},"includes",[34,83395,801],{"class":40},[34,83397,83398],{"class":156},"\"To be\"",[34,83400,83401],{"class":40},"))",[34,83403,83404],{"class":205},"  \u002F\u002F true\n",[34,83406,83407,83409,83411,83413,83415,83417,83420,83422],{"class":36,"line":60},[34,83408,78162],{"class":40},[34,83410,58890],{"class":149},[34,83412,83390],{"class":40},[34,83414,83393],{"class":149},[34,83416,801],{"class":40},[34,83418,83419],{"class":156},"\"question\"",[34,83421,83401],{"class":40},[34,83423,83404],{"class":205},[34,83425,83426,83428,83430,83432,83434,83436,83439,83441],{"class":36,"line":76},[34,83427,78162],{"class":40},[34,83429,58890],{"class":149},[34,83431,83390],{"class":40},[34,83433,83393],{"class":149},[34,83435,801],{"class":40},[34,83437,83438],{"class":156},"\"nonexistent\"",[34,83440,83401],{"class":40},[34,83442,83443],{"class":205},"  \u002F\u002F false\n",[34,83445,83446,83448,83450,83452,83454,83456,83458,83460,83462,83464],{"class":36,"line":93},[34,83447,78162],{"class":40},[34,83449,58890],{"class":149},[34,83451,83390],{"class":40},[34,83453,83393],{"class":149},[34,83455,801],{"class":40},[34,83457,83398],{"class":156},[34,83459,13088],{"class":40},[34,83461,1013],{"class":63},[34,83463,83401],{"class":40},[34,83465,83443],{"class":205},[34,83467,83468,83470,83472,83474,83476,83478,83481,83483],{"class":36,"line":99},[34,83469,78162],{"class":40},[34,83471,58890],{"class":149},[34,83473,83390],{"class":40},[34,83475,83393],{"class":149},[34,83477,801],{"class":40},[34,83479,83480],{"class":156},"\"TO BE\"",[34,83482,83401],{"class":40},[34,83484,83443],{"class":205},[34,83486,83487,83489,83491,83493,83495,83497,83499,83501],{"class":36,"line":353},[34,83488,78162],{"class":40},[34,83490,58890],{"class":149},[34,83492,83390],{"class":40},[34,83494,83393],{"class":149},[34,83496,801],{"class":40},[34,83498,8305],{"class":156},[34,83500,83401],{"class":40},[34,83502,83404],{"class":205},[23562,83504,83506],{"id":83505},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[24,83508,83510],{"className":53713,"code":83509,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,83511,83512,83520,83528,83533,83538,83543,83548,83553,83561],{"__ignoreMap":29},[34,83513,83514,83516,83518],{"class":36,"line":37},[34,83515,41],{"class":40},[34,83517,52446],{"class":44},[34,83519,48],{"class":40},[34,83521,83522,83524,83526],{"class":36,"line":51},[34,83523,52790],{"class":40},[34,83525,52459],{"class":44},[34,83527,48],{"class":40},[34,83529,83530],{"class":36,"line":60},[34,83531,83532],{"class":40},"    const num = 10\n",[34,83534,83535],{"class":36,"line":76},[34,83536,83537],{"class":40},"    \u002F\u002F 强制转换\n",[34,83539,83540],{"class":36,"line":93},[34,83541,83542],{"class":40},"    console.log(String(num))\n",[34,83544,83545],{"class":36,"line":99},[34,83546,83547],{"class":40},"    \u002F\u002F toString()方法转换\n",[34,83549,83550],{"class":36,"line":353},[34,83551,83552],{"class":40},"    console.log(num.toString())\n",[34,83554,83555,83557,83559],{"class":36,"line":359},[34,83556,53063],{"class":40},[34,83558,52459],{"class":44},[34,83560,48],{"class":40},[34,83562,83563,83565,83567],{"class":36,"line":579},[34,83564,102],{"class":40},[34,83566,52446],{"class":44},[34,83568,48],{"class":40},[23562,83570,83572],{"id":83571},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[108,83574,83575],{},[2122,83576],{"alt":29,"src":83577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[24,83579,83581],{"className":51284,"code":83580,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,83582,83583,83593,83607,83611,83619,83633,83653,83665,83673,83677,83685,83697,83705,83717,83722,83727,83732,83779,83795,83803,83811,83815],{"__ignoreMap":29},[34,83584,83585,83587,83589,83591],{"class":36,"line":37},[34,83586,51948],{"class":40},[34,83588,51951],{"class":44},[34,83590,51954],{"class":149},[34,83592,48],{"class":40},[34,83594,83595,83597,83599,83601,83603,83605],{"class":36,"line":51},[34,83596,41],{"class":40},[34,83598,51286],{"class":44},[34,83600,51965],{"class":149},[34,83602,153],{"class":40},[34,83604,51970],{"class":156},[34,83606,48],{"class":40},[34,83608,83609],{"class":36,"line":60},[34,83610,3053],{"emptyLinePlaceholder":726},[34,83612,83613,83615,83617],{"class":36,"line":76},[34,83614,41],{"class":40},[34,83616,51983],{"class":44},[34,83618,48],{"class":40},[34,83620,83621,83623,83625,83627,83629,83631],{"class":36,"line":93},[34,83622,52790],{"class":40},[34,83624,51993],{"class":44},[34,83626,51996],{"class":149},[34,83628,153],{"class":40},[34,83630,52001],{"class":156},[34,83632,48],{"class":40},[34,83634,83635,83637,83639,83641,83643,83645,83647,83649,83651],{"class":36,"line":99},[34,83636,52790],{"class":40},[34,83638,51993],{"class":44},[34,83640,15573],{"class":149},[34,83642,153],{"class":40},[34,83644,52040],{"class":156},[34,83646,52020],{"class":149},[34,83648,153],{"class":40},[34,83650,52047],{"class":156},[34,83652,48],{"class":40},[34,83654,83655,83657,83659,83661,83663],{"class":36,"line":353},[34,83656,52790],{"class":40},[34,83658,52056],{"class":44},[34,83660,52059],{"class":40},[34,83662,52056],{"class":44},[34,83664,48],{"class":40},[34,83666,83667,83669,83671],{"class":36,"line":359},[34,83668,102],{"class":40},[34,83670,51983],{"class":44},[34,83672,48],{"class":40},[34,83674,83675],{"class":36,"line":579},[34,83676,3053],{"emptyLinePlaceholder":726},[34,83678,83679,83681,83683],{"class":36,"line":589},[34,83680,41],{"class":40},[34,83682,52446],{"class":44},[34,83684,48],{"class":40},[34,83686,83687,83689,83691,83693,83695],{"class":36,"line":601},[34,83688,52790],{"class":40},[34,83690,52258],{"class":44},[34,83692,55957],{"class":40},[34,83694,52258],{"class":44},[34,83696,48],{"class":40},[34,83698,83699,83701,83703],{"class":36,"line":613},[34,83700,52790],{"class":40},[34,83702,52459],{"class":44},[34,83704,48],{"class":40},[34,83706,83707,83709,83712,83714],{"class":36,"line":618},[34,83708,11874],{"class":87},[34,83710,83711],{"class":63}," gift",[34,83713,14217],{"class":87},[34,83715,83716],{"class":156}," '50g的茶叶，清洗球'\n",[34,83718,83719],{"class":36,"line":628},[34,83720,83721],{"class":205},"    \u002F\u002F 1.把字符串拆分为数组\n",[34,83723,83724],{"class":36,"line":640},[34,83725,83726],{"class":205},"    \u002F\u002F console.log(gift.split(','))\n",[34,83728,83729],{"class":36,"line":2301},[34,83730,83731],{"class":205},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[34,83733,83734,83736,83738,83740,83743,83746,83748,83751,83753,83755,83757,83759,83761,83764,83766,83769,83771,83773,83775,83777],{"class":36,"line":2307},[34,83735,11874],{"class":87},[34,83737,74550],{"class":63},[34,83739,14217],{"class":87},[34,83741,83742],{"class":40}," gift.",[34,83744,83745],{"class":149},"split",[34,83747,801],{"class":40},[34,83749,83750],{"class":156},"'，'",[34,83752,31477],{"class":40},[34,83754,74675],{"class":149},[34,83756,801],{"class":40},[34,83758,80425],{"class":5869},[34,83760,80428],{"class":87},[34,83762,83763],{"class":156}," `\u003Cspan>【赠品】${",[34,83765,80425],{"class":40},[34,83767,83768],{"class":156},"}\u003C\u002Fspan>\u003Cbr>`",[34,83770,31477],{"class":40},[34,83772,74854],{"class":149},[34,83774,801],{"class":40},[34,83776,74859],{"class":156},[34,83778,807],{"class":40},[34,83780,83781,83783,83785,83787,83789,83791,83793],{"class":36,"line":2328},[34,83782,53053],{"class":40},[34,83784,55044],{"class":149},[34,83786,801],{"class":40},[34,83788,82561],{"class":156},[34,83790,74880],{"class":40},[34,83792,153],{"class":87},[34,83794,74616],{"class":40},[34,83796,83797,83799,83801],{"class":36,"line":2333},[34,83798,53063],{"class":40},[34,83800,52459],{"class":44},[34,83802,48],{"class":40},[34,83804,83805,83807,83809],{"class":36,"line":2347},[34,83806,102],{"class":40},[34,83808,52446],{"class":44},[34,83810,48],{"class":40},[34,83812,83813],{"class":36,"line":2352},[34,83814,3053],{"emptyLinePlaceholder":726},[34,83816,83817,83819,83821],{"class":36,"line":2381},[34,83818,102],{"class":40},[34,83820,51286],{"class":44},[34,83822,48],{"class":40},[22650,83824,83826],{"id":83825},"_41054-number","4.10.5.4 Number",[108,83828,83829],{},[2122,83830],{"alt":29,"src":83831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[108,83833,83834],{},"整数也可以进行toFixed来保留小数",[108,83836,83837],{},"比如：",[108,83839,83840],{},"const price=10",[108,83842,83843],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22650,83845,83847],{"id":83846},"_41055-购物车展示","4.10.5.5 购物车展示",[108,83849,83850],{},[2122,83851],{"alt":29,"src":83852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[24,83854,83856],{"className":51284,"code":83855,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,83857,83858,83868,83882,83886,83894,83908,83928,83940,83948,83954,83964,83974,83984,83988,83992,83998,84010,84024,84028,84032,84038,84050,84066,84076,84092,84096,84100,84106,84116,84126,84130,84134,84142,84154,84166,84178,84182,84186,84194,84206,84210,84214,84225,84235,84247,84259,84269,84273,84277,84285,84294,84306,84316,84326,84330,84334,84342,84351,84358,84368,84380,84384,84388,84397,84407,84418,84430,84442,84446,84450,84459,84469,84480,84484,84488,84494,84506,84518,84528,84538,84556,84568,84572,84576,84585,84597,84607,84617,84629,84633,84641,84649,84653,84661,84675,84683,84697,84725,84733,84741,84751,84755,84763,84771,84780,84788,84797,84807,84811,84815,84823,84831,84840,84848,84856,84869,84873,84877,84885,84893,84902,84910,84918,84933,84937,84941,84949,84957,84966,84974,84982,84996,85004,85008,85012,85017,85043,85048,85085,85090,85113,85118,85172,85177,85213,85217,85223,85228,85237,85251,85260,85279,85288,85298,85303,85308,85321,85326,85380,85406,85414,85422,85426],{"__ignoreMap":29},[34,83859,83860,83862,83864,83866],{"class":36,"line":37},[34,83861,51948],{"class":40},[34,83863,51951],{"class":44},[34,83865,51954],{"class":149},[34,83867,48],{"class":40},[34,83869,83870,83872,83874,83876,83878,83880],{"class":36,"line":51},[34,83871,41],{"class":40},[34,83873,51286],{"class":44},[34,83875,51965],{"class":149},[34,83877,153],{"class":40},[34,83879,51970],{"class":156},[34,83881,48],{"class":40},[34,83883,83884],{"class":36,"line":60},[34,83885,3053],{"emptyLinePlaceholder":726},[34,83887,83888,83890,83892],{"class":36,"line":76},[34,83889,41],{"class":40},[34,83891,51983],{"class":44},[34,83893,48],{"class":40},[34,83895,83896,83898,83900,83902,83904,83906],{"class":36,"line":93},[34,83897,52790],{"class":40},[34,83899,51993],{"class":44},[34,83901,51996],{"class":149},[34,83903,153],{"class":40},[34,83905,52001],{"class":156},[34,83907,48],{"class":40},[34,83909,83910,83912,83914,83916,83918,83920,83922,83924,83926],{"class":36,"line":99},[34,83911,52790],{"class":40},[34,83913,51993],{"class":44},[34,83915,15573],{"class":149},[34,83917,153],{"class":40},[34,83919,52040],{"class":156},[34,83921,52020],{"class":149},[34,83923,153],{"class":40},[34,83925,52047],{"class":156},[34,83927,48],{"class":40},[34,83929,83930,83932,83934,83936,83938],{"class":36,"line":353},[34,83931,52790],{"class":40},[34,83933,52056],{"class":44},[34,83935,52059],{"class":40},[34,83937,52056],{"class":44},[34,83939,48],{"class":40},[34,83941,83942,83944,83946],{"class":36,"line":359},[34,83943,52790],{"class":40},[34,83945,45],{"class":44},[34,83947,48],{"class":40},[34,83949,83950,83952],{"class":36,"line":579},[34,83951,7056],{"class":44},[34,83953,57],{"class":40},[34,83955,83956,83958,83960,83962],{"class":36,"line":589},[34,83957,55340],{"class":63},[34,83959,67],{"class":40},[34,83961,987],{"class":63},[34,83963,73],{"class":40},[34,83965,83966,83968,83970,83972],{"class":36,"line":601},[34,83967,55351],{"class":63},[34,83969,67],{"class":40},[34,83971,987],{"class":63},[34,83973,73],{"class":40},[34,83975,83976,83978,83980,83982],{"class":36,"line":613},[34,83977,73227],{"class":63},[34,83979,67],{"class":40},[34,83981,61148],{"class":63},[34,83983,73],{"class":40},[34,83985,83986],{"class":36,"line":618},[34,83987,2840],{"class":40},[34,83989,83990],{"class":36,"line":628},[34,83991,3053],{"emptyLinePlaceholder":726},[34,83993,83994,83996],{"class":36,"line":640},[34,83995,62763],{"class":149},[34,83997,57],{"class":40},[34,83999,84000,84002,84004,84006,84008],{"class":36,"line":2301},[34,84001,55415],{"class":63},[34,84003,67],{"class":40},[34,84005,79204],{"class":63},[34,84007,88],{"class":87},[34,84009,73],{"class":40},[34,84011,84012,84014,84016,84018,84020,84022],{"class":36,"line":2307},[34,84013,55351],{"class":63},[34,84015,67],{"class":40},[34,84017,1106],{"class":63},[34,84019,88],{"class":87},[34,84021,52203],{"class":63},[34,84023,73],{"class":40},[34,84025,84026],{"class":36,"line":2328},[34,84027,2840],{"class":40},[34,84029,84030],{"class":36,"line":2333},[34,84031,3053],{"emptyLinePlaceholder":726},[34,84033,84034,84036],{"class":36,"line":2347},[34,84035,79255],{"class":149},[34,84037,57],{"class":40},[34,84039,84040,84042,84044,84046,84048],{"class":36,"line":2352},[34,84041,55340],{"class":63},[34,84043,67],{"class":40},[34,84045,1370],{"class":63},[34,84047,88],{"class":87},[34,84049,73],{"class":40},[34,84051,84052,84054,84056,84058,84060,84062,84064],{"class":36,"line":2381},[34,84053,62501],{"class":63},[34,84055,67],{"class":40},[34,84057,28772],{"class":63},[34,84059,79310],{"class":63},[34,84061,79313],{"class":63},[34,84063,1490],{"class":87},[34,84065,73],{"class":40},[34,84067,84068,84070,84072,84074],{"class":36,"line":2386},[34,84069,55652],{"class":63},[34,84071,67],{"class":40},[34,84073,52125],{"class":63},[34,84075,73],{"class":40},[34,84077,84078,84080,84082,84084,84086,84088,84090],{"class":36,"line":2403},[34,84079,62617],{"class":63},[34,84081,67],{"class":40},[34,84083,1013],{"class":63},[34,84085,88],{"class":87},[34,84087,52168],{"class":63},[34,84089,62884],{"class":63},[34,84091,73],{"class":40},[34,84093,84094],{"class":36,"line":2408},[34,84095,2840],{"class":40},[34,84097,84098],{"class":36,"line":2413},[34,84099,3053],{"emptyLinePlaceholder":726},[34,84101,84102,84104],{"class":36,"line":2418},[34,84103,79373],{"class":149},[34,84105,57],{"class":40},[34,84107,84108,84110,84112,84114],{"class":36,"line":2432},[34,84109,62665],{"class":63},[34,84111,67],{"class":40},[34,84113,62670],{"class":63},[34,84115,73],{"class":40},[34,84117,84118,84120,84122,84124],{"class":36,"line":2437},[34,84119,55528],{"class":63},[34,84121,67],{"class":40},[34,84123,62459],{"class":63},[34,84125,73],{"class":40},[34,84127,84128],{"class":36,"line":3230},[34,84129,2840],{"class":40},[34,84131,84132],{"class":36,"line":3244},[34,84133,3053],{"emptyLinePlaceholder":726},[34,84135,84136,84138,84140],{"class":36,"line":3252},[34,84137,79255],{"class":149},[34,84139,56258],{"class":44},[34,84141,57],{"class":40},[34,84143,84144,84146,84148,84150,84152],{"class":36,"line":3257},[34,84145,55415],{"class":63},[34,84147,67],{"class":40},[34,84149,1407],{"class":63},[34,84151,88],{"class":87},[34,84153,73],{"class":40},[34,84155,84156,84158,84160,84162,84164],{"class":36,"line":3263},[34,84157,55429],{"class":63},[34,84159,67],{"class":40},[34,84161,1407],{"class":63},[34,84163,88],{"class":87},[34,84165,73],{"class":40},[34,84167,84168,84170,84172,84174,84176],{"class":36,"line":3269},[34,84169,62391],{"class":63},[34,84171,67],{"class":40},[34,84173,1114],{"class":63},[34,84175,88],{"class":87},[34,84177,73],{"class":40},[34,84179,84180],{"class":36,"line":3274},[34,84181,2840],{"class":40},[34,84183,84184],{"class":36,"line":8601},[34,84185,3053],{"emptyLinePlaceholder":726},[34,84187,84188,84190,84192],{"class":36,"line":8625},[34,84189,79255],{"class":149},[34,84191,62944],{"class":149},[34,84193,57],{"class":40},[34,84195,84196,84198,84200,84202,84204],{"class":36,"line":8630},[34,84197,55415],{"class":63},[34,84199,67],{"class":40},[34,84201,2376],{"class":63},[34,84203,88],{"class":87},[34,84205,73],{"class":40},[34,84207,84208],{"class":36,"line":8636},[34,84209,2840],{"class":40},[34,84211,84212],{"class":36,"line":8663},[34,84213,3053],{"emptyLinePlaceholder":726},[34,84215,84216,84218,84220,84223],{"class":36,"line":8668},[34,84217,79255],{"class":149},[34,84219,62944],{"class":149},[34,84221,84222],{"class":149}," .tag",[34,84224,57],{"class":40},[34,84226,84227,84229,84231,84233],{"class":36,"line":8674},[34,84228,55652],{"class":63},[34,84230,67],{"class":40},[34,84232,61512],{"class":63},[34,84234,73],{"class":40},[34,84236,84237,84239,84241,84243,84245],{"class":36,"line":8686},[34,84238,55340],{"class":63},[34,84240,67],{"class":40},[34,84242,875],{"class":63},[34,84244,88],{"class":87},[34,84246,73],{"class":40},[34,84248,84249,84251,84253,84255,84257],{"class":36,"line":8698},[34,84250,55565],{"class":63},[34,84252,67],{"class":40},[34,84254,1293],{"class":63},[34,84256,88],{"class":87},[34,84258,73],{"class":40},[34,84260,84261,84263,84265,84267],{"class":36,"line":8710},[34,84262,58059],{"class":63},[34,84264,67],{"class":40},[34,84266,62710],{"class":63},[34,84268,73],{"class":40},[34,84270,84271],{"class":36,"line":10369},[34,84272,2840],{"class":40},[34,84274,84275],{"class":36,"line":10394},[34,84276,3053],{"emptyLinePlaceholder":726},[34,84278,84279,84281,84283],{"class":36,"line":10417},[34,84280,79255],{"class":149},[34,84282,79547],{"class":149},[34,84284,32117],{"class":40},[34,84286,84287,84289,84292],{"class":36,"line":10441},[34,84288,79255],{"class":149},[34,84290,84291],{"class":149}," .sub-total",[34,84293,57],{"class":40},[34,84295,84296,84298,84300,84302,84304],{"class":36,"line":10446},[34,84297,55565],{"class":63},[34,84299,67],{"class":40},[34,84301,1445],{"class":63},[34,84303,88],{"class":87},[34,84305,73],{"class":40},[34,84307,84308,84310,84312,84314],{"class":36,"line":10451},[34,84309,58059],{"class":63},[34,84311,67],{"class":40},[34,84313,79570],{"class":63},[34,84315,73],{"class":40},[34,84317,84318,84320,84322,84324],{"class":36,"line":10456},[34,84319,62478],{"class":63},[34,84321,67],{"class":40},[34,84323,1013],{"class":63},[34,84325,73],{"class":40},[34,84327,84328],{"class":36,"line":10465},[34,84329,2840],{"class":40},[34,84331,84332],{"class":36,"line":10470},[34,84333,3053],{"emptyLinePlaceholder":726},[34,84335,84336,84338,84340],{"class":36,"line":10476},[34,84337,79255],{"class":149},[34,84339,79587],{"class":149},[34,84341,32117],{"class":40},[34,84343,84344,84346,84349],{"class":36,"line":10497},[34,84345,79255],{"class":149},[34,84347,84348],{"class":149}," .sub-total::before",[34,84350,32117],{"class":40},[34,84352,84353,84356],{"class":36,"line":10503},[34,84354,84355],{"class":149},"    .amount::before",[34,84357,57],{"class":40},[34,84359,84360,84362,84364,84366],{"class":36,"line":10517},[34,84361,79594],{"class":63},[34,84363,67],{"class":40},[34,84365,79599],{"class":156},[34,84367,73],{"class":40},[34,84369,84370,84372,84374,84376,84378],{"class":36,"line":10523},[34,84371,55565],{"class":63},[34,84373,67],{"class":40},[34,84375,1293],{"class":63},[34,84377,88],{"class":87},[34,84379,73],{"class":40},[34,84381,84382],{"class":36,"line":10550},[34,84383,2840],{"class":40},[34,84385,84386],{"class":36,"line":10559},[34,84387,3053],{"emptyLinePlaceholder":726},[34,84389,84390,84392,84395],{"class":36,"line":10565},[34,84391,79255],{"class":149},[34,84393,84394],{"class":149}," .spec",[34,84396,57],{"class":40},[34,84398,84399,84401,84403,84405],{"class":36,"line":10573},[34,84400,62478],{"class":63},[34,84402,67],{"class":40},[34,84404,875],{"class":63},[34,84406,73],{"class":40},[34,84408,84409,84411,84413,84416],{"class":36,"line":10578},[34,84410,58059],{"class":63},[34,84412,67],{"class":40},[34,84414,84415],{"class":63},"#888",[34,84417,73],{"class":40},[34,84419,84420,84422,84424,84426,84428],{"class":36,"line":17256},[34,84421,55565],{"class":63},[34,84423,67],{"class":40},[34,84425,1344],{"class":63},[34,84427,88],{"class":87},[34,84429,73],{"class":40},[34,84431,84432,84434,84436,84438,84440],{"class":36,"line":17262},[34,84433,62640],{"class":63},[34,84435,67],{"class":40},[34,84437,1495],{"class":63},[34,84439,88],{"class":87},[34,84441,73],{"class":40},[34,84443,84444],{"class":36,"line":17285},[34,84445,2840],{"class":40},[34,84447,84448],{"class":36,"line":17291},[34,84449,3053],{"emptyLinePlaceholder":726},[34,84451,84452,84454,84457],{"class":36,"line":17314},[34,84453,79255],{"class":149},[34,84455,84456],{"class":149}," .count",[34,84458,57],{"class":40},[34,84460,84461,84463,84465,84467],{"class":36,"line":17328},[34,84462,62478],{"class":63},[34,84464,67],{"class":40},[34,84466,1013],{"class":63},[34,84468,73],{"class":40},[34,84470,84471,84473,84475,84478],{"class":36,"line":17348},[34,84472,58059],{"class":63},[34,84474,67],{"class":40},[34,84476,84477],{"class":63},"#aaa",[34,84479,73],{"class":40},[34,84481,84482],{"class":36,"line":17354},[34,84483,2840],{"class":40},[34,84485,84486],{"class":36,"line":17365},[34,84487,3053],{"emptyLinePlaceholder":726},[34,84489,84490,84492],{"class":36,"line":17388},[34,84491,73106],{"class":149},[34,84493,57],{"class":40},[34,84495,84496,84498,84500,84502,84504],{"class":36,"line":17410},[34,84497,55415],{"class":63},[34,84499,67],{"class":40},[34,84501,79204],{"class":63},[34,84503,88],{"class":87},[34,84505,73],{"class":40},[34,84507,84508,84510,84512,84514,84516],{"class":36,"line":17415},[34,84509,55351],{"class":63},[34,84511,67],{"class":40},[34,84513,987],{"class":63},[34,84515,52203],{"class":63},[34,84517,73],{"class":40},[34,84519,84520,84522,84524,84526],{"class":36,"line":17421},[34,84521,55652],{"class":63},[34,84523,67],{"class":40},[34,84525,52125],{"class":63},[34,84527,73],{"class":40},[34,84529,84530,84532,84534,84536],{"class":36,"line":17435},[34,84531,55663],{"class":63},[34,84533,67],{"class":40},[34,84535,52227],{"class":63},[34,84537,73],{"class":40},[34,84539,84540,84543,84545,84547,84549,84551,84554],{"class":36,"line":17448},[34,84541,84542],{"class":63},"      border-top",[34,84544,67],{"class":40},[34,84546,1013],{"class":63},[34,84548,88],{"class":87},[34,84550,52168],{"class":63},[34,84552,84553],{"class":63}," #4e4e4e",[34,84555,73],{"class":40},[34,84557,84558,84560,84562,84564,84566],{"class":36,"line":17453},[34,84559,55340],{"class":63},[34,84561,67],{"class":40},[34,84563,1495],{"class":63},[34,84565,88],{"class":87},[34,84567,73],{"class":40},[34,84569,84570],{"class":36,"line":17467},[34,84571,2840],{"class":40},[34,84573,84574],{"class":36,"line":17472},[34,84575,3053],{"emptyLinePlaceholder":726},[34,84577,84578,84580,84583],{"class":36,"line":17478},[34,84579,73106],{"class":149},[34,84581,84582],{"class":149}," .amount",[34,84584,57],{"class":40},[34,84586,84587,84589,84591,84593,84595],{"class":36,"line":17483},[34,84588,55565],{"class":63},[34,84590,67],{"class":40},[34,84592,1445],{"class":63},[34,84594,88],{"class":87},[34,84596,73],{"class":40},[34,84598,84599,84601,84603,84605],{"class":36,"line":17497},[34,84600,58059],{"class":63},[34,84602,67],{"class":40},[34,84604,79570],{"class":63},[34,84606,73],{"class":40},[34,84608,84609,84611,84613,84615],{"class":36,"line":17502},[34,84610,62974],{"class":63},[34,84612,67],{"class":40},[34,84614,52137],{"class":63},[34,84616,73],{"class":40},[34,84618,84619,84621,84623,84625,84627],{"class":36,"line":17507},[34,84620,62391],{"class":63},[34,84622,67],{"class":40},[34,84624,1451],{"class":63},[34,84626,88],{"class":87},[34,84628,73],{"class":40},[34,84630,84631],{"class":36,"line":17521},[34,84632,2840],{"class":40},[34,84634,84635,84637,84639],{"class":36,"line":17533},[34,84636,53063],{"class":40},[34,84638,45],{"class":44},[34,84640,48],{"class":40},[34,84642,84643,84645,84647],{"class":36,"line":17538},[34,84644,102],{"class":40},[34,84646,51983],{"class":44},[34,84648,48],{"class":40},[34,84650,84651],{"class":36,"line":17551},[34,84652,3053],{"emptyLinePlaceholder":726},[34,84654,84655,84657,84659],{"class":36,"line":17556},[34,84656,41],{"class":40},[34,84658,52446],{"class":44},[34,84660,48],{"class":40},[34,84662,84663,84665,84667,84669,84671,84673],{"class":36,"line":17561},[34,84664,52790],{"class":40},[34,84666,52258],{"class":44},[34,84668,54132],{"class":149},[34,84670,153],{"class":40},[34,84672,63247],{"class":156},[34,84674,48],{"class":40},[34,84676,84677,84679,84681],{"class":36,"line":17566},[34,84678,53063],{"class":40},[34,84680,52258],{"class":44},[34,84682,48],{"class":40},[34,84684,84685,84687,84689,84691,84693,84695],{"class":36,"line":17579},[34,84686,52790],{"class":40},[34,84688,52258],{"class":44},[34,84690,54132],{"class":149},[34,84692,153],{"class":40},[34,84694,63219],{"class":156},[34,84696,48],{"class":40},[34,84698,84699,84701,84703,84706,84708,84710,84712,84715,84717,84719,84721,84723],{"class":36,"line":17584},[34,84700,51990],{"class":40},[34,84702,52258],{"class":44},[34,84704,84705],{"class":40},">合计：\u003C",[34,84707,34],{"class":44},[34,84709,54132],{"class":149},[34,84711,153],{"class":40},[34,84713,84714],{"class":156},"\"amount\"",[34,84716,55957],{"class":40},[34,84718,34],{"class":44},[34,84720,55957],{"class":40},[34,84722,52258],{"class":44},[34,84724,48],{"class":40},[34,84726,84727,84729,84731],{"class":36,"line":33284},[34,84728,53063],{"class":40},[34,84730,52258],{"class":44},[34,84732,48],{"class":40},[34,84734,84735,84737,84739],{"class":36,"line":33290},[34,84736,52790],{"class":40},[34,84738,52459],{"class":44},[34,84740,48],{"class":40},[34,84742,84743,84745,84747,84749],{"class":36,"line":33296},[34,84744,11874],{"class":87},[34,84746,80007],{"class":63},[34,84748,14217],{"class":87},[34,84750,56090],{"class":40},[34,84752,84753],{"class":36,"line":33302},[34,84754,80016],{"class":40},[34,84756,84757,84759,84761],{"class":36,"line":33308},[34,84758,80021],{"class":40},[34,84760,80024],{"class":156},[34,84762,32117],{"class":40},[34,84764,84765,84767,84769],{"class":36,"line":33319},[34,84766,80031],{"class":40},[34,84768,80034],{"class":156},[34,84770,32117],{"class":40},[34,84772,84773,84775,84778],{"class":36,"line":33325},[34,84774,80041],{"class":40},[34,84776,84777],{"class":63},"289.9",[34,84779,32117],{"class":40},[34,84781,84782,84784,84786],{"class":36,"line":33345},[34,84783,80051],{"class":40},[34,84785,80054],{"class":156},[34,84787,32117],{"class":40},[34,84789,84790,84793,84795],{"class":36,"line":33351},[34,84791,84792],{"class":40},"        count: ",[34,84794,875],{"class":63},[34,84796,32117],{"class":40},[34,84798,84799,84802,84805],{"class":36,"line":33362},[34,84800,84801],{"class":40},"        spec: { color: ",[34,84803,84804],{"class":156},"'白色'",[34,84806,56247],{"class":40},[34,84808,84809],{"class":36,"line":33368},[34,84810,78522],{"class":40},[34,84812,84813],{"class":36,"line":33374},[34,84814,80016],{"class":40},[34,84816,84817,84819,84821],{"class":36,"line":33380},[34,84818,80021],{"class":40},[34,84820,80115],{"class":156},[34,84822,32117],{"class":40},[34,84824,84825,84827,84829],{"class":36,"line":33386},[34,84826,80031],{"class":40},[34,84828,80124],{"class":156},[34,84830,32117],{"class":40},[34,84832,84833,84835,84838],{"class":36,"line":33392},[34,84834,80041],{"class":40},[34,84836,84837],{"class":63},"109.8",[34,84839,32117],{"class":40},[34,84841,84842,84844,84846],{"class":36,"line":33398},[34,84843,80051],{"class":40},[34,84845,80142],{"class":156},[34,84847,32117],{"class":40},[34,84849,84850,84852,84854],{"class":36,"line":33404},[34,84851,84792],{"class":40},[34,84853,869],{"class":63},[34,84855,32117],{"class":40},[34,84857,84858,84861,84863,84865,84867],{"class":36,"line":33424},[34,84859,84860],{"class":40},"        spec: { size: ",[34,84862,82533],{"class":156},[34,84864,56107],{"class":40},[34,84866,82538],{"class":156},[34,84868,56247],{"class":40},[34,84870,84871],{"class":36,"line":33430},[34,84872,78522],{"class":40},[34,84874,84875],{"class":36,"line":33446},[34,84876,80016],{"class":40},[34,84878,84879,84881,84883],{"class":36,"line":33452},[34,84880,80021],{"class":40},[34,84882,80159],{"class":156},[34,84884,32117],{"class":40},[34,84886,84887,84889,84891],{"class":36,"line":33466},[34,84888,80031],{"class":40},[34,84890,80168],{"class":156},[34,84892,32117],{"class":40},[34,84894,84895,84897,84900],{"class":36,"line":33472},[34,84896,80041],{"class":40},[34,84898,84899],{"class":63},"488",[34,84901,32117],{"class":40},[34,84903,84904,84906,84908],{"class":36,"line":33487},[34,84905,80051],{"class":40},[34,84907,80186],{"class":156},[34,84909,32117],{"class":40},[34,84911,84912,84914,84916],{"class":36,"line":33493},[34,84913,84792],{"class":40},[34,84915,1013],{"class":63},[34,84917,32117],{"class":40},[34,84919,84920,84922,84925,84928,84931],{"class":36,"line":33502},[34,84921,84801],{"class":40},[34,84923,84924],{"class":156},"'青色'",[34,84926,84927],{"class":40},", sum: ",[34,84929,84930],{"class":156},"'一大四小'",[34,84932,56247],{"class":40},[34,84934,84935],{"class":36,"line":33508},[34,84936,78522],{"class":40},[34,84938,84939],{"class":36,"line":33517},[34,84940,80016],{"class":40},[34,84942,84943,84945,84947],{"class":36,"line":33523},[34,84944,80021],{"class":40},[34,84946,80203],{"class":156},[34,84948,32117],{"class":40},[34,84950,84951,84953,84955],{"class":36,"line":33529},[34,84952,80031],{"class":40},[34,84954,80212],{"class":156},[34,84956,32117],{"class":40},[34,84958,84959,84961,84964],{"class":36,"line":33538},[34,84960,80041],{"class":40},[34,84962,84963],{"class":63},"139",[34,84965,32117],{"class":40},[34,84967,84968,84970,84972],{"class":36,"line":33544},[34,84969,80051],{"class":40},[34,84971,80230],{"class":156},[34,84973,32117],{"class":40},[34,84975,84976,84978,84980],{"class":36,"line":33555},[34,84977,84792],{"class":40},[34,84979,1013],{"class":63},[34,84981,32117],{"class":40},[34,84983,84984,84986,84989,84991,84994],{"class":36,"line":33561},[34,84985,84860],{"class":40},[34,84987,84988],{"class":156},"'小号'",[34,84990,56107],{"class":40},[34,84992,84993],{"class":156},"'紫色'",[34,84995,56113],{"class":40},[34,84997,84998,85001],{"class":36,"line":33580},[34,84999,85000],{"class":40},"        gift: ",[34,85002,85003],{"class":156},"'50g茶叶,清洗球'\n",[34,85005,85006],{"class":36,"line":33586},[34,85007,53044],{"class":40},[34,85009,85010],{"class":36,"line":33597},[34,85011,53755],{"class":40},[34,85013,85014],{"class":36,"line":33603},[34,85015,85016],{"class":205},"    \u002F\u002F  1.根据数据渲染页面\n",[34,85018,85019,85021,85023,85025,85027,85029,85031,85033,85035,85037,85039,85041],{"class":36,"line":33623},[34,85020,53053],{"class":40},[34,85022,55044],{"class":149},[34,85024,801],{"class":40},[34,85026,80531],{"class":156},[34,85028,74880],{"class":40},[34,85030,153],{"class":87},[34,85032,80678],{"class":40},[34,85034,74675],{"class":149},[34,85036,801],{"class":40},[34,85038,80425],{"class":5869},[34,85040,80428],{"class":87},[34,85042,57],{"class":40},[34,85044,85045],{"class":36,"line":33639},[34,85046,85047],{"class":205},"      \u002F\u002F 对象解构\n",[34,85049,85050,85052,85054,85056,85058,85060,85062,85065,85067,85069,85071,85074,85076,85079,85081,85083],{"class":36,"line":33645},[34,85051,58871],{"class":87},[34,85053,80437],{"class":40},[34,85055,80450],{"class":63},[34,85057,13088],{"class":40},[34,85059,80440],{"class":63},[34,85061,13088],{"class":40},[34,85063,85064],{"class":63},"count",[34,85066,13088],{"class":40},[34,85068,80445],{"class":63},[34,85070,13088],{"class":40},[34,85072,85073],{"class":63},"spec",[34,85075,13088],{"class":40},[34,85077,85078],{"class":63},"gift",[34,85080,80453],{"class":40},[34,85082,153],{"class":87},[34,85084,80458],{"class":40},[34,85086,85087],{"class":36,"line":33659},[34,85088,85089],{"class":205},"      \u002F\u002F 规格文字模块处理\n",[34,85091,85092,85094,85097,85099,85101,85103,85105,85107,85109,85111],{"class":36,"line":33665},[34,85093,58871],{"class":87},[34,85095,85096],{"class":63}," text",[34,85098,14217],{"class":87},[34,85100,82568],{"class":40},[34,85102,82571],{"class":149},[34,85104,82574],{"class":40},[34,85106,74854],{"class":149},[34,85108,801],{"class":40},[34,85110,82581],{"class":156},[34,85112,807],{"class":40},[34,85114,85115],{"class":36,"line":33671},[34,85116,85117],{"class":205},"      \u002F\u002F 处理赠品模块\n",[34,85119,85120,85122,85124,85126,85129,85131,85133,85135,85137,85140,85142,85144,85146,85148,85150,85153,85155,85158,85160,85162,85164,85166,85168,85170],{"class":36,"line":33682},[34,85121,58871],{"class":87},[34,85123,74550],{"class":63},[34,85125,14217],{"class":87},[34,85127,85128],{"class":40}," gift ",[34,85130,1779],{"class":87},[34,85132,83742],{"class":40},[34,85134,83745],{"class":149},[34,85136,801],{"class":40},[34,85138,85139],{"class":156},"','",[34,85141,31477],{"class":40},[34,85143,74675],{"class":149},[34,85145,801],{"class":40},[34,85147,80425],{"class":5869},[34,85149,80428],{"class":87},[34,85151,85152],{"class":156}," `\u003Cspan class=\"tag\">【赠品】${",[34,85154,80425],{"class":40},[34,85156,85157],{"class":156},"}\u003C\u002Fspan>`",[34,85159,31477],{"class":40},[34,85161,74854],{"class":149},[34,85163,801],{"class":40},[34,85165,74859],{"class":156},[34,85167,14367],{"class":40},[34,85169,1653],{"class":87},[34,85171,70739],{"class":156},[34,85173,85174],{"class":36,"line":33688},[34,85175,85176],{"class":205},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[34,85178,85179,85181,85184,85186,85189,85191,85193,85195,85198,85200,85202,85204,85207,85209,85211],{"class":36,"line":33694},[34,85180,58871],{"class":87},[34,85182,85183],{"class":63}," subtotal",[34,85185,14217],{"class":87},[34,85187,85188],{"class":40}," ((price ",[34,85190,1250],{"class":87},[34,85192,6407],{"class":63},[34,85194,7171],{"class":87},[34,85196,85197],{"class":40}," count) ",[34,85199,1379],{"class":87},[34,85201,6407],{"class":63},[34,85203,31477],{"class":40},[34,85205,85206],{"class":149},"toFixed",[34,85208,801],{"class":40},[34,85210,875],{"class":63},[34,85212,807],{"class":40},[34,85214,85215],{"class":36,"line":33704},[34,85216,3053],{"emptyLinePlaceholder":726},[34,85218,85219,85221],{"class":36,"line":33710},[34,85220,74613],{"class":87},[34,85222,70803],{"class":156},[34,85224,85225],{"class":36,"line":33721},[34,85226,85227],{"class":156},"        \u003Cdiv class=\"item\">\n",[34,85229,85230,85233,85235],{"class":36,"line":33727},[34,85231,85232],{"class":156},"          \u003Cimg src=\"${",[34,85234,80450],{"class":40},[34,85236,80482],{"class":156},[34,85238,85239,85242,85244,85247,85249],{"class":36,"line":33737},[34,85240,85241],{"class":156},"          \u003Cp class=\"name\">${",[34,85243,80440],{"class":40},[34,85245,85246],{"class":156},"}${",[34,85248,1962],{"class":40},[34,85250,80492],{"class":156},[34,85252,85253,85256,85258],{"class":36,"line":33742},[34,85254,85255],{"class":156},"          \u003Cp class=\"spec\">${",[34,85257,5840],{"class":40},[34,85259,80492],{"class":156},[34,85261,85262,85265,85267,85269,85271,85273,85275,85277],{"class":36,"line":33748},[34,85263,85264],{"class":156},"          \u003Cp class=\"price\">${",[34,85266,80445],{"class":40},[34,85268,1353],{"class":156},[34,85270,85206],{"class":149},[34,85272,801],{"class":156},[34,85274,875],{"class":63},[34,85276,1224],{"class":156},[34,85278,80492],{"class":156},[34,85280,85281,85284,85286],{"class":36,"line":33797},[34,85282,85283],{"class":156},"          \u003Cp class=\"count\">x${",[34,85285,85064],{"class":40},[34,85287,80492],{"class":156},[34,85289,85290,85293,85296],{"class":36,"line":33844},[34,85291,85292],{"class":156},"          \u003Cp class=\"sub-total\">${",[34,85294,85295],{"class":40},"subtotal",[34,85297,80492],{"class":156},[34,85299,85300],{"class":36,"line":33849},[34,85301,85302],{"class":156},"        \u003C\u002Fdiv> \n",[34,85304,85305],{"class":36,"line":33855},[34,85306,85307],{"class":156},"             `\n",[34,85309,85310,85313,85315,85317,85319],{"class":36,"line":33874},[34,85311,85312],{"class":40},"    }).",[34,85314,74854],{"class":149},[34,85316,801],{"class":40},[34,85318,74859],{"class":156},[34,85320,807],{"class":40},[34,85322,85323],{"class":36,"line":33880},[34,85324,85325],{"class":205},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[34,85327,85328,85330,85332,85334,85336,85339,85341,85344,85346,85348,85350,85353,85356,85358,85361,85363,85365,85367,85370,85372,85374,85376,85378],{"class":36,"line":33900},[34,85329,11874],{"class":87},[34,85331,63423],{"class":63},[34,85333,14217],{"class":87},[34,85335,80678],{"class":40},[34,85337,85338],{"class":149},"reduce",[34,85340,3029],{"class":40},[34,85342,85343],{"class":5869},"prev",[34,85345,13088],{"class":40},[34,85347,80425],{"class":5869},[34,85349,14367],{"class":40},[34,85351,85352],{"class":87},"=>",[34,85354,85355],{"class":40}," prev ",[34,85357,1276],{"class":87},[34,85359,85360],{"class":40}," (item.price ",[34,85362,1250],{"class":87},[34,85364,6407],{"class":63},[34,85366,7171],{"class":87},[34,85368,85369],{"class":40}," item.count) ",[34,85371,1379],{"class":87},[34,85373,6407],{"class":63},[34,85375,13088],{"class":40},[34,85377,987],{"class":63},[34,85379,807],{"class":40},[34,85381,85382,85384,85386,85388,85391,85393,85395,85398,85400,85402,85404],{"class":36,"line":33906},[34,85383,53053],{"class":40},[34,85385,55044],{"class":149},[34,85387,801],{"class":40},[34,85389,85390],{"class":156},"'.amount'",[34,85392,74880],{"class":40},[34,85394,153],{"class":87},[34,85396,85397],{"class":40}," total.",[34,85399,85206],{"class":149},[34,85401,801],{"class":40},[34,85403,875],{"class":63},[34,85405,807],{"class":40},[34,85407,85408,85410,85412],{"class":36,"line":33912},[34,85409,53063],{"class":40},[34,85411,52459],{"class":44},[34,85413,48],{"class":40},[34,85415,85416,85418,85420],{"class":36,"line":33922},[34,85417,102],{"class":40},[34,85419,52446],{"class":44},[34,85421,48],{"class":40},[34,85423,85424],{"class":36,"line":33927},[34,85425,3053],{"emptyLinePlaceholder":726},[34,85427,85428,85430,85432],{"class":36,"line":33933},[34,85429,102],{"class":40},[34,85431,51286],{"class":44},[34,85433,48],{"class":40},[14,85435,85437],{"id":85436},"_411-编程思想","4.11 编程思想",[19,85439,85441],{"id":85440},"_4111-面向过程介绍","4.11.1 面向过程介绍",[108,85443,85444,85447],{},[111,85445,85446],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[108,85449,85450],{},"调用就可以了",[108,85452,85453],{},[2122,85454],{"alt":29,"src":85455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[19,85457,85459],{"id":85458},"_4112-面向对象","4.11.2 面向对象",[108,85461,85462],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[108,85464,85465],{},[2122,85466],{"alt":29,"src":85467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[108,85469,85470],{},"面向对象的特性：",[1800,85472,85473,85476,85479],{},[755,85474,85475],{},"封装性",[755,85477,85478],{},"继承性",[755,85480,85481],{},"多态性",[19,85483,85485],{"id":85484},"_4113-两者比较","4.11.3 两者比较",[108,85487,85488],{},[2122,85489],{"alt":29,"src":85490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85492,85494],{"id":85493},"_412-构造函数回顾","4.12 构造函数回顾",[108,85496,85497],{},[2122,85498],{"alt":29,"src":85499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[108,85501,85502],{},[2122,85503],{"alt":29,"src":85504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[108,85506,85507],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[108,85509,85510],{},[2122,85511],{"alt":29,"src":85512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85514,85516],{"id":85515},"_413-原型","4.13 原型",[19,85518,85520],{"id":85519},"_4131-原型对象的认识","4.13.1 原型对象的认识",[108,85522,85523],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[108,85525,85526],{},[2122,85527],{"alt":29,"src":85528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[108,85530,85531],{},[2122,85532],{"alt":29,"src":85533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[108,85535,85536],{},"原型是构造函数的属性，它也是一个对象",[108,85538,85539],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[108,85541,85542],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[24,85544,85546],{"className":53713,"code":85545,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,85547,85548,85556,85561,85569,85574,85579,85584,85589,85594,85598,85602,85606,85611,85616,85620,85625,85630,85635,85640,85645,85649,85657],{"__ignoreMap":29},[34,85549,85550,85552,85554],{"class":36,"line":37},[34,85551,41],{"class":40},[34,85553,52446],{"class":44},[34,85555,48],{"class":40},[34,85557,85558],{"class":36,"line":51},[34,85559,85560],{"class":205},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[34,85562,85563,85565,85567],{"class":36,"line":60},[34,85564,52790],{"class":40},[34,85566,52459],{"class":44},[34,85568,48],{"class":40},[34,85570,85571],{"class":36,"line":76},[34,85572,85573],{"class":40},"    function Star(uname, age) {\n",[34,85575,85576],{"class":36,"line":93},[34,85577,85578],{"class":40},"      this.uname = uname,\n",[34,85580,85581],{"class":36,"line":99},[34,85582,85583],{"class":40},"        this.age = age\n",[34,85585,85586],{"class":36,"line":353},[34,85587,85588],{"class":40},"      \u002F\u002F this.sing = function () {\n",[34,85590,85591],{"class":36,"line":359},[34,85592,85593],{"class":40},"      \u002F\u002F   console.log('唱歌')\n",[34,85595,85596],{"class":36,"line":579},[34,85597,3053],{"emptyLinePlaceholder":726},[34,85599,85600],{"class":36,"line":589},[34,85601,60680],{"class":40},[34,85603,85604],{"class":36,"line":601},[34,85605,2840],{"class":40},[34,85607,85608],{"class":36,"line":613},[34,85609,85610],{"class":40},"    Star.prototype.sing = function () {\n",[34,85612,85613],{"class":36,"line":618},[34,85614,85615],{"class":40},"      console.log('唱歌')\n",[34,85617,85618],{"class":36,"line":628},[34,85619,2840],{"class":40},[34,85621,85622],{"class":36,"line":640},[34,85623,85624],{"class":40},"    \u002F\u002F console.dir(Star.prototype)\n",[34,85626,85627],{"class":36,"line":2301},[34,85628,85629],{"class":40},"    const pink = new Star('pink', 18)\n",[34,85631,85632],{"class":36,"line":2307},[34,85633,85634],{"class":40},"    const red = new Star('red', 20)\n",[34,85636,85637],{"class":36,"line":2328},[34,85638,85639],{"class":40},"    pink.sing()\n",[34,85641,85642],{"class":36,"line":2333},[34,85643,85644],{"class":40},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[34,85646,85647],{"class":36,"line":2347},[34,85648,3053],{"emptyLinePlaceholder":726},[34,85650,85651,85653,85655],{"class":36,"line":2352},[34,85652,53063],{"class":40},[34,85654,52459],{"class":44},[34,85656,48],{"class":40},[34,85658,85659,85661,85663],{"class":36,"line":2381},[34,85660,102],{"class":40},[34,85662,52446],{"class":44},[34,85664,48],{"class":40},[108,85666,85667],{},[2122,85668],{"alt":29,"src":85669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[24,85671,85673],{"className":53713,"code":85672,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,85674,85675,85683,85691,85696,85701,85706,85711,85715,85720,85725,85730,85734,85739,85743,85747,85752,85756,85764],{"__ignoreMap":29},[34,85676,85677,85679,85681],{"class":36,"line":37},[34,85678,41],{"class":40},[34,85680,52446],{"class":44},[34,85682,48],{"class":40},[34,85684,85685,85687,85689],{"class":36,"line":51},[34,85686,52790],{"class":40},[34,85688,52459],{"class":44},[34,85690,48],{"class":40},[34,85692,85693],{"class":36,"line":60},[34,85694,85695],{"class":40},"    let that\n",[34,85697,85698],{"class":36,"line":76},[34,85699,85700],{"class":40},"    function Star(uname) {\n",[34,85702,85703],{"class":36,"line":93},[34,85704,85705],{"class":40},"      this.uname = uname\n",[34,85707,85708],{"class":36,"line":99},[34,85709,85710],{"class":40},"      that = this\n",[34,85712,85713],{"class":36,"line":353},[34,85714,2840],{"class":40},[34,85716,85717],{"class":36,"line":359},[34,85718,85719],{"class":40},"    \u002F\u002F 实例对象是 ldh\n",[34,85721,85722],{"class":36,"line":579},[34,85723,85724],{"class":40},"    const ldh = new Star('刘德华')\n",[34,85726,85727],{"class":36,"line":589},[34,85728,85729],{"class":40},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[34,85731,85732],{"class":36,"line":601},[34,85733,3053],{"emptyLinePlaceholder":726},[34,85735,85736],{"class":36,"line":613},[34,85737,85738],{"class":40},"    Star.sing = function () {\n",[34,85740,85741],{"class":36,"line":618},[34,85742,85615],{"class":40},[34,85744,85745],{"class":36,"line":628},[34,85746,2840],{"class":40},[34,85748,85749],{"class":36,"line":640},[34,85750,85751],{"class":40},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[34,85753,85754],{"class":36,"line":2301},[34,85755,3053],{"emptyLinePlaceholder":726},[34,85757,85758,85760,85762],{"class":36,"line":2307},[34,85759,53063],{"class":40},[34,85761,52459],{"class":44},[34,85763,48],{"class":40},[34,85765,85766,85768,85770],{"class":36,"line":2328},[34,85767,102],{"class":40},[34,85769,52446],{"class":44},[34,85771,48],{"class":40},[108,85773,85774],{},"构造函数的this指向的是实例对象；",[108,85776,85777],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[19,85779,85781],{"id":85780},"_4132-数组扩展方法","4.13.2 数组扩展方法",[108,85783,85784],{},[2122,85785],{"alt":29,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[24,85788,85790],{"className":53713,"code":85789,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,85791,85792,85800,85808,85813,85818,85823,85828,85833,85838,85843,85848,85853,85858,85862,85867,85872,85877,85882,85886,85891,85896,85901,85906,85910,85915,85920,85925,85930,85934,85939,85943,85951],{"__ignoreMap":29},[34,85793,85794,85796,85798],{"class":36,"line":37},[34,85795,41],{"class":40},[34,85797,52446],{"class":44},[34,85799,48],{"class":40},[34,85801,85802,85804,85806],{"class":36,"line":51},[34,85803,52790],{"class":40},[34,85805,52459],{"class":44},[34,85807,48],{"class":40},[34,85809,85810],{"class":36,"line":60},[34,85811,85812],{"class":40},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[34,85814,85815],{"class":36,"line":76},[34,85816,85817],{"class":40},"    const arr = [1, 2, 3]\n",[34,85819,85820],{"class":36,"line":93},[34,85821,85822],{"class":40},"    \u002F\u002F 自己定义数组的扩展方法\n",[34,85824,85825],{"class":36,"line":99},[34,85826,85827],{"class":40},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[34,85829,85830],{"class":36,"line":353},[34,85831,85832],{"class":40},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[34,85834,85835],{"class":36,"line":359},[34,85836,85837],{"class":40},"    \u002F\u002F ①.最大值\n",[34,85839,85840],{"class":36,"line":579},[34,85841,85842],{"class":40},"    Array.prototype.max = function () {\n",[34,85844,85845],{"class":36,"line":589},[34,85846,85847],{"class":40},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[34,85849,85850],{"class":36,"line":601},[34,85851,85852],{"class":40},"      return Math.max(...this)\n",[34,85854,85855],{"class":36,"line":613},[34,85856,85857],{"class":40},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[34,85859,85860],{"class":36,"line":618},[34,85861,2840],{"class":40},[34,85863,85864],{"class":36,"line":628},[34,85865,85866],{"class":40},"    console.log(arr.max())\n",[34,85868,85869],{"class":36,"line":640},[34,85870,85871],{"class":40},"    \u002F\u002F ②最小值\n",[34,85873,85874],{"class":36,"line":2301},[34,85875,85876],{"class":40},"    Array.prototype.min = function () {\n",[34,85878,85879],{"class":36,"line":2307},[34,85880,85881],{"class":40},"      return Math.min(...this)\n",[34,85883,85884],{"class":36,"line":2328},[34,85885,2840],{"class":40},[34,85887,85888],{"class":36,"line":2333},[34,85889,85890],{"class":40},"    console.log(arr.min())\n",[34,85892,85893],{"class":36,"line":2347},[34,85894,85895],{"class":40},"    \u002F\u002F③求和\n",[34,85897,85898],{"class":36,"line":2352},[34,85899,85900],{"class":40},"    Array.prototype.sum = function () {\n",[34,85902,85903],{"class":36,"line":2381},[34,85904,85905],{"class":40},"      return this.reduce((prev, current) => prev + current, 0)\n",[34,85907,85908],{"class":36,"line":2386},[34,85909,2840],{"class":40},[34,85911,85912],{"class":36,"line":2403},[34,85913,85914],{"class":40},"    console.log(arr.sum())\n",[34,85916,85917],{"class":36,"line":2408},[34,85918,85919],{"class":40},"    \u002F\u002F ③排序\n",[34,85921,85922],{"class":36,"line":2413},[34,85923,85924],{"class":40},"    Array.prototype.rever = function () {\n",[34,85926,85927],{"class":36,"line":2418},[34,85928,85929],{"class":40},"      return this.reverse()\n",[34,85931,85932],{"class":36,"line":2432},[34,85933,2840],{"class":40},[34,85935,85936],{"class":36,"line":2437},[34,85937,85938],{"class":40},"    console.log(arr.rever())\n",[34,85940,85941],{"class":36,"line":3230},[34,85942,3053],{"emptyLinePlaceholder":726},[34,85944,85945,85947,85949],{"class":36,"line":3244},[34,85946,53063],{"class":40},[34,85948,52459],{"class":44},[34,85950,48],{"class":40},[34,85952,85953,85955,85957],{"class":36,"line":3252},[34,85954,102],{"class":40},[34,85956,52446],{"class":44},[34,85958,48],{"class":40},[108,85960,85961],{},[2122,85962],{"alt":29,"src":85963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[19,85965,85967],{"id":85966},"_4133-constructor-属性","4.13.3 constructor 属性",[108,85969,85970],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[108,85972,85973],{},[2122,85974],{"alt":29,"src":85975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[24,85977,85979],{"className":53713,"code":85978,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,85980,85981,85989,85997,86002,86007,86011,86016,86021,86026,86034],{"__ignoreMap":29},[34,85982,85983,85985,85987],{"class":36,"line":37},[34,85984,41],{"class":40},[34,85986,52446],{"class":44},[34,85988,48],{"class":40},[34,85990,85991,85993,85995],{"class":36,"line":51},[34,85992,52790],{"class":40},[34,85994,52459],{"class":44},[34,85996,48],{"class":40},[34,85998,85999],{"class":36,"line":60},[34,86000,86001],{"class":40},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[34,86003,86004],{"class":36,"line":76},[34,86005,86006],{"class":40},"    function Star() {\n",[34,86008,86009],{"class":36,"line":93},[34,86010,2840],{"class":40},[34,86012,86013],{"class":36,"line":99},[34,86014,86015],{"class":40},"    const ldh = new Star()\n",[34,86017,86018],{"class":36,"line":353},[34,86019,86020],{"class":40},"    console.log(Star.prototype)\n",[34,86022,86023],{"class":36,"line":359},[34,86024,86025],{"class":40},"    console.log(Star.prototype.constructor === Star)\n",[34,86027,86028,86030,86032],{"class":36,"line":579},[34,86029,53063],{"class":40},[34,86031,52459],{"class":44},[34,86033,48],{"class":40},[34,86035,86036,86038,86040],{"class":36,"line":589},[34,86037,102],{"class":40},[34,86039,52446],{"class":44},[34,86041,48],{"class":40},[108,86043,86044],{},[2122,86045],{"alt":29,"src":86046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[108,86048,86049],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[24,86051,86053],{"className":53713,"code":86052,"language":53715,"meta":29,"style":29},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[31,86054,86055,86063,86067,86071,86075,86080,86085,86090,86094,86099,86104,86109,86114,86119,86124,86128,86132,86137,86142,86147,86151,86156,86161,86165,86169,86173],{"__ignoreMap":29},[34,86056,86057,86059,86061],{"class":36,"line":37},[34,86058,52790],{"class":40},[34,86060,52459],{"class":44},[34,86062,48],{"class":40},[34,86064,86065],{"class":36,"line":51},[34,86066,86001],{"class":40},[34,86068,86069],{"class":36,"line":60},[34,86070,86006],{"class":40},[34,86072,86073],{"class":36,"line":76},[34,86074,2840],{"class":40},[34,86076,86077],{"class":36,"line":93},[34,86078,86079],{"class":40},"    \u002F\u002F const ldh = new Star()\n",[34,86081,86082],{"class":36,"line":99},[34,86083,86084],{"class":40},"    \u002F\u002F console.log(Star.prototype)\n",[34,86086,86087],{"class":36,"line":353},[34,86088,86089],{"class":40},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[34,86091,86092],{"class":36,"line":359},[34,86093,3053],{"emptyLinePlaceholder":726},[34,86095,86096],{"class":36,"line":579},[34,86097,86098],{"class":40},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[34,86100,86101],{"class":36,"line":589},[34,86102,86103],{"class":40},"    \u002F\u002F Star.prototype.sing = function () {\n",[34,86105,86106],{"class":36,"line":601},[34,86107,86108],{"class":40},"    \u002F\u002F   console.log('唱歌')\n",[34,86110,86111],{"class":36,"line":613},[34,86112,86113],{"class":40},"    \u002F\u002F }\n",[34,86115,86116],{"class":36,"line":618},[34,86117,86118],{"class":40},"    \u002F\u002F Star.prototype.dance = function () {\n",[34,86120,86121],{"class":36,"line":628},[34,86122,86123],{"class":40},"    \u002F\u002F   console.log('跳舞')\n",[34,86125,86126],{"class":36,"line":640},[34,86127,86113],{"class":40},[34,86129,86130],{"class":36,"line":2301},[34,86131,86020],{"class":40},[34,86133,86134],{"class":36,"line":2307},[34,86135,86136],{"class":40},"    Star.prototype = {\n",[34,86138,86139],{"class":36,"line":2328},[34,86140,86141],{"class":40},"      sing: function () {\n",[34,86143,86144],{"class":36,"line":2333},[34,86145,86146],{"class":40},"        console.log('唱歌')\n",[34,86148,86149],{"class":36,"line":2347},[34,86150,78522],{"class":40},[34,86152,86153],{"class":36,"line":2352},[34,86154,86155],{"class":40},"      dance: function () {\n",[34,86157,86158],{"class":36,"line":2381},[34,86159,86160],{"class":40},"        console.log('跳舞')\n",[34,86162,86163],{"class":36,"line":2386},[34,86164,53044],{"class":40},[34,86166,86167],{"class":36,"line":2403},[34,86168,2840],{"class":40},[34,86170,86171],{"class":36,"line":2408},[34,86172,86020],{"class":40},[34,86174,86175,86177,86179],{"class":36,"line":2413},[34,86176,53063],{"class":40},[34,86178,52459],{"class":44},[34,86180,48],{"class":40},[108,86182,86183],{},"进行输出结果后会发现：",[108,86185,86186],{},[2122,86187],{"alt":29,"src":86188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[108,86190,86191],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[108,86193,86194],{},"所以，要重新指回创造这个原型对象的构造函数",[24,86196,86198],{"className":71844,"code":86197,"language":71846,"meta":29,"style":29},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[31,86199,86200,86214,86219,86224,86235,86248,86253,86264,86278,86282],{"__ignoreMap":29},[34,86201,86202,86205,86207,86210,86212],{"class":36,"line":37},[34,86203,86204],{"class":63},"Star",[34,86206,1353],{"class":40},[34,86208,86209],{"class":63},"prototype",[34,86211,14217],{"class":87},[34,86213,57],{"class":40},[34,86215,86216],{"class":36,"line":51},[34,86217,86218],{"class":205},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[34,86220,86221],{"class":36,"line":60},[34,86222,86223],{"class":40},"  constructor: Star,\n",[34,86225,86226,86229,86231,86233],{"class":36,"line":76},[34,86227,86228],{"class":149},"  sing",[34,86230,67],{"class":40},[34,86232,55094],{"class":87},[34,86234,55097],{"class":40},[34,86236,86237,86239,86241,86243,86246],{"class":36,"line":93},[34,86238,74384],{"class":40},[34,86240,58890],{"class":149},[34,86242,801],{"class":40},[34,86244,86245],{"class":156},"'唱歌'",[34,86247,807],{"class":40},[34,86249,86250],{"class":36,"line":99},[34,86251,86252],{"class":40},"   },\n",[34,86254,86255,86258,86260,86262],{"class":36,"line":353},[34,86256,86257],{"class":149},"   dance",[34,86259,67],{"class":40},[34,86261,55094],{"class":87},[34,86263,55097],{"class":40},[34,86265,86266,86269,86271,86273,86276],{"class":36,"line":359},[34,86267,86268],{"class":40},"     console.",[34,86270,58890],{"class":149},[34,86272,801],{"class":40},[34,86274,86275],{"class":156},"'跳舞'",[34,86277,807],{"class":40},[34,86279,86280],{"class":36,"line":579},[34,86281,4962],{"class":40},[34,86283,86284],{"class":36,"line":589},[34,86285,241],{"class":40},[108,86287,86288],{},[2122,86289],{"alt":29,"src":86290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[108,86292,86293],{},"总结1：",[108,86295,86296],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[108,86298,86299],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[108,86301,86302],{},"constructor指的是他的来源",[108,86304,86305],{},[2122,86306],{"alt":29,"src":86307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[108,86309,86310],{},[2122,86311],{"alt":29,"src":86312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[108,86314,86315],{},"总结2：",[108,86317,86318],{},[2122,86319],{"alt":29,"src":86320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[108,86322,86323],{},[2122,86324],{"alt":29,"src":86325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[108,86327,86328],{},[2122,86329],{"alt":29,"src":86330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[19,86332,86334],{"id":86333},"_4134-对象原型","4.13.4 对象原型",[108,86336,86337],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[108,86339,86340],{},"对象原型就是__proto__这个属性",[108,86342,86343],{},[2122,86344],{"alt":29,"src":86345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[108,86347,86348],{},[2122,86349],{"alt":29,"src":86350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[108,86352,86353],{},[2122,86354],{"alt":29,"src":86355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[108,86357,86358],{},[2122,86359],{"alt":29,"src":86360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[24,86362,86364],{"className":53713,"code":86363,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,86365,86366,86374,86382,86386,86390,86394,86399,86407],{"__ignoreMap":29},[34,86367,86368,86370,86372],{"class":36,"line":37},[34,86369,41],{"class":40},[34,86371,52446],{"class":44},[34,86373,48],{"class":40},[34,86375,86376,86378,86380],{"class":36,"line":51},[34,86377,52790],{"class":40},[34,86379,52459],{"class":44},[34,86381,48],{"class":40},[34,86383,86384],{"class":36,"line":60},[34,86385,86006],{"class":40},[34,86387,86388],{"class":36,"line":76},[34,86389,2840],{"class":40},[34,86391,86392],{"class":36,"line":93},[34,86393,86015],{"class":40},[34,86395,86396],{"class":36,"line":99},[34,86397,86398],{"class":40},"    console.log(ldh)\n",[34,86400,86401,86403,86405],{"class":36,"line":353},[34,86402,53063],{"class":40},[34,86404,52459],{"class":44},[34,86406,48],{"class":40},[34,86408,86409,86411,86413],{"class":36,"line":359},[34,86410,102],{"class":40},[34,86412,52446],{"class":44},[34,86414,48],{"class":40},[108,86416,86417],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[108,86419,86420],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[108,86422,86423],{},[2122,86424],{"alt":29,"src":86425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[108,86427,86428],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[108,86430,86431],{},"对象原型指向原型对象",[108,86433,86434],{},[2122,86435],{"alt":29,"src":86436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[108,86438,86439],{},[2122,86440],{"alt":29,"src":86441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[108,86443,86444],{},[2122,86445],{"alt":29,"src":86446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[19,86448,86450],{"id":86449},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[108,86452,86453],{},[2122,86454],{"alt":29,"src":86455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[752,86457,86458,86461,86464,86467],{},[755,86459,86460],{},"构造函数通过new的形式实例化得到实例对象",[755,86462,86463],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[755,86465,86466],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[755,86468,86469],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[108,86471,86472],{},[2122,86473],{"alt":29,"src":86474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[108,86476,86477],{},"题目梳理：",[108,86479,86480],{},[2122,86481],{"alt":29,"src":86482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[19,86484,86486],{"id":86485},"_4136-原型继承","4.13.6 原型继承",[108,86488,86489],{},[2122,86490],{"alt":29,"src":86491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[108,86493,86494],{},[2122,86495],{"alt":29,"src":86496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[108,86498,86499],{},[2122,86500],{"alt":29,"src":86501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[108,86503,86504],{},[2122,86505],{"alt":29,"src":86506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[108,86508,86509],{},[2122,86510],{"alt":29,"src":86511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[108,86513,86514],{},[2122,86515],{"alt":29,"src":86516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[108,86518,86519],{},[2122,86520],{"alt":29,"src":86521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[108,86523,86524],{},[2122,86525],{"alt":29,"src":86526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[108,86528,86529],{},"回顾：构造函数每次new得到对象都是不同的",[19,86531,86533],{"id":86532},"_4137-原型链","4.13.7 原型链",[108,86535,86536],{},[2122,86537],{"alt":29,"src":86538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[108,86540,86541],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[108,86543,86544],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[108,86546,86547],{},"大哥是Object",[108,86549,86550],{},[2122,86551],{"alt":29,"src":86552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[108,86554,86555],{},[2122,86556],{"alt":29,"src":86557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[108,86559,86560],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[108,86562,86563],{},"万物皆对象",[19,86565,86567],{"id":86566},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[108,86569,86570],{},"模态框",[108,86572,86573],{},"以后遇见这个效果直接使用这个就行",[108,86575,86576],{},[2122,86577],{"alt":29,"src":86578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[108,86580,86581],{},[2122,86582],{"alt":29,"src":86583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[108,86585,86586],{},[2122,86587],{"alt":29,"src":86588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[108,86590,86591],{},[2122,86592],{"alt":29,"src":86593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[108,86595,86596],{},"补充知识点：",[752,86598,86599],{},[755,86600,86601],{},"append()",[108,86603,86604],{},[2122,86605],{"alt":29,"src":86606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[24,86608,86610],{"className":51284,"code":86609,"language":51286,"meta":29,"style":29},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[31,86611,86612,86617,86622,86627,86631,86635,86639,86644,86649,86654,86658],{"__ignoreMap":29},[34,86613,86614],{"class":36,"line":37},[34,86615,86616],{"class":40},"append(param1)\n",[34,86618,86619],{"class":36,"line":51},[34,86620,86621],{"class":40},"append(param1, param2)\n",[34,86623,86624],{"class":36,"line":60},[34,86625,86626],{"class":40},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[34,86628,86629],{"class":36,"line":76},[34,86630,3053],{"emptyLinePlaceholder":726},[34,86632,86633],{"class":36,"line":93},[34,86634,3053],{"emptyLinePlaceholder":726},[34,86636,86637],{"class":36,"line":99},[34,86638,3053],{"emptyLinePlaceholder":726},[34,86640,86641],{"class":36,"line":353},[34,86642,86643],{"class":40},"let div = document.createElement(\"div\");\n",[34,86645,86646],{"class":36,"line":359},[34,86647,86648],{"class":40},"let p = document.createElement(\"p\");\n",[34,86650,86651],{"class":36,"line":579},[34,86652,86653],{"class":40},"div.append(p);\n",[34,86655,86656],{"class":36,"line":589},[34,86657,3053],{"emptyLinePlaceholder":726},[34,86659,86660,86663,86665],{"class":36,"line":601},[34,86661,86662],{"class":40},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[34,86664,108],{"class":44},[34,86666,86667],{"class":40},"> ]\n",[752,86669,86670],{"start":51},[755,86671,86672],{},"remove()",[108,86674,86675],{},"自己删自己",[108,86677,86678],{},[2122,86679],{"alt":29,"src":86680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[24,86682,86684],{"className":51284,"code":86683,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,86685,86686,86696,86710,86714,86722,86736,86756,86768,86776,86783,86795,86808,86843,86855,86866,86878,86890,86902,86929,86939,86943,86947,86956,86968,86982,86992,87004,87008,87012,87022,87033,87043,87053,87066,87079,87089,87093,87097,87106,87116,87128,87132,87136,87145,87155,87165,87177,87181,87185,87195,87211,87222,87232,87242,87254,87266,87278,87282,87286,87299,87310,87314,87322,87330,87334,87342,87362,87382,87390,87395,87421,87426,87431,87450,87455,87467,87472,87483,87493,87503,87508,87513,87517,87522,87527,87532,87552,87557,87577,87582,87596,87601,87606,87611,87627,87631,87636,87665,87670,87675,87680,87691,87695,87699,87703,87708,87733,87738,87763,87768,87777,87781,87786,87811,87815,87840,87844,87853,87857,87862,87880,87890,87894,87902,87910,87914],{"__ignoreMap":29},[34,86687,86688,86690,86692,86694],{"class":36,"line":37},[34,86689,51948],{"class":40},[34,86691,51951],{"class":44},[34,86693,51954],{"class":149},[34,86695,48],{"class":40},[34,86697,86698,86700,86702,86704,86706,86708],{"class":36,"line":51},[34,86699,41],{"class":40},[34,86701,51286],{"class":44},[34,86703,51965],{"class":149},[34,86705,153],{"class":40},[34,86707,51970],{"class":156},[34,86709,48],{"class":40},[34,86711,86712],{"class":36,"line":60},[34,86713,3053],{"emptyLinePlaceholder":726},[34,86715,86716,86718,86720],{"class":36,"line":76},[34,86717,41],{"class":40},[34,86719,51983],{"class":44},[34,86721,48],{"class":40},[34,86723,86724,86726,86728,86730,86732,86734],{"class":36,"line":93},[34,86725,52790],{"class":40},[34,86727,51993],{"class":44},[34,86729,51996],{"class":149},[34,86731,153],{"class":40},[34,86733,52001],{"class":156},[34,86735,48],{"class":40},[34,86737,86738,86740,86742,86744,86746,86748,86750,86752,86754],{"class":36,"line":99},[34,86739,52790],{"class":40},[34,86741,51993],{"class":44},[34,86743,15573],{"class":149},[34,86745,153],{"class":40},[34,86747,52040],{"class":156},[34,86749,52020],{"class":149},[34,86751,153],{"class":40},[34,86753,52047],{"class":156},[34,86755,48],{"class":40},[34,86757,86758,86760,86762,86764,86766],{"class":36,"line":353},[34,86759,52790],{"class":40},[34,86761,52056],{"class":44},[34,86763,52059],{"class":40},[34,86765,52056],{"class":44},[34,86767,48],{"class":40},[34,86769,86770,86772,86774],{"class":36,"line":359},[34,86771,52790],{"class":40},[34,86773,45],{"class":44},[34,86775,48],{"class":40},[34,86777,86778,86781],{"class":36,"line":579},[34,86779,86780],{"class":149},"    .modal",[34,86782,57],{"class":40},[34,86784,86785,86787,86789,86791,86793],{"class":36,"line":589},[34,86786,55415],{"class":63},[34,86788,67],{"class":40},[34,86790,4626],{"class":63},[34,86792,88],{"class":87},[34,86794,73],{"class":40},[34,86796,86797,86800,86802,86804,86806],{"class":36,"line":601},[34,86798,86799],{"class":63},"      min-height",[34,86801,67],{"class":40},[34,86803,1106],{"class":63},[34,86805,88],{"class":87},[34,86807,73],{"class":40},[34,86809,86810,86812,86814,86816,86818,86820,86822,86824,86826,86828,86830,86832,86834,86836,86838,86841],{"class":36,"line":613},[34,86811,79380],{"class":63},[34,86813,67],{"class":40},[34,86815,987],{"class":63},[34,86817,4746],{"class":63},[34,86819,2691],{"class":63},[34,86821,88],{"class":87},[34,86823,79397],{"class":63},[34,86825,801],{"class":40},[34,86827,987],{"class":63},[34,86829,13088],{"class":40},[34,86831,987],{"class":63},[34,86833,13088],{"class":40},[34,86835,987],{"class":63},[34,86837,13088],{"class":40},[34,86839,86840],{"class":63},"0.1",[34,86842,3372],{"class":40},[34,86844,86845,86847,86849,86851,86853],{"class":36,"line":618},[34,86846,55777],{"class":63},[34,86848,67],{"class":40},[34,86850,1088],{"class":63},[34,86852,88],{"class":87},[34,86854,73],{"class":40},[34,86856,86857,86859,86861,86864],{"class":36,"line":628},[34,86858,55403],{"class":63},[34,86860,67],{"class":40},[34,86862,86863],{"class":63},"fixed",[34,86865,73],{"class":40},[34,86867,86868,86871,86873,86876],{"class":36,"line":640},[34,86869,86870],{"class":63},"      z-index",[34,86872,67],{"class":40},[34,86874,86875],{"class":63},"999",[34,86877,73],{"class":40},[34,86879,86880,86882,86884,86886,86888],{"class":36,"line":2301},[34,86881,55482],{"class":63},[34,86883,67],{"class":40},[34,86885,1451],{"class":63},[34,86887,1123],{"class":87},[34,86889,73],{"class":40},[34,86891,86892,86894,86896,86898,86900],{"class":36,"line":2307},[34,86893,55590],{"class":63},[34,86895,67],{"class":40},[34,86897,1451],{"class":63},[34,86899,1123],{"class":87},[34,86901,73],{"class":40},[34,86903,86904,86906,86908,86910,86912,86915,86917,86919,86921,86923,86925,86927],{"class":36,"line":2328},[34,86905,79421],{"class":63},[34,86907,67],{"class":40},[34,86909,79426],{"class":63},[34,86911,801],{"class":40},[34,86913,86914],{"class":63},"-50",[34,86916,1123],{"class":87},[34,86918,13088],{"class":40},[34,86920,86914],{"class":63},[34,86922,1123],{"class":87},[34,86924,13088],{"class":40},[34,86926,987],{"class":63},[34,86928,3372],{"class":40},[34,86930,86931,86933,86935,86937],{"class":36,"line":2333},[34,86932,55528],{"class":63},[34,86934,67],{"class":40},[34,86936,61485],{"class":63},[34,86938,73],{"class":40},[34,86940,86941],{"class":36,"line":2347},[34,86942,2840],{"class":40},[34,86944,86945],{"class":36,"line":2352},[34,86946,3053],{"emptyLinePlaceholder":726},[34,86948,86949,86951,86954],{"class":36,"line":2381},[34,86950,86780],{"class":149},[34,86952,86953],{"class":149}," .header",[34,86955,57],{"class":40},[34,86957,86958,86960,86962,86964,86966],{"class":36,"line":2386},[34,86959,58002],{"class":63},[34,86961,67],{"class":40},[34,86963,1196],{"class":63},[34,86965,88],{"class":87},[34,86967,73],{"class":40},[34,86969,86970,86972,86974,86976,86978,86980],{"class":36,"line":2403},[34,86971,55340],{"class":63},[34,86973,67],{"class":40},[34,86975,987],{"class":63},[34,86977,2691],{"class":63},[34,86979,88],{"class":87},[34,86981,73],{"class":40},[34,86983,86984,86986,86988,86990],{"class":36,"line":2408},[34,86985,55403],{"class":63},[34,86987,67],{"class":40},[34,86989,55408],{"class":63},[34,86991,73],{"class":40},[34,86993,86994,86996,86998,87000,87002],{"class":36,"line":2413},[34,86995,55565],{"class":63},[34,86997,67],{"class":40},[34,86999,1495],{"class":63},[34,87001,88],{"class":87},[34,87003,73],{"class":40},[34,87005,87006],{"class":36,"line":2418},[34,87007,2840],{"class":40},[34,87009,87010],{"class":36,"line":2432},[34,87011,3053],{"emptyLinePlaceholder":726},[34,87013,87014,87016,87018,87020],{"class":36,"line":2437},[34,87015,86780],{"class":149},[34,87017,86953],{"class":149},[34,87019,3685],{"class":44},[34,87021,57],{"class":40},[34,87023,87024,87027,87029,87031],{"class":36,"line":3230},[34,87025,87026],{"class":63},"      font-style",[34,87028,67],{"class":40},[34,87030,64479],{"class":63},[34,87032,73],{"class":40},[34,87034,87035,87037,87039,87041],{"class":36,"line":3244},[34,87036,58059],{"class":63},[34,87038,67],{"class":40},[34,87040,62710],{"class":63},[34,87042,73],{"class":40},[34,87044,87045,87047,87049,87051],{"class":36,"line":3252},[34,87046,55403],{"class":63},[34,87048,67],{"class":40},[34,87050,55475],{"class":63},[34,87052,73],{"class":40},[34,87054,87055,87058,87060,87062,87064],{"class":36,"line":3257},[34,87056,87057],{"class":63},"      right",[34,87059,67],{"class":40},[34,87061,1370],{"class":63},[34,87063,88],{"class":87},[34,87065,73],{"class":40},[34,87067,87068,87070,87072,87075,87077],{"class":36,"line":3263},[34,87069,55590],{"class":63},[34,87071,67],{"class":40},[34,87073,87074],{"class":63},"-2",[34,87076,88],{"class":87},[34,87078,73],{"class":40},[34,87080,87081,87083,87085,87087],{"class":36,"line":3269},[34,87082,62665],{"class":63},[34,87084,67],{"class":40},[34,87086,62670],{"class":63},[34,87088,73],{"class":40},[34,87090,87091],{"class":36,"line":3274},[34,87092,2840],{"class":40},[34,87094,87095],{"class":36,"line":8601},[34,87096,3053],{"emptyLinePlaceholder":726},[34,87098,87099,87101,87104],{"class":36,"line":8625},[34,87100,86780],{"class":149},[34,87102,87103],{"class":149}," .body",[34,87105,57],{"class":40},[34,87107,87108,87110,87112,87114],{"class":36,"line":8630},[34,87109,57929],{"class":63},[34,87111,67],{"class":40},[34,87113,52239],{"class":63},[34,87115,73],{"class":40},[34,87117,87118,87120,87122,87124,87126],{"class":36,"line":8636},[34,87119,55340],{"class":63},[34,87121,67],{"class":40},[34,87123,1241],{"class":63},[34,87125,88],{"class":87},[34,87127,73],{"class":40},[34,87129,87130],{"class":36,"line":8663},[34,87131,2840],{"class":40},[34,87133,87134],{"class":36,"line":8668},[34,87135,3053],{"emptyLinePlaceholder":726},[34,87137,87138,87140,87143],{"class":36,"line":8674},[34,87139,86780],{"class":149},[34,87141,87142],{"class":149}," .footer",[34,87144,57],{"class":40},[34,87146,87147,87149,87151,87153],{"class":36,"line":8686},[34,87148,55652],{"class":63},[34,87150,67],{"class":40},[34,87152,52125],{"class":63},[34,87154,73],{"class":40},[34,87156,87157,87159,87161,87163],{"class":36,"line":8698},[34,87158,55663],{"class":63},[34,87160,67],{"class":40},[34,87162,52227],{"class":63},[34,87164,73],{"class":40},[34,87166,87167,87169,87171,87173,87175],{"class":36,"line":8710},[34,87168,55340],{"class":63},[34,87170,67],{"class":40},[34,87172,1241],{"class":63},[34,87174,88],{"class":87},[34,87176,73],{"class":40},[34,87178,87179],{"class":36,"line":10369},[34,87180,2840],{"class":40},[34,87182,87183],{"class":36,"line":10394},[34,87184,3053],{"emptyLinePlaceholder":726},[34,87186,87187,87189,87191,87193],{"class":36,"line":10417},[34,87188,86780],{"class":149},[34,87190,87142],{"class":149},[34,87192,2058],{"class":44},[34,87194,57],{"class":40},[34,87196,87197,87199,87201,87203,87205,87207,87209],{"class":36,"line":10441},[34,87198,55340],{"class":63},[34,87200,67],{"class":40},[34,87202,869],{"class":63},[34,87204,88],{"class":87},[34,87206,2736],{"class":63},[34,87208,88],{"class":87},[34,87210,73],{"class":40},[34,87212,87213,87215,87217,87220],{"class":36,"line":10446},[34,87214,62362],{"class":63},[34,87216,67],{"class":40},[34,87218,87219],{"class":63},"#ccc",[34,87221,73],{"class":40},[34,87223,87224,87226,87228,87230],{"class":36,"line":10451},[34,87225,64608],{"class":63},[34,87227,67],{"class":40},[34,87229,546],{"class":63},[34,87231,73],{"class":40},[34,87233,87234,87236,87238,87240],{"class":36,"line":10456},[34,87235,58059],{"class":63},[34,87237,67],{"class":40},[34,87239,61485],{"class":63},[34,87241,73],{"class":40},[34,87243,87244,87246,87248,87250,87252],{"class":36,"line":10465},[34,87245,55777],{"class":63},[34,87247,67],{"class":40},[34,87249,875],{"class":63},[34,87251,88],{"class":87},[34,87253,73],{"class":40},[34,87255,87256,87258,87260,87262,87264],{"class":36,"line":10470},[34,87257,62391],{"class":63},[34,87259,67],{"class":40},[34,87261,1241],{"class":63},[34,87263,88],{"class":87},[34,87265,73],{"class":40},[34,87267,87268,87270,87272,87274,87276],{"class":36,"line":10476},[34,87269,55565],{"class":63},[34,87271,67],{"class":40},[34,87273,1344],{"class":63},[34,87275,88],{"class":87},[34,87277,73],{"class":40},[34,87279,87280],{"class":36,"line":10497},[34,87281,2840],{"class":40},[34,87283,87284],{"class":36,"line":10503},[34,87285,3053],{"emptyLinePlaceholder":726},[34,87287,87288,87290,87292,87294,87297],{"class":36,"line":10517},[34,87289,86780],{"class":149},[34,87291,87142],{"class":149},[34,87293,2058],{"class":44},[34,87295,87296],{"class":149},".submit",[34,87298,57],{"class":40},[34,87300,87301,87303,87305,87308],{"class":36,"line":10523},[34,87302,55528],{"class":63},[34,87304,67],{"class":40},[34,87306,87307],{"class":63},"#369",[34,87309,73],{"class":40},[34,87311,87312],{"class":36,"line":10550},[34,87313,2840],{"class":40},[34,87315,87316,87318,87320],{"class":36,"line":10559},[34,87317,53063],{"class":40},[34,87319,45],{"class":44},[34,87321,48],{"class":40},[34,87323,87324,87326,87328],{"class":36,"line":10565},[34,87325,102],{"class":40},[34,87327,51983],{"class":44},[34,87329,48],{"class":40},[34,87331,87332],{"class":36,"line":10573},[34,87333,3053],{"emptyLinePlaceholder":726},[34,87335,87336,87338,87340],{"class":36,"line":10578},[34,87337,41],{"class":40},[34,87339,52446],{"class":44},[34,87341,48],{"class":40},[34,87343,87344,87346,87348,87350,87352,87355,87358,87360],{"class":36,"line":17256},[34,87345,52790],{"class":40},[34,87347,54532],{"class":44},[34,87349,15612],{"class":149},[34,87351,153],{"class":40},[34,87353,87354],{"class":156},"\"delete\"",[34,87356,87357],{"class":40},">删除\u003C\u002F",[34,87359,54532],{"class":44},[34,87361,48],{"class":40},[34,87363,87364,87366,87368,87370,87372,87375,87378,87380],{"class":36,"line":17262},[34,87365,52790],{"class":40},[34,87367,54532],{"class":44},[34,87369,15612],{"class":149},[34,87371,153],{"class":40},[34,87373,87374],{"class":156},"\"login\"",[34,87376,87377],{"class":40},">登录\u003C\u002F",[34,87379,54532],{"class":44},[34,87381,48],{"class":40},[34,87383,87384,87386,87388],{"class":36,"line":17285},[34,87385,52790],{"class":40},[34,87387,52459],{"class":44},[34,87389,48],{"class":40},[34,87391,87392],{"class":36,"line":17291},[34,87393,87394],{"class":205},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[34,87396,87397,87399,87402,87404,87406,87408,87410,87412,87415,87417,87419],{"class":36,"line":17314},[34,87398,70719],{"class":87},[34,87400,87401],{"class":149}," Modal",[34,87403,801],{"class":40},[34,87405,52056],{"class":5869},[34,87407,14217],{"class":87},[34,87409,70565],{"class":156},[34,87411,13088],{"class":40},[34,87413,87414],{"class":5869},"message",[34,87416,14217],{"class":87},[34,87418,70565],{"class":156},[34,87420,13095],{"class":40},[34,87422,87423],{"class":36,"line":17328},[34,87424,87425],{"class":205},"      \u002F\u002F 创建Model 模态框盒子\n",[34,87427,87428],{"class":36,"line":17348},[34,87429,87430],{"class":205},"      \u002F\u002F 1.1 创建div标签\n",[34,87432,87433,87435,87438,87440,87442,87444,87446,87448],{"class":36,"line":17354},[34,87434,70686],{"class":63},[34,87436,87437],{"class":40},".modalBox ",[34,87439,153],{"class":87},[34,87441,55041],{"class":40},[34,87443,70786],{"class":149},[34,87445,801],{"class":40},[34,87447,82561],{"class":156},[34,87449,807],{"class":40},[34,87451,87452],{"class":36,"line":17365},[34,87453,87454],{"class":205},"      \u002F\u002F 1.2 给div 添加类名为model\n",[34,87456,87457,87459,87462,87464],{"class":36,"line":17388},[34,87458,70686],{"class":63},[34,87460,87461],{"class":40},".modalBox.className ",[34,87463,153],{"class":87},[34,87465,87466],{"class":156}," 'modal'\n",[34,87468,87469],{"class":36,"line":17410},[34,87470,87471],{"class":205},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[34,87473,87474,87476,87479,87481],{"class":36,"line":17415},[34,87475,70686],{"class":63},[34,87477,87478],{"class":40},".modalBox.innerHTML ",[34,87480,153],{"class":87},[34,87482,70803],{"class":156},[34,87484,87485,87488,87490],{"class":36,"line":17421},[34,87486,87487],{"class":156},"        \u003Cdiv class=\"header\">${",[34,87489,52056],{"class":40},[34,87491,87492],{"class":156},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[34,87494,87495,87498,87500],{"class":36,"line":17435},[34,87496,87497],{"class":156},"        \u003Cdiv class=\"body\">${",[34,87499,87414],{"class":40},[34,87501,87502],{"class":156},"}\u003C\u002Fdiv>\n",[34,87504,87505],{"class":36,"line":17448},[34,87506,87507],{"class":156},"      `\n",[34,87509,87510],{"class":36,"line":17453},[34,87511,87512],{"class":205},"      \u002F\u002F console.log(this.modalBox)\n",[34,87514,87515],{"class":36,"line":17467},[34,87516,2840],{"class":40},[34,87518,87519],{"class":36,"line":17472},[34,87520,87521],{"class":205},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[34,87523,87524],{"class":36,"line":17478},[34,87525,87526],{"class":205},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[34,87528,87529],{"class":36,"line":17483},[34,87530,87531],{"class":205},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[34,87533,87534,87537,87539,87541,87543,87546,87548,87550],{"class":36,"line":17497},[34,87535,87536],{"class":63},"    Modal",[34,87538,1353],{"class":40},[34,87540,86209],{"class":63},[34,87542,1353],{"class":40},[34,87544,87545],{"class":149},"open",[34,87547,14217],{"class":87},[34,87549,59561],{"class":87},[34,87551,55097],{"class":40},[34,87553,87554],{"class":36,"line":17502},[34,87555,87556],{"class":205},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[34,87558,87559,87561,87564,87566,87568,87570,87572,87575],{"class":36,"line":17507},[34,87560,58871],{"class":87},[34,87562,87563],{"class":63}," box",[34,87565,14217],{"class":87},[34,87567,55041],{"class":40},[34,87569,55044],{"class":149},[34,87571,801],{"class":40},[34,87573,87574],{"class":156},"'.modal'",[34,87576,807],{"class":40},[34,87578,87579],{"class":36,"line":17521},[34,87580,87581],{"class":205},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[34,87583,87584,87587,87589,87592,87594],{"class":36,"line":17533},[34,87585,87586],{"class":40},"      box ",[34,87588,2369],{"class":87},[34,87590,87591],{"class":40}," box.",[34,87593,57649],{"class":149},[34,87595,2629],{"class":40},[34,87597,87598],{"class":36,"line":17538},[34,87599,87600],{"class":205},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[34,87602,87603],{"class":36,"line":17551},[34,87604,87605],{"class":205},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[34,87607,87608],{"class":36,"line":17556},[34,87609,87610],{"class":205},"      \u002F\u002F append可以增加对象\n",[34,87612,87613,87616,87619,87621,87624],{"class":36,"line":17561},[34,87614,87615],{"class":40},"      document.body.",[34,87617,87618],{"class":149},"append",[34,87620,801],{"class":40},[34,87622,87623],{"class":63},"this",[34,87625,87626],{"class":40},".modalBox)\n",[34,87628,87629],{"class":36,"line":17566},[34,87630,3053],{"emptyLinePlaceholder":726},[34,87632,87633],{"class":36,"line":17579},[34,87634,87635],{"class":205},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[34,87637,87638,87640,87643,87645,87647,87650,87652,87654,87656,87658,87661,87663],{"class":36,"line":17584},[34,87639,70686],{"class":63},[34,87641,87642],{"class":40},".modalBox.",[34,87644,55044],{"class":149},[34,87646,801],{"class":40},[34,87648,87649],{"class":156},"'i'",[34,87651,31477],{"class":40},[34,87653,58456],{"class":149},[34,87655,801],{"class":40},[34,87657,58461],{"class":156},[34,87659,87660],{"class":40},", () ",[34,87662,85352],{"class":87},[34,87664,57],{"class":40},[34,87666,87667],{"class":36,"line":33284},[34,87668,87669],{"class":205},"        \u002F\u002F 这个地方需要用到箭头函数\n",[34,87671,87672],{"class":36,"line":33290},[34,87673,87674],{"class":205},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[34,87676,87677],{"class":36,"line":33296},[34,87678,87679],{"class":205},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[34,87681,87682,87684,87686,87689],{"class":36,"line":33302},[34,87683,65364],{"class":63},[34,87685,1353],{"class":40},[34,87687,87688],{"class":149},"close",[34,87690,2629],{"class":40},[34,87692,87693],{"class":36,"line":33308},[34,87694,65453],{"class":40},[34,87696,87697],{"class":36,"line":33319},[34,87698,2840],{"class":40},[34,87700,87701],{"class":36,"line":33325},[34,87702,3053],{"emptyLinePlaceholder":726},[34,87704,87705],{"class":36,"line":33345},[34,87706,87707],{"class":205},"    \u002F\u002F 测试一下 点击 删除按钮\n",[34,87709,87710,87712,87714,87716,87719,87721,87723,87725,87727,87729,87731],{"class":36,"line":33351},[34,87711,53053],{"class":40},[34,87713,55044],{"class":149},[34,87715,801],{"class":40},[34,87717,87718],{"class":156},"'#delete'",[34,87720,31477],{"class":40},[34,87722,58456],{"class":149},[34,87724,801],{"class":40},[34,87726,58461],{"class":156},[34,87728,87660],{"class":40},[34,87730,85352],{"class":87},[34,87732,57],{"class":40},[34,87734,87735],{"class":36,"line":33362},[34,87736,87737],{"class":205},"      \u002F\u002F 先调用Model构造函数\n",[34,87739,87740,87742,87745,87747,87749,87751,87753,87756,87758,87761],{"class":36,"line":33368},[34,87741,58871],{"class":87},[34,87743,87744],{"class":63}," del",[34,87746,14217],{"class":87},[34,87748,12231],{"class":87},[34,87750,87401],{"class":149},[34,87752,801],{"class":40},[34,87754,87755],{"class":156},"'温馨的提示'",[34,87757,13088],{"class":40},[34,87759,87760],{"class":156},"'您没有删除权限操作'",[34,87762,807],{"class":40},[34,87764,87765],{"class":36,"line":33374},[34,87766,87767],{"class":205},"      \u002F\u002F 实例对象调用open方法\n",[34,87769,87770,87773,87775],{"class":36,"line":33380},[34,87771,87772],{"class":40},"      del.",[34,87774,87545],{"class":149},[34,87776,2629],{"class":40},[34,87778,87779],{"class":36,"line":33386},[34,87780,34112],{"class":40},[34,87782,87783],{"class":36,"line":33392},[34,87784,87785],{"class":205},"    \u002F\u002F 测试一下 点击 登录按钮\n",[34,87787,87788,87790,87792,87794,87797,87799,87801,87803,87805,87807,87809],{"class":36,"line":33398},[34,87789,53053],{"class":40},[34,87791,55044],{"class":149},[34,87793,801],{"class":40},[34,87795,87796],{"class":156},"'#login'",[34,87798,31477],{"class":40},[34,87800,58456],{"class":149},[34,87802,801],{"class":40},[34,87804,58461],{"class":156},[34,87806,87660],{"class":40},[34,87808,85352],{"class":87},[34,87810,57],{"class":40},[34,87812,87813],{"class":36,"line":33404},[34,87814,87737],{"class":205},[34,87816,87817,87819,87822,87824,87826,87828,87830,87833,87835,87838],{"class":36,"line":33424},[34,87818,58871],{"class":87},[34,87820,87821],{"class":63}," log",[34,87823,14217],{"class":87},[34,87825,12231],{"class":87},[34,87827,87401],{"class":149},[34,87829,801],{"class":40},[34,87831,87832],{"class":156},"'友情提示'",[34,87834,13088],{"class":40},[34,87836,87837],{"class":156},"'您还没有登录呢'",[34,87839,807],{"class":40},[34,87841,87842],{"class":36,"line":33430},[34,87843,87767],{"class":205},[34,87845,87846,87849,87851],{"class":36,"line":33446},[34,87847,87848],{"class":40},"      log.",[34,87850,87545],{"class":149},[34,87852,2629],{"class":40},[34,87854,87855],{"class":36,"line":33452},[34,87856,34112],{"class":40},[34,87858,87859],{"class":36,"line":33466},[34,87860,87861],{"class":205},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[34,87863,87864,87866,87868,87870,87872,87874,87876,87878],{"class":36,"line":33472},[34,87865,87536],{"class":63},[34,87867,1353],{"class":40},[34,87869,86209],{"class":63},[34,87871,1353],{"class":40},[34,87873,87688],{"class":149},[34,87875,14217],{"class":87},[34,87877,59561],{"class":87},[34,87879,55097],{"class":40},[34,87881,87882,87884,87886,87888],{"class":36,"line":33487},[34,87883,70686],{"class":63},[34,87885,87642],{"class":40},[34,87887,57649],{"class":149},[34,87889,2629],{"class":40},[34,87891,87892],{"class":36,"line":33493},[34,87893,2840],{"class":40},[34,87895,87896,87898,87900],{"class":36,"line":33502},[34,87897,53063],{"class":40},[34,87899,52459],{"class":44},[34,87901,48],{"class":40},[34,87903,87904,87906,87908],{"class":36,"line":33508},[34,87905,102],{"class":40},[34,87907,52446],{"class":44},[34,87909,48],{"class":40},[34,87911,87912],{"class":36,"line":33517},[34,87913,3053],{"emptyLinePlaceholder":726},[34,87915,87916,87918,87920],{"class":36,"line":33523},[34,87917,102],{"class":40},[34,87919,51286],{"class":44},[34,87921,48],{"class":40},[108,87923,87924],{},[2122,87925],{"alt":29,"src":87926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87928,87930],{"id":87929},"_414-深浅拷贝","4.14 深浅拷贝",[19,87932,87934],{"id":87933},"_4141-浅拷贝","4.14.1 浅拷贝",[108,87936,87937],{},[2122,87938],{"alt":29,"src":87939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[108,87941,87942],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[108,87944,87945],{},[2122,87946],{"alt":29,"src":87947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[108,87949,87950],{},[2122,87951],{"alt":29,"src":87952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[108,87954,87955],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[108,87957,87958],{},[2122,87959],{"alt":29,"src":87960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[108,87962,11985],{},[108,87964,87965],{},[2122,87966],{"alt":29,"src":87967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[19,87969,87971],{"id":87970},"_4142-深拷贝","4.14.2 深拷贝",[108,87973,87974],{},"深拷贝：拷贝的是对象，不是地址",[108,87976,87977],{},"常用的三种方法：",[752,87979,87980,87983,87986],{},[755,87981,87982],{},"通过递归实现深拷贝",[755,87984,87985],{},"lodash\u002FcloneDeep",[755,87987,87988],{},"通过JSON.stringify()实现",[22650,87990,87992],{"id":87991},"_41421-递归函数","4.14.2.1 递归函数",[108,87994,87995],{},[2122,87996],{"alt":29,"src":87997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[752,87999,88000],{},[755,88001,88002],{},"死递归占溢出：",[24,88004,88006],{"className":53713,"code":88005,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,88007,88008,88016,88024,88028,88033,88037,88042,88050],{"__ignoreMap":29},[34,88009,88010,88012,88014],{"class":36,"line":37},[34,88011,41],{"class":40},[34,88013,52446],{"class":44},[34,88015,48],{"class":40},[34,88017,88018,88020,88022],{"class":36,"line":51},[34,88019,52790],{"class":40},[34,88021,52459],{"class":44},[34,88023,48],{"class":40},[34,88025,88026],{"class":36,"line":60},[34,88027,77774],{"class":40},[34,88029,88030],{"class":36,"line":76},[34,88031,88032],{"class":40},"      fn()\n",[34,88034,88035],{"class":36,"line":93},[34,88036,2840],{"class":40},[34,88038,88039],{"class":36,"line":99},[34,88040,88041],{"class":40},"    fn()\n",[34,88043,88044,88046,88048],{"class":36,"line":353},[34,88045,53063],{"class":40},[34,88047,52459],{"class":44},[34,88049,48],{"class":40},[34,88051,88052,88054,88056],{"class":36,"line":359},[34,88053,102],{"class":40},[34,88055,52446],{"class":44},[34,88057,48],{"class":40},[752,88059,88060],{"start":51},[755,88061,88062],{},"递归函数要加判断条件：",[108,88064,88065],{},[2122,88066],{"alt":29,"src":88067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[752,88069,88070],{"start":60},[755,88071,88072],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[24,88074,88076],{"className":51284,"code":88075,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,88077,88078,88088,88102,88106,88114,88128,88148,88160,88168,88172,88180,88192,88200,88208,88233,88245,88249,88256,88264,88272,88276],{"__ignoreMap":29},[34,88079,88080,88082,88084,88086],{"class":36,"line":37},[34,88081,51948],{"class":40},[34,88083,51951],{"class":44},[34,88085,51954],{"class":149},[34,88087,48],{"class":40},[34,88089,88090,88092,88094,88096,88098,88100],{"class":36,"line":51},[34,88091,41],{"class":40},[34,88093,51286],{"class":44},[34,88095,51965],{"class":149},[34,88097,153],{"class":40},[34,88099,51970],{"class":156},[34,88101,48],{"class":40},[34,88103,88104],{"class":36,"line":60},[34,88105,3053],{"emptyLinePlaceholder":726},[34,88107,88108,88110,88112],{"class":36,"line":76},[34,88109,41],{"class":40},[34,88111,51983],{"class":44},[34,88113,48],{"class":40},[34,88115,88116,88118,88120,88122,88124,88126],{"class":36,"line":93},[34,88117,52790],{"class":40},[34,88119,51993],{"class":44},[34,88121,51996],{"class":149},[34,88123,153],{"class":40},[34,88125,52001],{"class":156},[34,88127,48],{"class":40},[34,88129,88130,88132,88134,88136,88138,88140,88142,88144,88146],{"class":36,"line":99},[34,88131,52790],{"class":40},[34,88133,51993],{"class":44},[34,88135,15573],{"class":149},[34,88137,153],{"class":40},[34,88139,52040],{"class":156},[34,88141,52020],{"class":149},[34,88143,153],{"class":40},[34,88145,52047],{"class":156},[34,88147,48],{"class":40},[34,88149,88150,88152,88154,88156,88158],{"class":36,"line":353},[34,88151,52790],{"class":40},[34,88153,52056],{"class":44},[34,88155,52059],{"class":40},[34,88157,52056],{"class":44},[34,88159,48],{"class":40},[34,88161,88162,88164,88166],{"class":36,"line":359},[34,88163,102],{"class":40},[34,88165,51983],{"class":44},[34,88167,48],{"class":40},[34,88169,88170],{"class":36,"line":579},[34,88171,3053],{"emptyLinePlaceholder":726},[34,88173,88174,88176,88178],{"class":36,"line":589},[34,88175,41],{"class":40},[34,88177,52446],{"class":44},[34,88179,48],{"class":40},[34,88181,88182,88184,88186,88188,88190],{"class":36,"line":601},[34,88183,52790],{"class":40},[34,88185,52258],{"class":44},[34,88187,55957],{"class":40},[34,88189,52258],{"class":44},[34,88191,48],{"class":40},[34,88193,88194,88196,88198],{"class":36,"line":613},[34,88195,52790],{"class":40},[34,88197,52459],{"class":44},[34,88199,48],{"class":40},[34,88201,88202,88204,88206],{"class":36,"line":618},[34,88203,70719],{"class":87},[34,88205,74404],{"class":149},[34,88207,11506],{"class":40},[34,88209,88210,88212,88214,88216,88218,88220,88222,88224,88226,88228,88231],{"class":36,"line":628},[34,88211,56414],{"class":40},[34,88213,55044],{"class":149},[34,88215,801],{"class":40},[34,88217,82561],{"class":156},[34,88219,74880],{"class":40},[34,88221,153],{"class":87},[34,88223,12231],{"class":87},[34,88225,74420],{"class":149},[34,88227,17913],{"class":40},[34,88229,88230],{"class":149},"toLocaleString",[34,88232,2629],{"class":40},[34,88234,88235,88238,88241,88243],{"class":36,"line":640},[34,88236,88237],{"class":149},"      setTimeout",[34,88239,88240],{"class":40},"(getTime, ",[34,88242,7063],{"class":63},[34,88244,807],{"class":40},[34,88246,88247],{"class":36,"line":2301},[34,88248,2840],{"class":40},[34,88250,88251,88254],{"class":36,"line":2307},[34,88252,88253],{"class":149},"    getTime",[34,88255,2629],{"class":40},[34,88257,88258,88260,88262],{"class":36,"line":2328},[34,88259,53063],{"class":40},[34,88261,52459],{"class":44},[34,88263,48],{"class":40},[34,88265,88266,88268,88270],{"class":36,"line":2333},[34,88267,102],{"class":40},[34,88269,52446],{"class":44},[34,88271,48],{"class":40},[34,88273,88274],{"class":36,"line":2347},[34,88275,3053],{"emptyLinePlaceholder":726},[34,88277,88278,88280,88282],{"class":36,"line":2352},[34,88279,102],{"class":40},[34,88281,51286],{"class":44},[34,88283,48],{"class":40},[108,88285,88286],{},[2122,88287],{"alt":29,"src":88288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[752,88290,88291],{"start":76},[755,88292,87982],{},[108,88294,88295],{},[2122,88296],{"alt":29,"src":88297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[108,88299,88300],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[108,88302,39840],{},[108,88304,88305],{},"这个是简易版的递归函数深拷贝",[108,88307,88308],{},"一定要注意先数组再对象，因为万物皆可对象",[24,88310,88312],{"className":51284,"code":88311,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,88313,88314,88324,88338,88342,88350,88364,88384,88396,88404,88408,88416,88424,88434,88443,88451,88467,88471,88479,88483,88487,88499,88504,88523,88539,88544,88549,88554,88569,88574,88579,88588,88596,88613,88621,88627,88635,88640,88645,88654,88658,88662,88666,88677,88686,88696,88710,88720,88728,88736,88744,88748],{"__ignoreMap":29},[34,88315,88316,88318,88320,88322],{"class":36,"line":37},[34,88317,51948],{"class":40},[34,88319,51951],{"class":44},[34,88321,51954],{"class":149},[34,88323,48],{"class":40},[34,88325,88326,88328,88330,88332,88334,88336],{"class":36,"line":51},[34,88327,41],{"class":40},[34,88329,51286],{"class":44},[34,88331,51965],{"class":149},[34,88333,153],{"class":40},[34,88335,51970],{"class":156},[34,88337,48],{"class":40},[34,88339,88340],{"class":36,"line":60},[34,88341,3053],{"emptyLinePlaceholder":726},[34,88343,88344,88346,88348],{"class":36,"line":76},[34,88345,41],{"class":40},[34,88347,51983],{"class":44},[34,88349,48],{"class":40},[34,88351,88352,88354,88356,88358,88360,88362],{"class":36,"line":93},[34,88353,52790],{"class":40},[34,88355,51993],{"class":44},[34,88357,51996],{"class":149},[34,88359,153],{"class":40},[34,88361,52001],{"class":156},[34,88363,48],{"class":40},[34,88365,88366,88368,88370,88372,88374,88376,88378,88380,88382],{"class":36,"line":99},[34,88367,52790],{"class":40},[34,88369,51993],{"class":44},[34,88371,15573],{"class":149},[34,88373,153],{"class":40},[34,88375,52040],{"class":156},[34,88377,52020],{"class":149},[34,88379,153],{"class":40},[34,88381,52047],{"class":156},[34,88383,48],{"class":40},[34,88385,88386,88388,88390,88392,88394],{"class":36,"line":353},[34,88387,52790],{"class":40},[34,88389,52056],{"class":44},[34,88391,52059],{"class":40},[34,88393,52056],{"class":44},[34,88395,48],{"class":40},[34,88397,88398,88400,88402],{"class":36,"line":359},[34,88399,102],{"class":40},[34,88401,51983],{"class":44},[34,88403,48],{"class":40},[34,88405,88406],{"class":36,"line":579},[34,88407,3053],{"emptyLinePlaceholder":726},[34,88409,88410,88412,88414],{"class":36,"line":589},[34,88411,41],{"class":40},[34,88413,52446],{"class":44},[34,88415,48],{"class":40},[34,88417,88418,88420,88422],{"class":36,"line":601},[34,88419,52790],{"class":40},[34,88421,52459],{"class":44},[34,88423,48],{"class":40},[34,88425,88426,88428,88430,88432],{"class":36,"line":613},[34,88427,11874],{"class":87},[34,88429,70606],{"class":63},[34,88431,14217],{"class":87},[34,88433,57],{"class":40},[34,88435,88436,88438,88441],{"class":36,"line":618},[34,88437,72247],{"class":40},[34,88439,88440],{"class":156},"'pink'",[34,88442,32117],{"class":40},[34,88444,88445,88447,88449],{"class":36,"line":628},[34,88446,72257],{"class":40},[34,88448,1445],{"class":63},[34,88450,32117],{"class":40},[34,88452,88453,88456,88459,88461,88464],{"class":36,"line":640},[34,88454,88455],{"class":40},"      hobby: [",[34,88457,88458],{"class":156},"'乒乓球'",[34,88460,13088],{"class":40},[34,88462,88463],{"class":156},"'足球'",[34,88465,88466],{"class":40},"],\n",[34,88468,88469],{"class":36,"line":2301},[34,88470,78502],{"class":40},[34,88472,88473,88476],{"class":36,"line":2307},[34,88474,88475],{"class":40},"        baby: ",[34,88477,88478],{"class":156},"'小pink'\n",[34,88480,88481],{"class":36,"line":2328},[34,88482,53044],{"class":40},[34,88484,88485],{"class":36,"line":2333},[34,88486,2840],{"class":40},[34,88488,88489,88491,88494,88496],{"class":36,"line":2347},[34,88490,11874],{"class":87},[34,88492,88493],{"class":63}," o",[34,88495,14217],{"class":87},[34,88497,88498],{"class":40}," {}\n",[34,88500,88501],{"class":36,"line":2352},[34,88502,88503],{"class":205},"    \u002F\u002F 拷贝函数\n",[34,88505,88506,88508,88511,88513,88516,88518,88521],{"class":36,"line":2381},[34,88507,70719],{"class":87},[34,88509,88510],{"class":149}," deepCopy",[34,88512,801],{"class":40},[34,88514,88515],{"class":5869},"newObj",[34,88517,13088],{"class":40},[34,88519,88520],{"class":5869},"oldObj",[34,88522,13095],{"class":40},[34,88524,88525,88527,88529,88531,88534,88536],{"class":36,"line":2386},[34,88526,52930],{"class":87},[34,88528,2312],{"class":40},[34,88530,52493],{"class":87},[34,88532,88533],{"class":40}," k ",[34,88535,26695],{"class":87},[34,88537,88538],{"class":40}," oldObj) {\n",[34,88540,88541],{"class":36,"line":2403},[34,88542,88543],{"class":205},"        \u002F\u002F 处理数组的问题\n",[34,88545,88546],{"class":36,"line":2408},[34,88547,88548],{"class":205},"        \u002F\u002F 判断是否属于数组\n",[34,88550,88551],{"class":36,"line":2413},[34,88552,88553],{"class":205},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[34,88555,88556,88558,88561,88564,88567],{"class":36,"line":2418},[34,88557,3150],{"class":87},[34,88559,88560],{"class":40}," (oldObj[k] ",[34,88562,88563],{"class":87},"instanceof",[34,88565,88566],{"class":149}," Array",[34,88568,13095],{"class":40},[34,88570,88571],{"class":36,"line":2432},[34,88572,88573],{"class":205},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[34,88575,88576],{"class":36,"line":2437},[34,88577,88578],{"class":205},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[34,88580,88581,88584,88586],{"class":36,"line":3230},[34,88582,88583],{"class":40},"          newObj[k] ",[34,88585,153],{"class":87},[34,88587,52484],{"class":40},[34,88589,88590,88593],{"class":36,"line":3244},[34,88591,88592],{"class":149},"          deepCopy",[34,88594,88595],{"class":40},"(newObj[k], oldObj[k])\n",[34,88597,88598,88600,88602,88604,88606,88608,88611],{"class":36,"line":3252},[34,88599,80710],{"class":40},[34,88601,2355],{"class":87},[34,88603,2358],{"class":87},[34,88605,88560],{"class":40},[34,88607,88563],{"class":87},[34,88609,88610],{"class":149}," Object",[34,88612,13095],{"class":40},[34,88614,88615,88617,88619],{"class":36,"line":3257},[34,88616,88583],{"class":40},[34,88618,153],{"class":87},[34,88620,88498],{"class":40},[34,88622,88623,88625],{"class":36,"line":3263},[34,88624,88592],{"class":149},[34,88626,88595],{"class":40},[34,88628,88629,88631,88633],{"class":36,"line":3269},[34,88630,80710],{"class":40},[34,88632,2355],{"class":87},[34,88634,57],{"class":40},[34,88636,88637],{"class":36,"line":3274},[34,88638,88639],{"class":205},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[34,88641,88642],{"class":36,"line":8601},[34,88643,88644],{"class":205},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[34,88646,88647,88649,88651],{"class":36,"line":8625},[34,88648,88583],{"class":40},[34,88650,153],{"class":87},[34,88652,88653],{"class":40}," oldObj[k]\n",[34,88655,88656],{"class":36,"line":8630},[34,88657,3182],{"class":40},[34,88659,88660],{"class":36,"line":8636},[34,88661,53044],{"class":40},[34,88663,88664],{"class":36,"line":8663},[34,88665,2840],{"class":40},[34,88667,88668,88671,88674],{"class":36,"line":8668},[34,88669,88670],{"class":149},"    deepCopy",[34,88672,88673],{"class":40},"(o, obj) ",[34,88675,88676],{"class":205},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[34,88678,88679,88681,88683],{"class":36,"line":8674},[34,88680,74384],{"class":40},[34,88682,58890],{"class":149},[34,88684,88685],{"class":40},"(o)\n",[34,88687,88688,88691,88693],{"class":36,"line":8686},[34,88689,88690],{"class":40},"    o.age ",[34,88692,153],{"class":87},[34,88694,88695],{"class":63}," 20\n",[34,88697,88698,88701,88703,88705,88707],{"class":36,"line":8698},[34,88699,88700],{"class":40},"    o.hobby[",[34,88702,987],{"class":63},[34,88704,5096],{"class":40},[34,88706,153],{"class":87},[34,88708,88709],{"class":156}," '篮球'\n",[34,88711,88712,88715,88717],{"class":36,"line":8710},[34,88713,88714],{"class":40},"    o.family ",[34,88716,153],{"class":87},[34,88718,88719],{"class":156}," '老pink'\n",[34,88721,88722,88724,88726],{"class":36,"line":10369},[34,88723,74384],{"class":40},[34,88725,58890],{"class":149},[34,88727,70671],{"class":40},[34,88729,88730,88732,88734],{"class":36,"line":10394},[34,88731,53063],{"class":40},[34,88733,52459],{"class":44},[34,88735,48],{"class":40},[34,88737,88738,88740,88742],{"class":36,"line":10417},[34,88739,102],{"class":40},[34,88741,52446],{"class":44},[34,88743,48],{"class":40},[34,88745,88746],{"class":36,"line":10441},[34,88747,3053],{"emptyLinePlaceholder":726},[34,88749,88750,88752,88754],{"class":36,"line":10446},[34,88751,102],{"class":40},[34,88753,51286],{"class":44},[34,88755,48],{"class":40},[108,88757,88758],{},[2122,88759],{"alt":29,"src":88760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22650,88762,88764,88765],{"id":88763},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[111,88766,88767],{},"js库lodash里面cloneDeep内部实现了深拷贝",[108,88769,88770],{},[520,88771,88772],{"href":88772,"rel":88773},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24517],[108,88775,88776],{},"lodash里边的方法都要加上一个下划线_",[108,88778,88779],{},"_.cloneDeep()",[24,88781,88783],{"className":51284,"code":88782,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,88784,88785,88795,88809,88813,88821,88835,88855,88867,88875,88879,88887,88892,88911,88919,88929,88937,88945,88957,88961,88967,88971,88975,88991,88999,89008,89016,89024,89032,89036],{"__ignoreMap":29},[34,88786,88787,88789,88791,88793],{"class":36,"line":37},[34,88788,51948],{"class":40},[34,88790,51951],{"class":44},[34,88792,51954],{"class":149},[34,88794,48],{"class":40},[34,88796,88797,88799,88801,88803,88805,88807],{"class":36,"line":51},[34,88798,41],{"class":40},[34,88800,51286],{"class":44},[34,88802,51965],{"class":149},[34,88804,153],{"class":40},[34,88806,51970],{"class":156},[34,88808,48],{"class":40},[34,88810,88811],{"class":36,"line":60},[34,88812,3053],{"emptyLinePlaceholder":726},[34,88814,88815,88817,88819],{"class":36,"line":76},[34,88816,41],{"class":40},[34,88818,51983],{"class":44},[34,88820,48],{"class":40},[34,88822,88823,88825,88827,88829,88831,88833],{"class":36,"line":93},[34,88824,52790],{"class":40},[34,88826,51993],{"class":44},[34,88828,51996],{"class":149},[34,88830,153],{"class":40},[34,88832,52001],{"class":156},[34,88834,48],{"class":40},[34,88836,88837,88839,88841,88843,88845,88847,88849,88851,88853],{"class":36,"line":99},[34,88838,52790],{"class":40},[34,88840,51993],{"class":44},[34,88842,15573],{"class":149},[34,88844,153],{"class":40},[34,88846,52040],{"class":156},[34,88848,52020],{"class":149},[34,88850,153],{"class":40},[34,88852,52047],{"class":156},[34,88854,48],{"class":40},[34,88856,88857,88859,88861,88863,88865],{"class":36,"line":353},[34,88858,52790],{"class":40},[34,88860,52056],{"class":44},[34,88862,52059],{"class":40},[34,88864,52056],{"class":44},[34,88866,48],{"class":40},[34,88868,88869,88871,88873],{"class":36,"line":359},[34,88870,102],{"class":40},[34,88872,51983],{"class":44},[34,88874,48],{"class":40},[34,88876,88877],{"class":36,"line":579},[34,88878,3053],{"emptyLinePlaceholder":726},[34,88880,88881,88883,88885],{"class":36,"line":589},[34,88882,41],{"class":40},[34,88884,52446],{"class":44},[34,88886,48],{"class":40},[34,88888,88889],{"class":36,"line":601},[34,88890,88891],{"class":205},"  \u003C!-- 先引用这个库 -->\n",[34,88893,88894,88896,88898,88900,88902,88905,88907,88909],{"class":36,"line":613},[34,88895,52790],{"class":40},[34,88897,52459],{"class":44},[34,88899,55882],{"class":149},[34,88901,153],{"class":40},[34,88903,88904],{"class":156},"\"lodash.min.js\"",[34,88906,55957],{"class":40},[34,88908,52459],{"class":44},[34,88910,48],{"class":40},[34,88912,88913,88915,88917],{"class":36,"line":618},[34,88914,52790],{"class":40},[34,88916,52459],{"class":44},[34,88918,48],{"class":40},[34,88920,88921,88923,88925,88927],{"class":36,"line":628},[34,88922,11874],{"class":87},[34,88924,70606],{"class":63},[34,88926,14217],{"class":87},[34,88928,57],{"class":40},[34,88930,88931,88933,88935],{"class":36,"line":640},[34,88932,72247],{"class":40},[34,88934,88440],{"class":156},[34,88936,32117],{"class":40},[34,88938,88939,88941,88943],{"class":36,"line":2301},[34,88940,72257],{"class":40},[34,88942,1445],{"class":63},[34,88944,32117],{"class":40},[34,88946,88947,88949,88951,88953,88955],{"class":36,"line":2307},[34,88948,88455],{"class":40},[34,88950,88458],{"class":156},[34,88952,13088],{"class":40},[34,88954,88463],{"class":156},[34,88956,88466],{"class":40},[34,88958,88959],{"class":36,"line":2328},[34,88960,78502],{"class":40},[34,88962,88963,88965],{"class":36,"line":2333},[34,88964,88475],{"class":40},[34,88966,88478],{"class":156},[34,88968,88969],{"class":36,"line":2347},[34,88970,53044],{"class":40},[34,88972,88973],{"class":36,"line":2352},[34,88974,2840],{"class":40},[34,88976,88977,88979,88981,88983,88986,88989],{"class":36,"line":2381},[34,88978,11874],{"class":87},[34,88980,88493],{"class":63},[34,88982,14217],{"class":87},[34,88984,88985],{"class":40}," _.",[34,88987,88988],{"class":149},"cloneDeep",[34,88990,70671],{"class":40},[34,88992,88993,88995,88997],{"class":36,"line":2386},[34,88994,74384],{"class":40},[34,88996,58890],{"class":149},[34,88998,88685],{"class":40},[34,89000,89001,89004,89006],{"class":36,"line":2403},[34,89002,89003],{"class":40},"    o.family.baby ",[34,89005,153],{"class":87},[34,89007,88719],{"class":156},[34,89009,89010,89012,89014],{"class":36,"line":2408},[34,89011,74384],{"class":40},[34,89013,58890],{"class":149},[34,89015,70671],{"class":40},[34,89017,89018,89020,89022],{"class":36,"line":2413},[34,89019,53063],{"class":40},[34,89021,52459],{"class":44},[34,89023,48],{"class":40},[34,89025,89026,89028,89030],{"class":36,"line":2418},[34,89027,102],{"class":40},[34,89029,52446],{"class":44},[34,89031,48],{"class":40},[34,89033,89034],{"class":36,"line":2432},[34,89035,3053],{"emptyLinePlaceholder":726},[34,89037,89038,89040,89042],{"class":36,"line":2437},[34,89039,102],{"class":40},[34,89041,51286],{"class":44},[34,89043,48],{"class":40},[108,89045,89046],{},[2122,89047],{"alt":29,"src":89048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22650,89050,89052],{"id":89051},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[24,89054,89056],{"className":51284,"code":89055,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,89057,89058,89068,89082,89086,89094,89108,89128,89140,89148,89152,89160,89168,89178,89186,89194,89206,89210,89216,89220,89224,89229,89234,89239,89265,89273,89282,89290,89298,89306,89310],{"__ignoreMap":29},[34,89059,89060,89062,89064,89066],{"class":36,"line":37},[34,89061,51948],{"class":40},[34,89063,51951],{"class":44},[34,89065,51954],{"class":149},[34,89067,48],{"class":40},[34,89069,89070,89072,89074,89076,89078,89080],{"class":36,"line":51},[34,89071,41],{"class":40},[34,89073,51286],{"class":44},[34,89075,51965],{"class":149},[34,89077,153],{"class":40},[34,89079,51970],{"class":156},[34,89081,48],{"class":40},[34,89083,89084],{"class":36,"line":60},[34,89085,3053],{"emptyLinePlaceholder":726},[34,89087,89088,89090,89092],{"class":36,"line":76},[34,89089,41],{"class":40},[34,89091,51983],{"class":44},[34,89093,48],{"class":40},[34,89095,89096,89098,89100,89102,89104,89106],{"class":36,"line":93},[34,89097,52790],{"class":40},[34,89099,51993],{"class":44},[34,89101,51996],{"class":149},[34,89103,153],{"class":40},[34,89105,52001],{"class":156},[34,89107,48],{"class":40},[34,89109,89110,89112,89114,89116,89118,89120,89122,89124,89126],{"class":36,"line":99},[34,89111,52790],{"class":40},[34,89113,51993],{"class":44},[34,89115,15573],{"class":149},[34,89117,153],{"class":40},[34,89119,52040],{"class":156},[34,89121,52020],{"class":149},[34,89123,153],{"class":40},[34,89125,52047],{"class":156},[34,89127,48],{"class":40},[34,89129,89130,89132,89134,89136,89138],{"class":36,"line":353},[34,89131,52790],{"class":40},[34,89133,52056],{"class":44},[34,89135,52059],{"class":40},[34,89137,52056],{"class":44},[34,89139,48],{"class":40},[34,89141,89142,89144,89146],{"class":36,"line":359},[34,89143,102],{"class":40},[34,89145,51983],{"class":44},[34,89147,48],{"class":40},[34,89149,89150],{"class":36,"line":579},[34,89151,3053],{"emptyLinePlaceholder":726},[34,89153,89154,89156,89158],{"class":36,"line":589},[34,89155,41],{"class":40},[34,89157,52446],{"class":44},[34,89159,48],{"class":40},[34,89161,89162,89164,89166],{"class":36,"line":601},[34,89163,52790],{"class":40},[34,89165,52459],{"class":44},[34,89167,48],{"class":40},[34,89169,89170,89172,89174,89176],{"class":36,"line":613},[34,89171,11874],{"class":87},[34,89173,70606],{"class":63},[34,89175,14217],{"class":87},[34,89177,57],{"class":40},[34,89179,89180,89182,89184],{"class":36,"line":618},[34,89181,72247],{"class":40},[34,89183,88440],{"class":156},[34,89185,32117],{"class":40},[34,89187,89188,89190,89192],{"class":36,"line":628},[34,89189,72257],{"class":40},[34,89191,1445],{"class":63},[34,89193,32117],{"class":40},[34,89195,89196,89198,89200,89202,89204],{"class":36,"line":640},[34,89197,88455],{"class":40},[34,89199,88458],{"class":156},[34,89201,13088],{"class":40},[34,89203,88463],{"class":156},[34,89205,88466],{"class":40},[34,89207,89208],{"class":36,"line":2301},[34,89209,78502],{"class":40},[34,89211,89212,89214],{"class":36,"line":2307},[34,89213,88475],{"class":40},[34,89215,88478],{"class":156},[34,89217,89218],{"class":36,"line":2328},[34,89219,53044],{"class":40},[34,89221,89222],{"class":36,"line":2333},[34,89223,2840],{"class":40},[34,89225,89226],{"class":36,"line":2347},[34,89227,89228],{"class":205},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[34,89230,89231],{"class":36,"line":2352},[34,89232,89233],{"class":205},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[34,89235,89236],{"class":36,"line":2381},[34,89237,89238],{"class":205},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[34,89240,89241,89243,89245,89247,89250,89252,89255,89257,89259,89261,89263],{"class":36,"line":2386},[34,89242,11874],{"class":87},[34,89244,88493],{"class":63},[34,89246,14217],{"class":87},[34,89248,89249],{"class":63}," JSON",[34,89251,1353],{"class":40},[34,89253,89254],{"class":149},"parse",[34,89256,801],{"class":40},[34,89258,72295],{"class":63},[34,89260,1353],{"class":40},[34,89262,72300],{"class":149},[34,89264,72303],{"class":40},[34,89266,89267,89269,89271],{"class":36,"line":2403},[34,89268,74384],{"class":40},[34,89270,58890],{"class":149},[34,89272,88685],{"class":40},[34,89274,89275,89277,89279],{"class":36,"line":2408},[34,89276,89003],{"class":40},[34,89278,153],{"class":87},[34,89280,89281],{"class":156}," '123'\n",[34,89283,89284,89286,89288],{"class":36,"line":2413},[34,89285,74384],{"class":40},[34,89287,58890],{"class":149},[34,89289,70671],{"class":40},[34,89291,89292,89294,89296],{"class":36,"line":2418},[34,89293,53063],{"class":40},[34,89295,52459],{"class":44},[34,89297,48],{"class":40},[34,89299,89300,89302,89304],{"class":36,"line":2432},[34,89301,102],{"class":40},[34,89303,52446],{"class":44},[34,89305,48],{"class":40},[34,89307,89308],{"class":36,"line":2437},[34,89309,3053],{"emptyLinePlaceholder":726},[34,89311,89312,89314,89316],{"class":36,"line":3230},[34,89313,102],{"class":40},[34,89315,51286],{"class":44},[34,89317,48],{"class":40},[108,89319,89320],{},[2122,89321],{"alt":29,"src":89322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89324,89326],{"id":89325},"_415-异常处理","4.15 异常处理",[752,89328,89329],{},[755,89330,89331],{},"throw抛异常",[108,89333,89334],{},[2122,89335],{"alt":29,"src":89336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[752,89338,89339],{"start":51},[755,89340,89341],{},"try\u002Fcatch 捕获错误信息",[108,89343,89344],{},[2122,89345],{"alt":29,"src":89346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[24,89348,89350],{"className":51284,"code":89349,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,89351,89352,89362,89376,89380,89388,89402,89422,89434,89442,89446,89454,89466,89474,89483,89490,89495,89514,89523,89534,89539,89549,89554,89559,89564,89581,89585,89590,89597,89609,89613,89625,89629,89633,89638,89643,89650,89658,89666,89670],{"__ignoreMap":29},[34,89353,89354,89356,89358,89360],{"class":36,"line":37},[34,89355,51948],{"class":40},[34,89357,51951],{"class":44},[34,89359,51954],{"class":149},[34,89361,48],{"class":40},[34,89363,89364,89366,89368,89370,89372,89374],{"class":36,"line":51},[34,89365,41],{"class":40},[34,89367,51286],{"class":44},[34,89369,51965],{"class":149},[34,89371,153],{"class":40},[34,89373,51970],{"class":156},[34,89375,48],{"class":40},[34,89377,89378],{"class":36,"line":60},[34,89379,3053],{"emptyLinePlaceholder":726},[34,89381,89382,89384,89386],{"class":36,"line":76},[34,89383,41],{"class":40},[34,89385,51983],{"class":44},[34,89387,48],{"class":40},[34,89389,89390,89392,89394,89396,89398,89400],{"class":36,"line":93},[34,89391,52790],{"class":40},[34,89393,51993],{"class":44},[34,89395,51996],{"class":149},[34,89397,153],{"class":40},[34,89399,52001],{"class":156},[34,89401,48],{"class":40},[34,89403,89404,89406,89408,89410,89412,89414,89416,89418,89420],{"class":36,"line":99},[34,89405,52790],{"class":40},[34,89407,51993],{"class":44},[34,89409,15573],{"class":149},[34,89411,153],{"class":40},[34,89413,52040],{"class":156},[34,89415,52020],{"class":149},[34,89417,153],{"class":40},[34,89419,52047],{"class":156},[34,89421,48],{"class":40},[34,89423,89424,89426,89428,89430,89432],{"class":36,"line":353},[34,89425,52790],{"class":40},[34,89427,52056],{"class":44},[34,89429,52059],{"class":40},[34,89431,52056],{"class":44},[34,89433,48],{"class":40},[34,89435,89436,89438,89440],{"class":36,"line":359},[34,89437,102],{"class":40},[34,89439,51983],{"class":44},[34,89441,48],{"class":40},[34,89443,89444],{"class":36,"line":579},[34,89445,3053],{"emptyLinePlaceholder":726},[34,89447,89448,89450,89452],{"class":36,"line":589},[34,89449,41],{"class":40},[34,89451,52446],{"class":44},[34,89453,48],{"class":40},[34,89455,89456,89458,89460,89462,89464],{"class":36,"line":601},[34,89457,52790],{"class":40},[34,89459,108],{"class":44},[34,89461,54140],{"class":40},[34,89463,108],{"class":44},[34,89465,48],{"class":40},[34,89467,89468,89470,89472],{"class":36,"line":613},[34,89469,52790],{"class":40},[34,89471,52459],{"class":44},[34,89473,48],{"class":40},[34,89475,89476,89478,89481],{"class":36,"line":618},[34,89477,70719],{"class":87},[34,89479,89480],{"class":149}," fn",[34,89482,11506],{"class":40},[34,89484,89485,89488],{"class":36,"line":628},[34,89486,89487],{"class":87},"      try",[34,89489,57],{"class":40},[34,89491,89492],{"class":36,"line":640},[34,89493,89494],{"class":205},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[34,89496,89497,89499,89501,89503,89505,89507,89509,89512],{"class":36,"line":2301},[34,89498,61911],{"class":87},[34,89500,7478],{"class":63},[34,89502,14217],{"class":87},[34,89504,55041],{"class":40},[34,89506,55044],{"class":149},[34,89508,801],{"class":40},[34,89510,89511],{"class":156},"'.p'",[34,89513,807],{"class":40},[34,89515,89516,89519,89521],{"class":36,"line":2307},[34,89517,89518],{"class":40},"        p.style.color ",[34,89520,153],{"class":87},[34,89522,67689],{"class":156},[34,89524,89525,89528,89531],{"class":36,"line":2328},[34,89526,89527],{"class":40},"      } ",[34,89529,89530],{"class":87},"catch",[34,89532,89533],{"class":40}," (err) {\n",[34,89535,89536],{"class":36,"line":2333},[34,89537,89538],{"class":205},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[34,89540,89541,89544,89546],{"class":36,"line":2347},[34,89542,89543],{"class":40},"        console.",[34,89545,58890],{"class":149},[34,89547,89548],{"class":40},"(err.message)\n",[34,89550,89551],{"class":36,"line":2352},[34,89552,89553],{"class":205},"        \u002F\u002F 想要中断程序，需要加return\n",[34,89555,89556],{"class":36,"line":2381},[34,89557,89558],{"class":205},"        \u002F\u002F return\n",[34,89560,89561],{"class":36,"line":2386},[34,89562,89563],{"class":205},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[34,89565,89566,89569,89571,89574,89576,89579],{"class":36,"line":2403},[34,89567,89568],{"class":87},"        throw",[34,89570,12231],{"class":87},[34,89572,89573],{"class":149}," Error",[34,89575,801],{"class":40},[34,89577,89578],{"class":156},"'你看看，选择器错误了吧'",[34,89580,807],{"class":40},[34,89582,89583],{"class":36,"line":2408},[34,89584,53044],{"class":40},[34,89586,89587],{"class":36,"line":2413},[34,89588,89589],{"class":205},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[34,89591,89592,89595],{"class":36,"line":2418},[34,89593,89594],{"class":87},"      finally",[34,89596,57],{"class":40},[34,89598,89599,89602,89604,89607],{"class":36,"line":2432},[34,89600,89601],{"class":149},"        alert",[34,89603,801],{"class":40},[34,89605,89606],{"class":156},"'弹出对话框'",[34,89608,807],{"class":40},[34,89610,89611],{"class":36,"line":2437},[34,89612,53044],{"class":40},[34,89614,89615,89617,89619,89621,89623],{"class":36,"line":3230},[34,89616,58887],{"class":40},[34,89618,58890],{"class":149},[34,89620,801],{"class":40},[34,89622,1267],{"class":63},[34,89624,807],{"class":40},[34,89626,89627],{"class":36,"line":3244},[34,89628,3053],{"emptyLinePlaceholder":726},[34,89630,89631],{"class":36,"line":3252},[34,89632,2840],{"class":40},[34,89634,89635],{"class":36,"line":3257},[34,89636,89637],{"class":205},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[34,89639,89640],{"class":36,"line":3263},[34,89641,89642],{"class":205},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[34,89644,89645,89648],{"class":36,"line":3269},[34,89646,89647],{"class":149},"    fn",[34,89649,2629],{"class":40},[34,89651,89652,89654,89656],{"class":36,"line":3274},[34,89653,53063],{"class":40},[34,89655,52459],{"class":44},[34,89657,48],{"class":40},[34,89659,89660,89662,89664],{"class":36,"line":8601},[34,89661,102],{"class":40},[34,89663,52446],{"class":44},[34,89665,48],{"class":40},[34,89667,89668],{"class":36,"line":8625},[34,89669,3053],{"emptyLinePlaceholder":726},[34,89671,89672,89674,89676],{"class":36,"line":8630},[34,89673,102],{"class":40},[34,89675,51286],{"class":44},[34,89677,48],{"class":40},[108,89679,89680],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[752,89682,89683],{"start":60},[755,89684,89685],{},"debugger",[108,89687,89688],{},[2122,89689],{"alt":29,"src":89690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[108,89692,89693],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89695,89697],{"id":89696},"_416-处理this","4.16 处理this",[19,89699,89701],{"id":89700},"_4161-this的指向","4.16.1 this的指向",[752,89703,89704],{},[755,89705,89706],{},"普通函数的this",[108,89708,89709],{},[2122,89710],{"alt":29,"src":89711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[752,89713,89714],{"start":51},[755,89715,89716],{},"箭头函数的this",[108,89718,89719],{},[2122,89720],{"alt":29,"src":89721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[108,89723,89724],{},[2122,89725],{"alt":29,"src":89726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[108,89728,89729],{},[2122,89730],{"alt":29,"src":89731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[19,89733,89735],{"id":89734},"_4162-this的改变","4.16.2 this的改变",[108,89737,89738],{},"call() apply() bind()",[752,89740,89741],{},[755,89742,89743],{},"call()",[108,89745,89746],{},[2122,89747],{"alt":29,"src":89748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[108,89750,89751],{},"两个作用：①调用函数；②改变this指向",[24,89753,89755],{"className":53713,"code":89754,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,89756,89757,89765,89773,89777,89782,89786,89791,89796,89801,89805,89810,89818],{"__ignoreMap":29},[34,89758,89759,89761,89763],{"class":36,"line":37},[34,89760,41],{"class":40},[34,89762,52446],{"class":44},[34,89764,48],{"class":40},[34,89766,89767,89769,89771],{"class":36,"line":51},[34,89768,52790],{"class":40},[34,89770,52459],{"class":44},[34,89772,48],{"class":40},[34,89774,89775],{"class":36,"line":60},[34,89776,72154],{"class":40},[34,89778,89779],{"class":36,"line":76},[34,89780,89781],{"class":40},"      uname: 'pink'\n",[34,89783,89784],{"class":36,"line":93},[34,89785,2840],{"class":40},[34,89787,89788],{"class":36,"line":99},[34,89789,89790],{"class":40},"    function fn(x, y) {\n",[34,89792,89793],{"class":36,"line":353},[34,89794,89795],{"class":40},"      console.log(this)  \u002F\u002Fwindow\n",[34,89797,89798],{"class":36,"line":359},[34,89799,89800],{"class":40},"      console.log(x + y)\n",[34,89802,89803],{"class":36,"line":579},[34,89804,2840],{"class":40},[34,89806,89807],{"class":36,"line":589},[34,89808,89809],{"class":40},"    fn.call(obj, 1, 2)\n",[34,89811,89812,89814,89816],{"class":36,"line":601},[34,89813,53063],{"class":40},[34,89815,52459],{"class":44},[34,89817,48],{"class":40},[34,89819,89820,89822,89824],{"class":36,"line":613},[34,89821,102],{"class":40},[34,89823,52446],{"class":44},[34,89825,48],{"class":40},[108,89827,89828],{},[2122,89829],{"alt":29,"src":89830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[752,89832,89833],{"start":51},[755,89834,89835],{},"apply()",[108,89837,89838],{},[2122,89839],{"alt":29,"src":89840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[108,89842,89751],{},[108,89844,89845],{},"call传递的是普通参数，而apply必须传递的是数组",[24,89847,89849],{"className":51284,"code":89848,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,89850,89851,89861,89875,89879,89887,89901,89921,89933,89941,89945,89953,89961,89971,89978,89982,89987,90003,90015,90029,90033,90038,90057,90062,90066,90071,90076,90084,90089,90111,90116,90132,90148,90160,90164,90169,90188,90196,90204,90208],{"__ignoreMap":29},[34,89852,89853,89855,89857,89859],{"class":36,"line":37},[34,89854,51948],{"class":40},[34,89856,51951],{"class":44},[34,89858,51954],{"class":149},[34,89860,48],{"class":40},[34,89862,89863,89865,89867,89869,89871,89873],{"class":36,"line":51},[34,89864,41],{"class":40},[34,89866,51286],{"class":44},[34,89868,51965],{"class":149},[34,89870,153],{"class":40},[34,89872,51970],{"class":156},[34,89874,48],{"class":40},[34,89876,89877],{"class":36,"line":60},[34,89878,3053],{"emptyLinePlaceholder":726},[34,89880,89881,89883,89885],{"class":36,"line":76},[34,89882,41],{"class":40},[34,89884,51983],{"class":44},[34,89886,48],{"class":40},[34,89888,89889,89891,89893,89895,89897,89899],{"class":36,"line":93},[34,89890,52790],{"class":40},[34,89892,51993],{"class":44},[34,89894,51996],{"class":149},[34,89896,153],{"class":40},[34,89898,52001],{"class":156},[34,89900,48],{"class":40},[34,89902,89903,89905,89907,89909,89911,89913,89915,89917,89919],{"class":36,"line":99},[34,89904,52790],{"class":40},[34,89906,51993],{"class":44},[34,89908,15573],{"class":149},[34,89910,153],{"class":40},[34,89912,52040],{"class":156},[34,89914,52020],{"class":149},[34,89916,153],{"class":40},[34,89918,52047],{"class":156},[34,89920,48],{"class":40},[34,89922,89923,89925,89927,89929,89931],{"class":36,"line":353},[34,89924,52790],{"class":40},[34,89926,52056],{"class":44},[34,89928,52059],{"class":40},[34,89930,52056],{"class":44},[34,89932,48],{"class":40},[34,89934,89935,89937,89939],{"class":36,"line":359},[34,89936,102],{"class":40},[34,89938,51983],{"class":44},[34,89940,48],{"class":40},[34,89942,89943],{"class":36,"line":579},[34,89944,3053],{"emptyLinePlaceholder":726},[34,89946,89947,89949,89951],{"class":36,"line":589},[34,89948,41],{"class":40},[34,89950,52446],{"class":44},[34,89952,48],{"class":40},[34,89954,89955,89957,89959],{"class":36,"line":601},[34,89956,52790],{"class":40},[34,89958,52459],{"class":44},[34,89960,48],{"class":40},[34,89962,89963,89965,89967,89969],{"class":36,"line":613},[34,89964,11874],{"class":87},[34,89966,70606],{"class":63},[34,89968,14217],{"class":87},[34,89970,57],{"class":40},[34,89972,89973,89975],{"class":36,"line":618},[34,89974,72257],{"class":40},[34,89976,89977],{"class":63},"18\n",[34,89979,89980],{"class":36,"line":628},[34,89981,2840],{"class":40},[34,89983,89984],{"class":36,"line":640},[34,89985,89986],{"class":205},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[34,89988,89989,89991,89993,89995,89997,89999,90001],{"class":36,"line":2301},[34,89990,70719],{"class":87},[34,89992,89480],{"class":149},[34,89994,801],{"class":40},[34,89996,1614],{"class":5869},[34,89998,13088],{"class":40},[34,90000,1639],{"class":5869},[34,90002,13095],{"class":40},[34,90004,90005,90007,90009,90011,90013],{"class":36,"line":2307},[34,90006,58887],{"class":40},[34,90008,58890],{"class":149},[34,90010,801],{"class":40},[34,90012,87623],{"class":63},[34,90014,807],{"class":40},[34,90016,90017,90019,90021,90024,90026],{"class":36,"line":2328},[34,90018,58887],{"class":40},[34,90020,58890],{"class":149},[34,90022,90023],{"class":40},"(x ",[34,90025,1276],{"class":87},[34,90027,90028],{"class":40}," y)\n",[34,90030,90031],{"class":36,"line":2333},[34,90032,2840],{"class":40},[34,90034,90035],{"class":36,"line":2347},[34,90036,90037],{"class":205},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[34,90039,90040,90043,90046,90049,90051,90053,90055],{"class":36,"line":2352},[34,90041,90042],{"class":40},"    fn.",[34,90044,90045],{"class":149},"apply",[34,90047,90048],{"class":40},"(obj, [",[34,90050,1013],{"class":63},[34,90052,13088],{"class":40},[34,90054,875],{"class":63},[34,90056,5310],{"class":40},[34,90058,90059],{"class":36,"line":2381},[34,90060,90061],{"class":205},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[34,90063,90064],{"class":36,"line":2386},[34,90065,3053],{"emptyLinePlaceholder":726},[34,90067,90068],{"class":36,"line":2403},[34,90069,90070],{"class":205},"    \u002F\u002F 使用场景：求数组最大值\n",[34,90072,90073],{"class":36,"line":2408},[34,90074,90075],{"class":205},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[34,90077,90078,90081],{"class":36,"line":2413},[34,90079,90080],{"class":205},"    \u002F\u002F console.log(max)",[34,90082,90083],{"class":205},"   \u002F\u002F3\n",[34,90085,90086],{"class":36,"line":2418},[34,90087,90088],{"class":205},"    \u002F\u002F 指向空或者Math都是可以的\n",[34,90090,90091,90093,90095,90097,90099,90101,90103,90105,90107,90109],{"class":36,"line":2432},[34,90092,11874],{"class":87},[34,90094,58338],{"class":63},[34,90096,14217],{"class":87},[34,90098,52872],{"class":40},[34,90100,1106],{"class":63},[34,90102,13088],{"class":40},[34,90104,1299],{"class":63},[34,90106,13088],{"class":40},[34,90108,1330],{"class":63},[34,90110,33897],{"class":40},[34,90112,90113],{"class":36,"line":2437},[34,90114,90115],{"class":205},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[34,90117,90118,90120,90122,90124,90127,90129],{"class":36,"line":3230},[34,90119,11874],{"class":87},[34,90121,6604],{"class":63},[34,90123,14217],{"class":87},[34,90125,90126],{"class":40}," Math.max.",[34,90128,90045],{"class":149},[34,90130,90131],{"class":40},"(Math, arr)\n",[34,90133,90134,90136,90139,90141,90144,90146],{"class":36,"line":3244},[34,90135,11874],{"class":87},[34,90137,90138],{"class":63}," min",[34,90140,14217],{"class":87},[34,90142,90143],{"class":40}," Math.min.",[34,90145,90045],{"class":149},[34,90147,90131],{"class":40},[34,90149,90150,90152,90154,90157],{"class":36,"line":3252},[34,90151,74384],{"class":40},[34,90153,58890],{"class":149},[34,90155,90156],{"class":40},"(max, min)     ",[34,90158,90159],{"class":205},"\u002F\u002F100,4\n",[34,90161,90162],{"class":36,"line":3257},[34,90163,3053],{"emptyLinePlaceholder":726},[34,90165,90166],{"class":36,"line":3263},[34,90167,90168],{"class":205},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[34,90170,90171,90173,90175,90178,90180,90182,90185],{"class":36,"line":3269},[34,90172,74384],{"class":40},[34,90174,58890],{"class":149},[34,90176,90177],{"class":40},"(Max.",[34,90179,6668],{"class":149},[34,90181,801],{"class":40},[34,90183,90184],{"class":87},"...",[34,90186,90187],{"class":40},"arr))\n",[34,90189,90190,90192,90194],{"class":36,"line":3274},[34,90191,53063],{"class":40},[34,90193,52459],{"class":44},[34,90195,48],{"class":40},[34,90197,90198,90200,90202],{"class":36,"line":8601},[34,90199,102],{"class":40},[34,90201,52446],{"class":44},[34,90203,48],{"class":40},[34,90205,90206],{"class":36,"line":8625},[34,90207,3053],{"emptyLinePlaceholder":726},[34,90209,90210,90212,90214],{"class":36,"line":8630},[34,90211,102],{"class":40},[34,90213,51286],{"class":44},[34,90215,48],{"class":40},[108,90217,90218],{},[2122,90219],{"alt":29,"src":90220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[752,90222,90223],{"start":60},[755,90224,90225],{},"bind()",[108,90227,90228],{},[2122,90229],{"alt":29,"src":90230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[108,90232,90233],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[108,90235,90236],{},"bind的语法跟call很相似",[24,90238,90240],{"className":53713,"code":90239,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,90241,90242,90250,90258,90262,90267,90271,90275,90280,90284,90289,90294,90299,90304,90309,90314,90319,90323,90331],{"__ignoreMap":29},[34,90243,90244,90246,90248],{"class":36,"line":37},[34,90245,41],{"class":40},[34,90247,52446],{"class":44},[34,90249,48],{"class":40},[34,90251,90252,90254,90256],{"class":36,"line":51},[34,90253,52790],{"class":40},[34,90255,52459],{"class":44},[34,90257,48],{"class":40},[34,90259,90260],{"class":36,"line":60},[34,90261,72154],{"class":40},[34,90263,90264],{"class":36,"line":76},[34,90265,90266],{"class":40},"      age: 18\n",[34,90268,90269],{"class":36,"line":93},[34,90270,2840],{"class":40},[34,90272,90273],{"class":36,"line":99},[34,90274,77774],{"class":40},[34,90276,90277],{"class":36,"line":353},[34,90278,90279],{"class":40},"      console.log(this)\n",[34,90281,90282],{"class":36,"line":359},[34,90283,2840],{"class":40},[34,90285,90286],{"class":36,"line":579},[34,90287,90288],{"class":40},"    \u002F\u002F 1.bind 不会调用函数\n",[34,90290,90291],{"class":36,"line":589},[34,90292,90293],{"class":40},"    \u002F\u002F 2.bind能改变this的指向\n",[34,90295,90296],{"class":36,"line":601},[34,90297,90298],{"class":40},"    fn.bind()\n",[34,90300,90301],{"class":36,"line":613},[34,90302,90303],{"class":40},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[34,90305,90306],{"class":36,"line":618},[34,90307,90308],{"class":40},"    const fun = fn.bind(obj)\n",[34,90310,90311],{"class":36,"line":628},[34,90312,90313],{"class":40},"    \u002F\u002F console.log(fun)\n",[34,90315,90316],{"class":36,"line":640},[34,90317,90318],{"class":40},"    \u002F\u002F 调用,查看this的指向\n",[34,90320,90321],{"class":36,"line":2301},[34,90322,53297],{"class":40},[34,90324,90325,90327,90329],{"class":36,"line":2307},[34,90326,53063],{"class":40},[34,90328,52459],{"class":44},[34,90330,48],{"class":40},[34,90332,90333,90335,90337],{"class":36,"line":2328},[34,90334,102],{"class":40},[34,90336,52446],{"class":44},[34,90338,48],{"class":40},[108,90340,90341],{},[2122,90342],{"alt":29,"src":90343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[752,90345,90346],{"start":76},[755,90347,90348],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[24,90350,90352],{"className":53713,"code":90351,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,90353,90354,90362,90375,90383,90388,90392,90397,90402,90407,90412,90417,90422,90427,90432,90436,90444],{"__ignoreMap":29},[34,90355,90356,90358,90360],{"class":36,"line":37},[34,90357,41],{"class":40},[34,90359,52446],{"class":44},[34,90361,48],{"class":40},[34,90363,90364,90366,90368,90371,90373],{"class":36,"line":51},[34,90365,52790],{"class":40},[34,90367,54532],{"class":44},[34,90369,90370],{"class":40},">禁用\u003C\u002F",[34,90372,54532],{"class":44},[34,90374,48],{"class":40},[34,90376,90377,90379,90381],{"class":36,"line":60},[34,90378,52790],{"class":40},[34,90380,52459],{"class":44},[34,90382,48],{"class":40},[34,90384,90385],{"class":36,"line":76},[34,90386,90387],{"class":40},"    const btn = document.querySelector('button')\n",[34,90389,90390],{"class":36,"line":93},[34,90391,59659],{"class":40},[34,90393,90394],{"class":36,"line":99},[34,90395,90396],{"class":40},"      this.disabled = true\n",[34,90398,90399],{"class":36,"line":353},[34,90400,90401],{"class":40},"      \u002F\u002F 定时器是window进行调用的\n",[34,90403,90404],{"class":36,"line":359},[34,90405,90406],{"class":40},"      setTimeout(function () {\n",[34,90408,90409],{"class":36,"line":579},[34,90410,90411],{"class":40},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[34,90413,90414],{"class":36,"line":589},[34,90415,90416],{"class":40},"        this.disabled = false\n",[34,90418,90419],{"class":36,"line":601},[34,90420,90421],{"class":40},"      }.bind(this), 2000)\n",[34,90423,90424],{"class":36,"line":613},[34,90425,90426],{"class":40},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[34,90428,90429],{"class":36,"line":618},[34,90430,90431],{"class":40},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[34,90433,90434],{"class":36,"line":628},[34,90435,34112],{"class":40},[34,90437,90438,90440,90442],{"class":36,"line":640},[34,90439,53063],{"class":40},[34,90441,52459],{"class":44},[34,90443,48],{"class":40},[34,90445,90446,90448,90450],{"class":36,"line":2301},[34,90447,102],{"class":40},[34,90449,52446],{"class":44},[34,90451,48],{"class":40},[752,90453,90454],{"start":93},[755,90455,22605],{},[108,90457,90458],{},[2122,90459],{"alt":29,"src":90460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90462,90464],{"id":90463},"_417-性能优化","4.17 性能优化",[19,90466,90468],{"id":90467},"_4171-防抖","4.17.1 防抖",[108,90470,90471],{},[2122,90472],{"alt":29,"src":90473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[108,90475,90476],{},[111,90477,90478],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[108,90480,90481],{},"防抖实现方式：",[1800,90483,90484],{},[755,90485,90486],{},"lodash 提供了防抖处理",[108,90488,90489],{},"_.debounce(func,[wait=0],[options={}])",[108,90491,90492],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[24,90494,90496],{"className":51284,"code":90495,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,90497,90498,90508,90522,90526,90534,90548,90568,90580,90588,90594,90604,90616,90628,90639,90651,90661,90671,90684,90688,90696,90704,90708,90716,90734,90752,90760,90779,90789,90798,90809,90814,90818,90823,90828,90833,90858,90866,90874,90878],{"__ignoreMap":29},[34,90499,90500,90502,90504,90506],{"class":36,"line":37},[34,90501,51948],{"class":40},[34,90503,51951],{"class":44},[34,90505,51954],{"class":149},[34,90507,48],{"class":40},[34,90509,90510,90512,90514,90516,90518,90520],{"class":36,"line":51},[34,90511,41],{"class":40},[34,90513,51286],{"class":44},[34,90515,51965],{"class":149},[34,90517,153],{"class":40},[34,90519,51970],{"class":156},[34,90521,48],{"class":40},[34,90523,90524],{"class":36,"line":60},[34,90525,3053],{"emptyLinePlaceholder":726},[34,90527,90528,90530,90532],{"class":36,"line":76},[34,90529,41],{"class":40},[34,90531,51983],{"class":44},[34,90533,48],{"class":40},[34,90535,90536,90538,90540,90542,90544,90546],{"class":36,"line":93},[34,90537,52790],{"class":40},[34,90539,51993],{"class":44},[34,90541,51996],{"class":149},[34,90543,153],{"class":40},[34,90545,52001],{"class":156},[34,90547,48],{"class":40},[34,90549,90550,90552,90554,90556,90558,90560,90562,90564,90566],{"class":36,"line":99},[34,90551,52790],{"class":40},[34,90553,51993],{"class":44},[34,90555,15573],{"class":149},[34,90557,153],{"class":40},[34,90559,52040],{"class":156},[34,90561,52020],{"class":149},[34,90563,153],{"class":40},[34,90565,52047],{"class":156},[34,90567,48],{"class":40},[34,90569,90570,90572,90574,90576,90578],{"class":36,"line":353},[34,90571,52790],{"class":40},[34,90573,52056],{"class":44},[34,90575,52059],{"class":40},[34,90577,52056],{"class":44},[34,90579,48],{"class":40},[34,90581,90582,90584,90586],{"class":36,"line":359},[34,90583,52790],{"class":40},[34,90585,45],{"class":44},[34,90587,48],{"class":40},[34,90589,90590,90592],{"class":36,"line":579},[34,90591,55396],{"class":149},[34,90593,57],{"class":40},[34,90595,90596,90598,90600,90602],{"class":36,"line":589},[34,90597,73227],{"class":63},[34,90599,67],{"class":40},[34,90601,61148],{"class":63},[34,90603,73],{"class":40},[34,90605,90606,90608,90610,90612,90614],{"class":36,"line":601},[34,90607,55415],{"class":63},[34,90609,67],{"class":40},[34,90611,2376],{"class":63},[34,90613,88],{"class":87},[34,90615,73],{"class":40},[34,90617,90618,90620,90622,90624,90626],{"class":36,"line":613},[34,90619,55429],{"class":63},[34,90621,67],{"class":40},[34,90623,2376],{"class":63},[34,90625,88],{"class":87},[34,90627,73],{"class":40},[34,90629,90630,90632,90634,90637],{"class":36,"line":618},[34,90631,55528],{"class":63},[34,90633,67],{"class":40},[34,90635,90636],{"class":63},"gray",[34,90638,73],{"class":40},[34,90640,90641,90643,90645,90647,90649],{"class":36,"line":628},[34,90642,55565],{"class":63},[34,90644,67],{"class":40},[34,90646,1619],{"class":63},[34,90648,88],{"class":87},[34,90650,73],{"class":40},[34,90652,90653,90655,90657,90659],{"class":36,"line":640},[34,90654,58059],{"class":63},[34,90656,67],{"class":40},[34,90658,61485],{"class":63},[34,90660,73],{"class":40},[34,90662,90663,90665,90667,90669],{"class":36,"line":2301},[34,90664,57929],{"class":63},[34,90666,67],{"class":40},[34,90668,52239],{"class":63},[34,90670,73],{"class":40},[34,90672,90673,90676,90678,90680,90682],{"class":36,"line":2307},[34,90674,90675],{"class":63},"      padding-top",[34,90677,67],{"class":40},[34,90679,1114],{"class":63},[34,90681,88],{"class":87},[34,90683,73],{"class":40},[34,90685,90686],{"class":36,"line":2328},[34,90687,2840],{"class":40},[34,90689,90690,90692,90694],{"class":36,"line":2333},[34,90691,53063],{"class":40},[34,90693,45],{"class":44},[34,90695,48],{"class":40},[34,90697,90698,90700,90702],{"class":36,"line":2347},[34,90699,102],{"class":40},[34,90701,51983],{"class":44},[34,90703,48],{"class":40},[34,90705,90706],{"class":36,"line":2352},[34,90707,3053],{"emptyLinePlaceholder":726},[34,90709,90710,90712,90714],{"class":36,"line":2381},[34,90711,41],{"class":40},[34,90713,52446],{"class":44},[34,90715,48],{"class":40},[34,90717,90718,90720,90722,90724,90726,90728,90730,90732],{"class":36,"line":2386},[34,90719,52790],{"class":40},[34,90721,52258],{"class":44},[34,90723,54132],{"class":149},[34,90725,153],{"class":40},[34,90727,54137],{"class":156},[34,90729,55957],{"class":40},[34,90731,52258],{"class":44},[34,90733,48],{"class":40},[34,90735,90736,90738,90740,90742,90744,90746,90748,90750],{"class":36,"line":2403},[34,90737,52790],{"class":40},[34,90739,52459],{"class":44},[34,90741,55882],{"class":149},[34,90743,153],{"class":40},[34,90745,88904],{"class":156},[34,90747,55957],{"class":40},[34,90749,52459],{"class":44},[34,90751,48],{"class":40},[34,90753,90754,90756,90758],{"class":36,"line":2408},[34,90755,52790],{"class":40},[34,90757,52459],{"class":44},[34,90759,48],{"class":40},[34,90761,90762,90764,90766,90768,90770,90772,90774,90777],{"class":36,"line":2413},[34,90763,11874],{"class":87},[34,90765,87563],{"class":63},[34,90767,14217],{"class":87},[34,90769,55041],{"class":40},[34,90771,55044],{"class":149},[34,90773,801],{"class":40},[34,90775,90776],{"class":156},"'.box'",[34,90778,807],{"class":40},[34,90780,90781,90783,90785,90787],{"class":36,"line":2418},[34,90782,52865],{"class":87},[34,90784,10091],{"class":40},[34,90786,153],{"class":87},[34,90788,47984],{"class":63},[34,90790,90791,90793,90796],{"class":36,"line":2432},[34,90792,70719],{"class":87},[34,90794,90795],{"class":149}," mouseMove",[34,90797,11506],{"class":40},[34,90799,90800,90803,90805,90807],{"class":36,"line":2437},[34,90801,90802],{"class":40},"      box.innerHTML ",[34,90804,153],{"class":87},[34,90806,3685],{"class":40},[34,90808,3355],{"class":87},[34,90810,90811],{"class":36,"line":3230},[34,90812,90813],{"class":205},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[34,90815,90816],{"class":36,"line":3244},[34,90817,2840],{"class":40},[34,90819,90820],{"class":36,"line":3252},[34,90821,90822],{"class":205},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[34,90824,90825],{"class":36,"line":3257},[34,90826,90827],{"class":205},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[34,90829,90830],{"class":36,"line":3263},[34,90831,90832],{"class":205},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[34,90834,90835,90838,90840,90842,90845,90848,90851,90854,90856],{"class":36,"line":3269},[34,90836,90837],{"class":40},"    box.",[34,90839,58456],{"class":149},[34,90841,801],{"class":40},[34,90843,90844],{"class":156},"'mousemove'",[34,90846,90847],{"class":40},", _.",[34,90849,90850],{"class":149},"debounce",[34,90852,90853],{"class":40},"(mouseMove, ",[34,90855,65712],{"class":63},[34,90857,31148],{"class":40},[34,90859,90860,90862,90864],{"class":36,"line":3274},[34,90861,53063],{"class":40},[34,90863,52459],{"class":44},[34,90865,48],{"class":40},[34,90867,90868,90870,90872],{"class":36,"line":8601},[34,90869,102],{"class":40},[34,90871,52446],{"class":44},[34,90873,48],{"class":40},[34,90875,90876],{"class":36,"line":8625},[34,90877,3053],{"emptyLinePlaceholder":726},[34,90879,90880,90882,90884],{"class":36,"line":8630},[34,90881,102],{"class":40},[34,90883,51286],{"class":44},[34,90885,48],{"class":40},[1800,90887,90888],{},[755,90889,90890],{},"手写一个防抖函数来处理",[108,90892,90893],{},"防抖的核心就是利用定时器来实现的：",[108,90895,90896],{},"①声明一个定时器变量",[108,90898,90899],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[108,90901,90902],{},"③如果没有定时器则开启定时器，记得存到变量里面",[24,90904,90906],{"className":51284,"code":90905,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,90907,90908,90918,90932,90936,90944,90958,90978,90990,90998,91004,91014,91026,91038,91048,91060,91070,91080,91092,91096,91104,91112,91116,91124,91142,91160,91168,91186,91196,91204,91214,91218,91222,91226,91231,91236,91241,91246,91251,91256,91274,91281,91286,91294,91299,91312,91328,91338,91343,91347,91351,91371,91375,91380,91385,91390,91395,91403,91411,91415],{"__ignoreMap":29},[34,90909,90910,90912,90914,90916],{"class":36,"line":37},[34,90911,51948],{"class":40},[34,90913,51951],{"class":44},[34,90915,51954],{"class":149},[34,90917,48],{"class":40},[34,90919,90920,90922,90924,90926,90928,90930],{"class":36,"line":51},[34,90921,41],{"class":40},[34,90923,51286],{"class":44},[34,90925,51965],{"class":149},[34,90927,153],{"class":40},[34,90929,51970],{"class":156},[34,90931,48],{"class":40},[34,90933,90934],{"class":36,"line":60},[34,90935,3053],{"emptyLinePlaceholder":726},[34,90937,90938,90940,90942],{"class":36,"line":76},[34,90939,41],{"class":40},[34,90941,51983],{"class":44},[34,90943,48],{"class":40},[34,90945,90946,90948,90950,90952,90954,90956],{"class":36,"line":93},[34,90947,52790],{"class":40},[34,90949,51993],{"class":44},[34,90951,51996],{"class":149},[34,90953,153],{"class":40},[34,90955,52001],{"class":156},[34,90957,48],{"class":40},[34,90959,90960,90962,90964,90966,90968,90970,90972,90974,90976],{"class":36,"line":99},[34,90961,52790],{"class":40},[34,90963,51993],{"class":44},[34,90965,15573],{"class":149},[34,90967,153],{"class":40},[34,90969,52040],{"class":156},[34,90971,52020],{"class":149},[34,90973,153],{"class":40},[34,90975,52047],{"class":156},[34,90977,48],{"class":40},[34,90979,90980,90982,90984,90986,90988],{"class":36,"line":353},[34,90981,52790],{"class":40},[34,90983,52056],{"class":44},[34,90985,52059],{"class":40},[34,90987,52056],{"class":44},[34,90989,48],{"class":40},[34,90991,90992,90994,90996],{"class":36,"line":359},[34,90993,52790],{"class":40},[34,90995,45],{"class":44},[34,90997,48],{"class":40},[34,90999,91000,91002],{"class":36,"line":579},[34,91001,55396],{"class":149},[34,91003,57],{"class":40},[34,91005,91006,91008,91010,91012],{"class":36,"line":589},[34,91007,73227],{"class":63},[34,91009,67],{"class":40},[34,91011,61148],{"class":63},[34,91013,73],{"class":40},[34,91015,91016,91018,91020,91022,91024],{"class":36,"line":601},[34,91017,55415],{"class":63},[34,91019,67],{"class":40},[34,91021,2376],{"class":63},[34,91023,88],{"class":87},[34,91025,73],{"class":40},[34,91027,91028,91030,91032,91034,91036],{"class":36,"line":613},[34,91029,55429],{"class":63},[34,91031,67],{"class":40},[34,91033,2376],{"class":63},[34,91035,88],{"class":87},[34,91037,73],{"class":40},[34,91039,91040,91042,91044,91046],{"class":36,"line":618},[34,91041,55528],{"class":63},[34,91043,67],{"class":40},[34,91045,90636],{"class":63},[34,91047,73],{"class":40},[34,91049,91050,91052,91054,91056,91058],{"class":36,"line":628},[34,91051,55565],{"class":63},[34,91053,67],{"class":40},[34,91055,1619],{"class":63},[34,91057,88],{"class":87},[34,91059,73],{"class":40},[34,91061,91062,91064,91066,91068],{"class":36,"line":640},[34,91063,58059],{"class":63},[34,91065,67],{"class":40},[34,91067,61485],{"class":63},[34,91069,73],{"class":40},[34,91071,91072,91074,91076,91078],{"class":36,"line":2301},[34,91073,57929],{"class":63},[34,91075,67],{"class":40},[34,91077,52239],{"class":63},[34,91079,73],{"class":40},[34,91081,91082,91084,91086,91088,91090],{"class":36,"line":2307},[34,91083,90675],{"class":63},[34,91085,67],{"class":40},[34,91087,1114],{"class":63},[34,91089,88],{"class":87},[34,91091,73],{"class":40},[34,91093,91094],{"class":36,"line":2328},[34,91095,2840],{"class":40},[34,91097,91098,91100,91102],{"class":36,"line":2333},[34,91099,53063],{"class":40},[34,91101,45],{"class":44},[34,91103,48],{"class":40},[34,91105,91106,91108,91110],{"class":36,"line":2347},[34,91107,102],{"class":40},[34,91109,51983],{"class":44},[34,91111,48],{"class":40},[34,91113,91114],{"class":36,"line":2352},[34,91115,3053],{"emptyLinePlaceholder":726},[34,91117,91118,91120,91122],{"class":36,"line":2381},[34,91119,41],{"class":40},[34,91121,52446],{"class":44},[34,91123,48],{"class":40},[34,91125,91126,91128,91130,91132,91134,91136,91138,91140],{"class":36,"line":2386},[34,91127,52790],{"class":40},[34,91129,52258],{"class":44},[34,91131,54132],{"class":149},[34,91133,153],{"class":40},[34,91135,54137],{"class":156},[34,91137,55957],{"class":40},[34,91139,52258],{"class":44},[34,91141,48],{"class":40},[34,91143,91144,91146,91148,91150,91152,91154,91156,91158],{"class":36,"line":2403},[34,91145,52790],{"class":40},[34,91147,52459],{"class":44},[34,91149,55882],{"class":149},[34,91151,153],{"class":40},[34,91153,88904],{"class":156},[34,91155,55957],{"class":40},[34,91157,52459],{"class":44},[34,91159,48],{"class":40},[34,91161,91162,91164,91166],{"class":36,"line":2408},[34,91163,52790],{"class":40},[34,91165,52459],{"class":44},[34,91167,48],{"class":40},[34,91169,91170,91172,91174,91176,91178,91180,91182,91184],{"class":36,"line":2413},[34,91171,11874],{"class":87},[34,91173,87563],{"class":63},[34,91175,14217],{"class":87},[34,91177,55041],{"class":40},[34,91179,55044],{"class":149},[34,91181,801],{"class":40},[34,91183,90776],{"class":156},[34,91185,807],{"class":40},[34,91187,91188,91190,91192,91194],{"class":36,"line":2418},[34,91189,52865],{"class":87},[34,91191,10091],{"class":40},[34,91193,153],{"class":87},[34,91195,47984],{"class":63},[34,91197,91198,91200,91202],{"class":36,"line":2432},[34,91199,70719],{"class":87},[34,91201,90795],{"class":149},[34,91203,11506],{"class":40},[34,91205,91206,91208,91210,91212],{"class":36,"line":2437},[34,91207,90802],{"class":40},[34,91209,153],{"class":87},[34,91211,3685],{"class":40},[34,91213,3355],{"class":87},[34,91215,91216],{"class":36,"line":3230},[34,91217,90813],{"class":205},[34,91219,91220],{"class":36,"line":3244},[34,91221,2840],{"class":40},[34,91223,91224],{"class":36,"line":3252},[34,91225,90822],{"class":205},[34,91227,91228],{"class":36,"line":3257},[34,91229,91230],{"class":205},"    \u002F\u002F 手写防抖函数\n",[34,91232,91233],{"class":36,"line":3263},[34,91234,91235],{"class":205},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[34,91237,91238],{"class":36,"line":3269},[34,91239,91240],{"class":205},"    \u002F\u002F 1.声明定时器变量\n",[34,91242,91243],{"class":36,"line":3274},[34,91244,91245],{"class":205},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[34,91247,91248],{"class":36,"line":8601},[34,91249,91250],{"class":205},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[34,91252,91253],{"class":36,"line":8625},[34,91254,91255],{"class":205},"    \u002F\u002F 4.定时器里面写函数调用\n",[34,91257,91258,91260,91263,91265,91268,91270,91272],{"class":36,"line":8630},[34,91259,70719],{"class":87},[34,91261,91262],{"class":149}," debounce",[34,91264,801],{"class":40},[34,91266,91267],{"class":5869},"fn",[34,91269,13088],{"class":40},[34,91271,1515],{"class":5869},[34,91273,13095],{"class":40},[34,91275,91276,91278],{"class":36,"line":8636},[34,91277,80402],{"class":87},[34,91279,91280],{"class":40}," timer\n",[34,91282,91283],{"class":36,"line":8663},[34,91284,91285],{"class":205},"      \u002F\u002F return 返回一个匿名函数\n",[34,91287,91288,91290,91292],{"class":36,"line":8668},[34,91289,74613],{"class":87},[34,91291,59561],{"class":87},[34,91293,55097],{"class":40},[34,91295,91296],{"class":36,"line":8674},[34,91297,91298],{"class":205},"        \u002F\u002F 这里边写第二三四步\n",[34,91300,91301,91303,91306,91309],{"class":36,"line":8686},[34,91302,3150],{"class":87},[34,91304,91305],{"class":40}," (timer) ",[34,91307,91308],{"class":149},"clearTimeout",[34,91310,91311],{"class":40},"(timer)\n",[34,91313,91314,91317,91319,91322,91324,91326],{"class":36,"line":8698},[34,91315,91316],{"class":40},"        timer ",[34,91318,153],{"class":87},[34,91320,91321],{"class":149}," setTimeout",[34,91323,801],{"class":40},[34,91325,55094],{"class":87},[34,91327,55097],{"class":40},[34,91329,91330,91333,91335],{"class":36,"line":8710},[34,91331,91332],{"class":149},"          fn",[34,91334,13703],{"class":40},[34,91336,91337],{"class":205},"\u002F\u002F加小括号调用fn }, t)\n",[34,91339,91340],{"class":36,"line":10369},[34,91341,91342],{"class":40},"        }, t)\n",[34,91344,91345],{"class":36,"line":10394},[34,91346,53044],{"class":40},[34,91348,91349],{"class":36,"line":10417},[34,91350,2840],{"class":40},[34,91352,91353,91355,91357,91359,91361,91363,91365,91367,91369],{"class":36,"line":10441},[34,91354,90837],{"class":40},[34,91356,58456],{"class":149},[34,91358,801],{"class":40},[34,91360,90844],{"class":156},[34,91362,13088],{"class":40},[34,91364,90850],{"class":149},[34,91366,90853],{"class":40},[34,91368,65712],{"class":63},[34,91370,31148],{"class":40},[34,91372,91373],{"class":36,"line":10446},[34,91374,3053],{"emptyLinePlaceholder":726},[34,91376,91377],{"class":36,"line":10451},[34,91378,91379],{"class":205},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[34,91381,91382],{"class":36,"line":10456},[34,91383,91384],{"class":205},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[34,91386,91387],{"class":36,"line":10465},[34,91388,91389],{"class":205},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[34,91391,91392],{"class":36,"line":10470},[34,91393,91394],{"class":205},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[34,91396,91397,91399,91401],{"class":36,"line":10476},[34,91398,53063],{"class":40},[34,91400,52459],{"class":44},[34,91402,48],{"class":40},[34,91404,91405,91407,91409],{"class":36,"line":10497},[34,91406,102],{"class":40},[34,91408,52446],{"class":44},[34,91410,48],{"class":40},[34,91412,91413],{"class":36,"line":10503},[34,91414,3053],{"emptyLinePlaceholder":726},[34,91416,91417,91419,91421],{"class":36,"line":10517},[34,91418,102],{"class":40},[34,91420,51286],{"class":44},[34,91422,48],{"class":40},[19,91424,91426],{"id":91425},"_4172-节流","4.17.2 节流",[108,91428,91429],{},[2122,91430],{"alt":29,"src":91431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[108,91433,91434],{},[2122,91435],{"alt":29,"src":91436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[108,91438,91439],{},[111,91440,91441],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[108,91443,91444],{},"实现方式：",[1800,91446,91447],{},[755,91448,91449],{},"lodash 提供的节流函数来处理",[108,91451,91452],{},"_.throttle(func,[wait=0],[options=])",[108,91454,91455],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[24,91457,91459],{"className":51284,"code":91458,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,91460,91461,91471,91485,91489,91497,91511,91531,91543,91551,91557,91567,91579,91591,91601,91613,91623,91633,91645,91649,91657,91665,91669,91677,91695,91713,91721,91739,91749,91757,91767,91771,91775,91779,91784,91789,91810,91818,91826,91830],{"__ignoreMap":29},[34,91462,91463,91465,91467,91469],{"class":36,"line":37},[34,91464,51948],{"class":40},[34,91466,51951],{"class":44},[34,91468,51954],{"class":149},[34,91470,48],{"class":40},[34,91472,91473,91475,91477,91479,91481,91483],{"class":36,"line":51},[34,91474,41],{"class":40},[34,91476,51286],{"class":44},[34,91478,51965],{"class":149},[34,91480,153],{"class":40},[34,91482,51970],{"class":156},[34,91484,48],{"class":40},[34,91486,91487],{"class":36,"line":60},[34,91488,3053],{"emptyLinePlaceholder":726},[34,91490,91491,91493,91495],{"class":36,"line":76},[34,91492,41],{"class":40},[34,91494,51983],{"class":44},[34,91496,48],{"class":40},[34,91498,91499,91501,91503,91505,91507,91509],{"class":36,"line":93},[34,91500,52790],{"class":40},[34,91502,51993],{"class":44},[34,91504,51996],{"class":149},[34,91506,153],{"class":40},[34,91508,52001],{"class":156},[34,91510,48],{"class":40},[34,91512,91513,91515,91517,91519,91521,91523,91525,91527,91529],{"class":36,"line":99},[34,91514,52790],{"class":40},[34,91516,51993],{"class":44},[34,91518,15573],{"class":149},[34,91520,153],{"class":40},[34,91522,52040],{"class":156},[34,91524,52020],{"class":149},[34,91526,153],{"class":40},[34,91528,52047],{"class":156},[34,91530,48],{"class":40},[34,91532,91533,91535,91537,91539,91541],{"class":36,"line":353},[34,91534,52790],{"class":40},[34,91536,52056],{"class":44},[34,91538,52059],{"class":40},[34,91540,52056],{"class":44},[34,91542,48],{"class":40},[34,91544,91545,91547,91549],{"class":36,"line":359},[34,91546,52790],{"class":40},[34,91548,45],{"class":44},[34,91550,48],{"class":40},[34,91552,91553,91555],{"class":36,"line":579},[34,91554,55396],{"class":149},[34,91556,57],{"class":40},[34,91558,91559,91561,91563,91565],{"class":36,"line":589},[34,91560,73227],{"class":63},[34,91562,67],{"class":40},[34,91564,61148],{"class":63},[34,91566,73],{"class":40},[34,91568,91569,91571,91573,91575,91577],{"class":36,"line":601},[34,91570,55415],{"class":63},[34,91572,67],{"class":40},[34,91574,2376],{"class":63},[34,91576,88],{"class":87},[34,91578,73],{"class":40},[34,91580,91581,91583,91585,91587,91589],{"class":36,"line":613},[34,91582,55429],{"class":63},[34,91584,67],{"class":40},[34,91586,2376],{"class":63},[34,91588,88],{"class":87},[34,91590,73],{"class":40},[34,91592,91593,91595,91597,91599],{"class":36,"line":618},[34,91594,55528],{"class":63},[34,91596,67],{"class":40},[34,91598,90636],{"class":63},[34,91600,73],{"class":40},[34,91602,91603,91605,91607,91609,91611],{"class":36,"line":628},[34,91604,55565],{"class":63},[34,91606,67],{"class":40},[34,91608,1619],{"class":63},[34,91610,88],{"class":87},[34,91612,73],{"class":40},[34,91614,91615,91617,91619,91621],{"class":36,"line":640},[34,91616,58059],{"class":63},[34,91618,67],{"class":40},[34,91620,61485],{"class":63},[34,91622,73],{"class":40},[34,91624,91625,91627,91629,91631],{"class":36,"line":2301},[34,91626,57929],{"class":63},[34,91628,67],{"class":40},[34,91630,52239],{"class":63},[34,91632,73],{"class":40},[34,91634,91635,91637,91639,91641,91643],{"class":36,"line":2307},[34,91636,90675],{"class":63},[34,91638,67],{"class":40},[34,91640,1114],{"class":63},[34,91642,88],{"class":87},[34,91644,73],{"class":40},[34,91646,91647],{"class":36,"line":2328},[34,91648,2840],{"class":40},[34,91650,91651,91653,91655],{"class":36,"line":2333},[34,91652,53063],{"class":40},[34,91654,45],{"class":44},[34,91656,48],{"class":40},[34,91658,91659,91661,91663],{"class":36,"line":2347},[34,91660,102],{"class":40},[34,91662,51983],{"class":44},[34,91664,48],{"class":40},[34,91666,91667],{"class":36,"line":2352},[34,91668,3053],{"emptyLinePlaceholder":726},[34,91670,91671,91673,91675],{"class":36,"line":2381},[34,91672,41],{"class":40},[34,91674,52446],{"class":44},[34,91676,48],{"class":40},[34,91678,91679,91681,91683,91685,91687,91689,91691,91693],{"class":36,"line":2386},[34,91680,52790],{"class":40},[34,91682,52258],{"class":44},[34,91684,54132],{"class":149},[34,91686,153],{"class":40},[34,91688,54137],{"class":156},[34,91690,55957],{"class":40},[34,91692,52258],{"class":44},[34,91694,48],{"class":40},[34,91696,91697,91699,91701,91703,91705,91707,91709,91711],{"class":36,"line":2403},[34,91698,52790],{"class":40},[34,91700,52459],{"class":44},[34,91702,55882],{"class":149},[34,91704,153],{"class":40},[34,91706,88904],{"class":156},[34,91708,55957],{"class":40},[34,91710,52459],{"class":44},[34,91712,48],{"class":40},[34,91714,91715,91717,91719],{"class":36,"line":2408},[34,91716,52790],{"class":40},[34,91718,52459],{"class":44},[34,91720,48],{"class":40},[34,91722,91723,91725,91727,91729,91731,91733,91735,91737],{"class":36,"line":2413},[34,91724,11874],{"class":87},[34,91726,87563],{"class":63},[34,91728,14217],{"class":87},[34,91730,55041],{"class":40},[34,91732,55044],{"class":149},[34,91734,801],{"class":40},[34,91736,90776],{"class":156},[34,91738,807],{"class":40},[34,91740,91741,91743,91745,91747],{"class":36,"line":2418},[34,91742,52865],{"class":87},[34,91744,10091],{"class":40},[34,91746,153],{"class":87},[34,91748,47984],{"class":63},[34,91750,91751,91753,91755],{"class":36,"line":2432},[34,91752,70719],{"class":87},[34,91754,90795],{"class":149},[34,91756,11506],{"class":40},[34,91758,91759,91761,91763,91765],{"class":36,"line":2437},[34,91760,90802],{"class":40},[34,91762,153],{"class":87},[34,91764,3685],{"class":40},[34,91766,3355],{"class":87},[34,91768,91769],{"class":36,"line":3230},[34,91770,90813],{"class":205},[34,91772,91773],{"class":36,"line":3244},[34,91774,2840],{"class":40},[34,91776,91777],{"class":36,"line":3252},[34,91778,90822],{"class":205},[34,91780,91781],{"class":36,"line":3257},[34,91782,91783],{"class":205},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[34,91785,91786],{"class":36,"line":3263},[34,91787,91788],{"class":205},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[34,91790,91791,91793,91795,91797,91799,91801,91804,91806,91808],{"class":36,"line":3269},[34,91792,90837],{"class":40},[34,91794,58456],{"class":149},[34,91796,801],{"class":40},[34,91798,90844],{"class":156},[34,91800,90847],{"class":40},[34,91802,91803],{"class":149},"throttle",[34,91805,90853],{"class":40},[34,91807,65712],{"class":63},[34,91809,31148],{"class":40},[34,91811,91812,91814,91816],{"class":36,"line":3274},[34,91813,53063],{"class":40},[34,91815,52459],{"class":44},[34,91817,48],{"class":40},[34,91819,91820,91822,91824],{"class":36,"line":8601},[34,91821,102],{"class":40},[34,91823,52446],{"class":44},[34,91825,48],{"class":40},[34,91827,91828],{"class":36,"line":8625},[34,91829,3053],{"emptyLinePlaceholder":726},[34,91831,91832,91834,91836],{"class":36,"line":8630},[34,91833,102],{"class":40},[34,91835,51286],{"class":44},[34,91837,48],{"class":40},[1800,91839,91840],{},[755,91841,91842],{},"手写一个节流函数来处理",[108,91844,71583],{},[108,91846,90896],{},[108,91848,91849],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[108,91851,91852],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[24,91854,91856],{"className":51284,"code":91855,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,91857,91858,91868,91882,91886,91894,91908,91928,91940,91948,91954,91964,91976,91988,91998,92010,92020,92030,92042,92046,92054,92062,92066,92074,92092,92110,92118,92136,92146,92154,92164,92168,92172,92176,92181,92186,92191,92196,92201,92206,92223,92229,92237,92248,92263,92270,92275,92280,92290,92295,92300,92305,92309,92313,92317,92337,92345,92353,92357],{"__ignoreMap":29},[34,91859,91860,91862,91864,91866],{"class":36,"line":37},[34,91861,51948],{"class":40},[34,91863,51951],{"class":44},[34,91865,51954],{"class":149},[34,91867,48],{"class":40},[34,91869,91870,91872,91874,91876,91878,91880],{"class":36,"line":51},[34,91871,41],{"class":40},[34,91873,51286],{"class":44},[34,91875,51965],{"class":149},[34,91877,153],{"class":40},[34,91879,51970],{"class":156},[34,91881,48],{"class":40},[34,91883,91884],{"class":36,"line":60},[34,91885,3053],{"emptyLinePlaceholder":726},[34,91887,91888,91890,91892],{"class":36,"line":76},[34,91889,41],{"class":40},[34,91891,51983],{"class":44},[34,91893,48],{"class":40},[34,91895,91896,91898,91900,91902,91904,91906],{"class":36,"line":93},[34,91897,52790],{"class":40},[34,91899,51993],{"class":44},[34,91901,51996],{"class":149},[34,91903,153],{"class":40},[34,91905,52001],{"class":156},[34,91907,48],{"class":40},[34,91909,91910,91912,91914,91916,91918,91920,91922,91924,91926],{"class":36,"line":99},[34,91911,52790],{"class":40},[34,91913,51993],{"class":44},[34,91915,15573],{"class":149},[34,91917,153],{"class":40},[34,91919,52040],{"class":156},[34,91921,52020],{"class":149},[34,91923,153],{"class":40},[34,91925,52047],{"class":156},[34,91927,48],{"class":40},[34,91929,91930,91932,91934,91936,91938],{"class":36,"line":353},[34,91931,52790],{"class":40},[34,91933,52056],{"class":44},[34,91935,52059],{"class":40},[34,91937,52056],{"class":44},[34,91939,48],{"class":40},[34,91941,91942,91944,91946],{"class":36,"line":359},[34,91943,52790],{"class":40},[34,91945,45],{"class":44},[34,91947,48],{"class":40},[34,91949,91950,91952],{"class":36,"line":579},[34,91951,55396],{"class":149},[34,91953,57],{"class":40},[34,91955,91956,91958,91960,91962],{"class":36,"line":589},[34,91957,73227],{"class":63},[34,91959,67],{"class":40},[34,91961,61148],{"class":63},[34,91963,73],{"class":40},[34,91965,91966,91968,91970,91972,91974],{"class":36,"line":601},[34,91967,55415],{"class":63},[34,91969,67],{"class":40},[34,91971,2376],{"class":63},[34,91973,88],{"class":87},[34,91975,73],{"class":40},[34,91977,91978,91980,91982,91984,91986],{"class":36,"line":613},[34,91979,55429],{"class":63},[34,91981,67],{"class":40},[34,91983,2376],{"class":63},[34,91985,88],{"class":87},[34,91987,73],{"class":40},[34,91989,91990,91992,91994,91996],{"class":36,"line":618},[34,91991,55528],{"class":63},[34,91993,67],{"class":40},[34,91995,90636],{"class":63},[34,91997,73],{"class":40},[34,91999,92000,92002,92004,92006,92008],{"class":36,"line":628},[34,92001,55565],{"class":63},[34,92003,67],{"class":40},[34,92005,1619],{"class":63},[34,92007,88],{"class":87},[34,92009,73],{"class":40},[34,92011,92012,92014,92016,92018],{"class":36,"line":640},[34,92013,58059],{"class":63},[34,92015,67],{"class":40},[34,92017,61485],{"class":63},[34,92019,73],{"class":40},[34,92021,92022,92024,92026,92028],{"class":36,"line":2301},[34,92023,57929],{"class":63},[34,92025,67],{"class":40},[34,92027,52239],{"class":63},[34,92029,73],{"class":40},[34,92031,92032,92034,92036,92038,92040],{"class":36,"line":2307},[34,92033,90675],{"class":63},[34,92035,67],{"class":40},[34,92037,1114],{"class":63},[34,92039,88],{"class":87},[34,92041,73],{"class":40},[34,92043,92044],{"class":36,"line":2328},[34,92045,2840],{"class":40},[34,92047,92048,92050,92052],{"class":36,"line":2333},[34,92049,53063],{"class":40},[34,92051,45],{"class":44},[34,92053,48],{"class":40},[34,92055,92056,92058,92060],{"class":36,"line":2347},[34,92057,102],{"class":40},[34,92059,51983],{"class":44},[34,92061,48],{"class":40},[34,92063,92064],{"class":36,"line":2352},[34,92065,3053],{"emptyLinePlaceholder":726},[34,92067,92068,92070,92072],{"class":36,"line":2381},[34,92069,41],{"class":40},[34,92071,52446],{"class":44},[34,92073,48],{"class":40},[34,92075,92076,92078,92080,92082,92084,92086,92088,92090],{"class":36,"line":2386},[34,92077,52790],{"class":40},[34,92079,52258],{"class":44},[34,92081,54132],{"class":149},[34,92083,153],{"class":40},[34,92085,54137],{"class":156},[34,92087,55957],{"class":40},[34,92089,52258],{"class":44},[34,92091,48],{"class":40},[34,92093,92094,92096,92098,92100,92102,92104,92106,92108],{"class":36,"line":2403},[34,92095,52790],{"class":40},[34,92097,52459],{"class":44},[34,92099,55882],{"class":149},[34,92101,153],{"class":40},[34,92103,88904],{"class":156},[34,92105,55957],{"class":40},[34,92107,52459],{"class":44},[34,92109,48],{"class":40},[34,92111,92112,92114,92116],{"class":36,"line":2408},[34,92113,52790],{"class":40},[34,92115,52459],{"class":44},[34,92117,48],{"class":40},[34,92119,92120,92122,92124,92126,92128,92130,92132,92134],{"class":36,"line":2413},[34,92121,11874],{"class":87},[34,92123,87563],{"class":63},[34,92125,14217],{"class":87},[34,92127,55041],{"class":40},[34,92129,55044],{"class":149},[34,92131,801],{"class":40},[34,92133,90776],{"class":156},[34,92135,807],{"class":40},[34,92137,92138,92140,92142,92144],{"class":36,"line":2418},[34,92139,52865],{"class":87},[34,92141,10091],{"class":40},[34,92143,153],{"class":87},[34,92145,47984],{"class":63},[34,92147,92148,92150,92152],{"class":36,"line":2432},[34,92149,70719],{"class":87},[34,92151,90795],{"class":149},[34,92153,11506],{"class":40},[34,92155,92156,92158,92160,92162],{"class":36,"line":2437},[34,92157,90802],{"class":40},[34,92159,153],{"class":87},[34,92161,3685],{"class":40},[34,92163,3355],{"class":87},[34,92165,92166],{"class":36,"line":3230},[34,92167,90813],{"class":205},[34,92169,92170],{"class":36,"line":3244},[34,92171,2840],{"class":40},[34,92173,92174],{"class":36,"line":3252},[34,92175,90822],{"class":205},[34,92177,92178],{"class":36,"line":3257},[34,92179,92180],{"class":205},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[34,92182,92183],{"class":36,"line":3263},[34,92184,92185],{"class":205},"    \u002F\u002F 1.声明一个定时器变量\n",[34,92187,92188],{"class":36,"line":3269},[34,92189,92190],{"class":205},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[34,92192,92193],{"class":36,"line":3274},[34,92194,92195],{"class":205},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[34,92197,92198],{"class":36,"line":8601},[34,92199,92200],{"class":205},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[34,92202,92203],{"class":36,"line":8625},[34,92204,92205],{"class":205},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[34,92207,92208,92210,92213,92215,92217,92219,92221],{"class":36,"line":8630},[34,92209,70719],{"class":87},[34,92211,92212],{"class":149}," throttle",[34,92214,801],{"class":40},[34,92216,91267],{"class":5869},[34,92218,13088],{"class":40},[34,92220,1515],{"class":5869},[34,92222,13095],{"class":40},[34,92224,92225,92227],{"class":36,"line":8636},[34,92226,80402],{"class":87},[34,92228,91280],{"class":40},[34,92230,92231,92233,92235],{"class":36,"line":8663},[34,92232,74613],{"class":87},[34,92234,59561],{"class":87},[34,92236,55097],{"class":40},[34,92238,92239,92241,92243,92245],{"class":36,"line":8668},[34,92240,3150],{"class":87},[34,92242,2312],{"class":40},[34,92244,1022],{"class":87},[34,92246,92247],{"class":40},"timer) {\n",[34,92249,92250,92253,92255,92257,92259,92261],{"class":36,"line":8674},[34,92251,92252],{"class":40},"          timer ",[34,92254,153],{"class":87},[34,92256,91321],{"class":149},[34,92258,801],{"class":40},[34,92260,55094],{"class":87},[34,92262,55097],{"class":40},[34,92264,92265,92268],{"class":36,"line":8686},[34,92266,92267],{"class":149},"            fn",[34,92269,2629],{"class":40},[34,92271,92272],{"class":36,"line":8698},[34,92273,92274],{"class":205},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[34,92276,92277],{"class":36,"line":8710},[34,92278,92279],{"class":205},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[34,92281,92282,92285,92287],{"class":36,"line":10369},[34,92283,92284],{"class":40},"            timer ",[34,92286,153],{"class":87},[34,92288,92289],{"class":63}," null\n",[34,92291,92292],{"class":36,"line":10394},[34,92293,92294],{"class":205},"            \u002F\u002F 不能用clearTimeout(timer)\n",[34,92296,92297],{"class":36,"line":10417},[34,92298,92299],{"class":205},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[34,92301,92302],{"class":36,"line":10441},[34,92303,92304],{"class":40},"          }, t)\n",[34,92306,92307],{"class":36,"line":10446},[34,92308,3182],{"class":40},[34,92310,92311],{"class":36,"line":10451},[34,92312,53044],{"class":40},[34,92314,92315],{"class":36,"line":10456},[34,92316,2840],{"class":40},[34,92318,92319,92321,92323,92325,92327,92329,92331,92333,92335],{"class":36,"line":10465},[34,92320,90837],{"class":40},[34,92322,58456],{"class":149},[34,92324,801],{"class":40},[34,92326,90844],{"class":156},[34,92328,13088],{"class":40},[34,92330,91803],{"class":149},[34,92332,90853],{"class":40},[34,92334,65712],{"class":63},[34,92336,31148],{"class":40},[34,92338,92339,92341,92343],{"class":36,"line":10470},[34,92340,53063],{"class":40},[34,92342,52459],{"class":44},[34,92344,48],{"class":40},[34,92346,92347,92349,92351],{"class":36,"line":10476},[34,92348,102],{"class":40},[34,92350,52446],{"class":44},[34,92352,48],{"class":40},[34,92354,92355],{"class":36,"line":10497},[34,92356,3053],{"emptyLinePlaceholder":726},[34,92358,92359,92361,92363],{"class":36,"line":10503},[34,92360,102],{"class":40},[34,92362,51286],{"class":44},[34,92364,48],{"class":40},[19,92366,92368],{"id":92367},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[24,92370,92372],{"className":53713,"code":92371,"language":53715,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,92373,92374,92382,92390,92395,92400,92405,92410,92414,92422],{"__ignoreMap":29},[34,92375,92376,92378,92380],{"class":36,"line":37},[34,92377,41],{"class":40},[34,92379,52446],{"class":44},[34,92381,48],{"class":40},[34,92383,92384,92386,92388],{"class":36,"line":51},[34,92385,52790],{"class":40},[34,92387,52459],{"class":44},[34,92389,48],{"class":40},[34,92391,92392],{"class":36,"line":60},[34,92393,92394],{"class":40},"    let timer = null\n",[34,92396,92397],{"class":36,"line":76},[34,92398,92399],{"class":40},"    timer = setTimeout(() => {\n",[34,92401,92402],{"class":36,"line":93},[34,92403,92404],{"class":40},"      clearTimeout(timer)\n",[34,92406,92407],{"class":36,"line":99},[34,92408,92409],{"class":40},"      console.log(timer)\n",[34,92411,92412],{"class":36,"line":353},[34,92413,60868],{"class":40},[34,92415,92416,92418,92420],{"class":36,"line":359},[34,92417,53063],{"class":40},[34,92419,52459],{"class":44},[34,92421,48],{"class":40},[34,92423,92424,92426,92428],{"class":36,"line":579},[34,92425,102],{"class":40},[34,92427,52446],{"class":44},[34,92429,48],{"class":40},[108,92431,92432],{},"输出为1",[108,92434,92435],{},"在开启的定时器里边写清除定时器",[108,92437,92438],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[19,92440,92442],{"id":92441},"_4174-节流综合案例","4.17.4 节流综合案例",[108,92444,92445],{},"页面打开，可以记录上一次的视频播放位置",[108,92447,92448],{},[2122,92449],{"alt":29,"src":92450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[108,92452,92453],{},[2122,92454],{"alt":29,"src":92455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[24,92457,92459],{"className":51284,"code":92458,"language":51286,"meta":29,"style":29},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[31,92460,92461,92471,92485,92489,92497,92511,92531,92551,92573,92586,92594,92600,92610,92620,92630,92634,92638,92645,92658,92670,92674,92678,92688,92700,92714,92718,92722,92729,92739,92752,92764,92774,92784,92800,92812,92816,92820,92828,92838,92850,92860,92870,92880,92884,92888,92898,92909,92913,92921,92929,92933,92941,92956,92971,92986,93007,93015,93023,93038,93060,93068,93083,93109,93135,93161,93169,93177,93196,93204,93209,93228,93233,93251,93256,93261,93269,93274,93288,93296,93301,93318,93322,93327,93349,93353,93361,93369,93373],{"__ignoreMap":29},[34,92462,92463,92465,92467,92469],{"class":36,"line":37},[34,92464,51948],{"class":40},[34,92466,51951],{"class":44},[34,92468,51954],{"class":149},[34,92470,48],{"class":40},[34,92472,92473,92475,92477,92479,92481,92483],{"class":36,"line":51},[34,92474,41],{"class":40},[34,92476,51286],{"class":44},[34,92478,51965],{"class":149},[34,92480,153],{"class":40},[34,92482,51970],{"class":156},[34,92484,48],{"class":40},[34,92486,92487],{"class":36,"line":60},[34,92488,3053],{"emptyLinePlaceholder":726},[34,92490,92491,92493,92495],{"class":36,"line":76},[34,92492,41],{"class":40},[34,92494,51983],{"class":44},[34,92496,48],{"class":40},[34,92498,92499,92501,92503,92505,92507,92509],{"class":36,"line":93},[34,92500,52790],{"class":40},[34,92502,51993],{"class":44},[34,92504,51996],{"class":149},[34,92506,153],{"class":40},[34,92508,52001],{"class":156},[34,92510,59770],{"class":40},[34,92512,92513,92515,92517,92519,92521,92523,92525,92527,92529],{"class":36,"line":99},[34,92514,52790],{"class":40},[34,92516,51993],{"class":44},[34,92518,52012],{"class":149},[34,92520,153],{"class":40},[34,92522,52017],{"class":156},[34,92524,52020],{"class":149},[34,92526,153],{"class":40},[34,92528,52025],{"class":156},[34,92530,59770],{"class":40},[34,92532,92533,92535,92537,92539,92541,92543,92545,92547,92549],{"class":36,"line":353},[34,92534,52790],{"class":40},[34,92536,51993],{"class":44},[34,92538,15573],{"class":149},[34,92540,153],{"class":40},[34,92542,52040],{"class":156},[34,92544,52020],{"class":149},[34,92546,153],{"class":40},[34,92548,52047],{"class":156},[34,92550,59770],{"class":40},[34,92552,92553,92555,92557,92559,92561,92564,92566,92568,92571],{"class":36,"line":359},[34,92554,52790],{"class":40},[34,92556,51993],{"class":44},[34,92558,15573],{"class":149},[34,92560,153],{"class":40},[34,92562,92563],{"class":156},"\"referrer\"",[34,92565,52020],{"class":149},[34,92567,153],{"class":40},[34,92569,92570],{"class":156},"\"never\"",[34,92572,59770],{"class":40},[34,92574,92575,92577,92579,92582,92584],{"class":36,"line":579},[34,92576,52790],{"class":40},[34,92578,52056],{"class":44},[34,92580,92581],{"class":40},">综合案例\u003C\u002F",[34,92583,52056],{"class":44},[34,92585,48],{"class":40},[34,92587,92588,92590,92592],{"class":36,"line":589},[34,92589,52790],{"class":40},[34,92591,45],{"class":44},[34,92593,48],{"class":40},[34,92595,92596,92598],{"class":36,"line":601},[34,92597,7056],{"class":44},[34,92599,57],{"class":40},[34,92601,92602,92604,92606,92608],{"class":36,"line":613},[34,92603,55340],{"class":63},[34,92605,67],{"class":40},[34,92607,987],{"class":63},[34,92609,73],{"class":40},[34,92611,92612,92614,92616,92618],{"class":36,"line":618},[34,92613,55351],{"class":63},[34,92615,67],{"class":40},[34,92617,987],{"class":63},[34,92619,73],{"class":40},[34,92621,92622,92624,92626,92628],{"class":36,"line":628},[34,92623,73227],{"class":63},[34,92625,67],{"class":40},[34,92627,61148],{"class":63},[34,92629,73],{"class":40},[34,92631,92632],{"class":36,"line":640},[34,92633,2840],{"class":40},[34,92635,92636],{"class":36,"line":2301},[34,92637,3053],{"emptyLinePlaceholder":726},[34,92639,92640,92643],{"class":36,"line":2307},[34,92641,92642],{"class":149},"    .container",[34,92644,57],{"class":40},[34,92646,92647,92649,92651,92654,92656],{"class":36,"line":2328},[34,92648,55415],{"class":63},[34,92650,67],{"class":40},[34,92652,92653],{"class":63},"1200",[34,92655,88],{"class":87},[34,92657,73],{"class":40},[34,92659,92660,92662,92664,92666,92668],{"class":36,"line":2333},[34,92661,55351],{"class":63},[34,92663,67],{"class":40},[34,92665,987],{"class":63},[34,92667,52203],{"class":63},[34,92669,73],{"class":40},[34,92671,92672],{"class":36,"line":2347},[34,92673,2840],{"class":40},[34,92675,92676],{"class":36,"line":2352},[34,92677,3053],{"emptyLinePlaceholder":726},[34,92679,92680,92683,92686],{"class":36,"line":2381},[34,92681,92682],{"class":149},"    .video",[34,92684,92685],{"class":44}," video",[34,92687,57],{"class":40},[34,92689,92690,92692,92694,92696,92698],{"class":36,"line":2386},[34,92691,55415],{"class":63},[34,92693,67],{"class":40},[34,92695,1106],{"class":63},[34,92697,1123],{"class":87},[34,92699,73],{"class":40},[34,92701,92702,92704,92706,92708,92710,92712],{"class":36,"line":2403},[34,92703,55340],{"class":63},[34,92705,67],{"class":40},[34,92707,1495],{"class":63},[34,92709,88],{"class":87},[34,92711,4746],{"class":63},[34,92713,73],{"class":40},[34,92715,92716],{"class":36,"line":2408},[34,92717,2840],{"class":40},[34,92719,92720],{"class":36,"line":2413},[34,92721,3053],{"emptyLinePlaceholder":726},[34,92723,92724,92727],{"class":36,"line":2418},[34,92725,92726],{"class":149},"    .elevator",[34,92728,57],{"class":40},[34,92730,92731,92733,92735,92737],{"class":36,"line":2432},[34,92732,55403],{"class":63},[34,92734,67],{"class":40},[34,92736,86863],{"class":63},[34,92738,73],{"class":40},[34,92740,92741,92743,92745,92748,92750],{"class":36,"line":2437},[34,92742,55590],{"class":63},[34,92744,67],{"class":40},[34,92746,92747],{"class":63},"280",[34,92749,88],{"class":87},[34,92751,73],{"class":40},[34,92753,92754,92756,92758,92760,92762],{"class":36,"line":3230},[34,92755,87057],{"class":63},[34,92757,67],{"class":40},[34,92759,1495],{"class":63},[34,92761,88],{"class":87},[34,92763,73],{"class":40},[34,92765,92766,92768,92770,92772],{"class":36,"line":3244},[34,92767,86870],{"class":63},[34,92769,67],{"class":40},[34,92771,86875],{"class":63},[34,92773,73],{"class":40},[34,92775,92776,92778,92780,92782],{"class":36,"line":3252},[34,92777,62362],{"class":63},[34,92779,67],{"class":40},[34,92781,61485],{"class":63},[34,92783,73],{"class":40},[34,92785,92786,92788,92790,92792,92794,92796,92798],{"class":36,"line":3257},[34,92787,62617],{"class":63},[34,92789,67],{"class":40},[34,92791,1013],{"class":63},[34,92793,88],{"class":87},[34,92795,52168],{"class":63},[34,92797,62884],{"class":63},[34,92799,73],{"class":40},[34,92801,92802,92804,92806,92808,92810],{"class":36,"line":3263},[34,92803,55415],{"class":63},[34,92805,67],{"class":40},[34,92807,1701],{"class":63},[34,92809,88],{"class":87},[34,92811,73],{"class":40},[34,92813,92814],{"class":36,"line":3269},[34,92815,2840],{"class":40},[34,92817,92818],{"class":36,"line":3274},[34,92819,3053],{"emptyLinePlaceholder":726},[34,92821,92822,92824,92826],{"class":36,"line":8601},[34,92823,92726],{"class":149},[34,92825,2058],{"class":44},[34,92827,57],{"class":40},[34,92829,92830,92832,92834,92836],{"class":36,"line":8625},[34,92831,55652],{"class":63},[34,92833,67],{"class":40},[34,92835,61512],{"class":63},[34,92837,73],{"class":40},[34,92839,92840,92842,92844,92846,92848],{"class":36,"line":8630},[34,92841,55340],{"class":63},[34,92843,67],{"class":40},[34,92845,1241],{"class":63},[34,92847,88],{"class":87},[34,92849,73],{"class":40},[34,92851,92852,92854,92856,92858],{"class":36,"line":8636},[34,92853,64608],{"class":63},[34,92855,67],{"class":40},[34,92857,546],{"class":63},[34,92859,73],{"class":40},[34,92861,92862,92864,92866,92868],{"class":36,"line":8663},[34,92863,57929],{"class":63},[34,92865,67],{"class":40},[34,92867,52239],{"class":63},[34,92869,73],{"class":40},[34,92871,92872,92874,92876,92878],{"class":36,"line":8668},[34,92873,58059],{"class":63},[34,92875,67],{"class":40},[34,92877,62710],{"class":63},[34,92879,73],{"class":40},[34,92881,92882],{"class":36,"line":8674},[34,92883,2840],{"class":40},[34,92885,92886],{"class":36,"line":8686},[34,92887,3053],{"emptyLinePlaceholder":726},[34,92889,92890,92892,92894,92896],{"class":36,"line":8698},[34,92891,92726],{"class":149},[34,92893,2058],{"class":44},[34,92895,64662],{"class":149},[34,92897,57],{"class":40},[34,92899,92900,92902,92904,92907],{"class":36,"line":8710},[34,92901,58059],{"class":63},[34,92903,67],{"class":40},[34,92905,92906],{"class":63},"#1286ff",[34,92908,73],{"class":40},[34,92910,92911],{"class":36,"line":10369},[34,92912,2840],{"class":40},[34,92914,92915,92917,92919],{"class":36,"line":10394},[34,92916,53063],{"class":40},[34,92918,45],{"class":44},[34,92920,48],{"class":40},[34,92922,92923,92925,92927],{"class":36,"line":10417},[34,92924,102],{"class":40},[34,92926,51983],{"class":44},[34,92928,48],{"class":40},[34,92930,92931],{"class":36,"line":10441},[34,92932,3053],{"emptyLinePlaceholder":726},[34,92934,92935,92937,92939],{"class":36,"line":10446},[34,92936,41],{"class":40},[34,92938,52446],{"class":44},[34,92940,48],{"class":40},[34,92942,92943,92945,92947,92949,92951,92954],{"class":36,"line":10451},[34,92944,52790],{"class":40},[34,92946,52258],{"class":44},[34,92948,54132],{"class":149},[34,92950,153],{"class":40},[34,92952,92953],{"class":156},"\"container\"",[34,92955,48],{"class":40},[34,92957,92958,92960,92962,92964,92966,92969],{"class":36,"line":10456},[34,92959,51990],{"class":40},[34,92961,52258],{"class":44},[34,92963,54132],{"class":149},[34,92965,153],{"class":40},[34,92967,92968],{"class":156},"\"header\"",[34,92970,48],{"class":40},[34,92972,92973,92975,92977,92979,92981,92984],{"class":36,"line":10465},[34,92974,55877],{"class":40},[34,92976,520],{"class":44},[34,92978,267],{"class":149},[34,92980,153],{"class":40},[34,92982,92983],{"class":156},"\"http:\u002F\u002Fpip.itcast.cn\"",[34,92985,48],{"class":40},[34,92987,92988,92990,92992,92994,92996,92999,93001,93003,93005],{"class":36,"line":10470},[34,92989,55945],{"class":40},[34,92991,2122],{"class":44},[34,92993,55882],{"class":149},[34,92995,153],{"class":40},[34,92997,92998],{"class":156},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[34,93000,55890],{"class":149},[34,93002,153],{"class":40},[34,93004,8305],{"class":156},[34,93006,59770],{"class":40},[34,93008,93009,93011,93013],{"class":36,"line":10476},[34,93010,56050],{"class":40},[34,93012,520],{"class":44},[34,93014,48],{"class":40},[34,93016,93017,93019,93021],{"class":36,"line":10497},[34,93018,52423],{"class":40},[34,93020,52258],{"class":44},[34,93022,48],{"class":40},[34,93024,93025,93027,93029,93031,93033,93036],{"class":36,"line":10503},[34,93026,51990],{"class":40},[34,93028,52258],{"class":44},[34,93030,54132],{"class":149},[34,93032,153],{"class":40},[34,93034,93035],{"class":156},"\"video\"",[34,93037,48],{"class":40},[34,93039,93040,93042,93044,93046,93048,93051,93054,93056,93058],{"class":36,"line":10517},[34,93041,55877],{"class":40},[34,93043,28834],{"class":44},[34,93045,55882],{"class":149},[34,93047,153],{"class":40},[34,93049,93050],{"class":156},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[34,93052,93053],{"class":149}," controls",[34,93055,55957],{"class":40},[34,93057,28834],{"class":44},[34,93059,48],{"class":40},[34,93061,93062,93064,93066],{"class":36,"line":10523},[34,93063,52423],{"class":40},[34,93065,52258],{"class":44},[34,93067,48],{"class":40},[34,93069,93070,93072,93074,93076,93078,93081],{"class":36,"line":10550},[34,93071,51990],{"class":40},[34,93073,52258],{"class":44},[34,93075,54132],{"class":149},[34,93077,153],{"class":40},[34,93079,93080],{"class":156},"\"elevator\"",[34,93082,48],{"class":40},[34,93084,93085,93087,93089,93091,93093,93095,93098,93100,93102,93105,93107],{"class":36,"line":10559},[34,93086,55877],{"class":40},[34,93088,520],{"class":44},[34,93090,267],{"class":149},[34,93092,153],{"class":40},[34,93094,64874],{"class":156},[34,93096,93097],{"class":149}," data-ref",[34,93099,153],{"class":40},[34,93101,93035],{"class":156},[34,93103,93104],{"class":40},">视频介绍\u003C\u002F",[34,93106,520],{"class":44},[34,93108,48],{"class":40},[34,93110,93111,93113,93115,93117,93119,93121,93123,93125,93128,93131,93133],{"class":36,"line":10565},[34,93112,55877],{"class":40},[34,93114,520],{"class":44},[34,93116,267],{"class":149},[34,93118,153],{"class":40},[34,93120,64874],{"class":156},[34,93122,93097],{"class":149},[34,93124,153],{"class":40},[34,93126,93127],{"class":156},"\"intro\"",[34,93129,93130],{"class":40},">课程简介\u003C\u002F",[34,93132,520],{"class":44},[34,93134,48],{"class":40},[34,93136,93137,93139,93141,93143,93145,93147,93149,93151,93154,93157,93159],{"class":36,"line":10573},[34,93138,55877],{"class":40},[34,93140,520],{"class":44},[34,93142,267],{"class":149},[34,93144,153],{"class":40},[34,93146,64874],{"class":156},[34,93148,93097],{"class":149},[34,93150,153],{"class":40},[34,93152,93153],{"class":156},"\"outline\"",[34,93155,93156],{"class":40},">评论列表\u003C\u002F",[34,93158,520],{"class":44},[34,93160,48],{"class":40},[34,93162,93163,93165,93167],{"class":36,"line":10578},[34,93164,52423],{"class":40},[34,93166,52258],{"class":44},[34,93168,48],{"class":40},[34,93170,93171,93173,93175],{"class":36,"line":17256},[34,93172,53063],{"class":40},[34,93174,52258],{"class":44},[34,93176,48],{"class":40},[34,93178,93179,93181,93183,93185,93187,93190,93192,93194],{"class":36,"line":17262},[34,93180,52790],{"class":40},[34,93182,52459],{"class":44},[34,93184,55882],{"class":149},[34,93186,153],{"class":40},[34,93188,93189],{"class":156},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[34,93191,55957],{"class":40},[34,93193,52459],{"class":44},[34,93195,48],{"class":40},[34,93197,93198,93200,93202],{"class":36,"line":17285},[34,93199,52790],{"class":40},[34,93201,52459],{"class":44},[34,93203,48],{"class":40},[34,93205,93206],{"class":36,"line":17291},[34,93207,93208],{"class":205},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[34,93210,93211,93213,93215,93217,93219,93221,93223,93226],{"class":36,"line":17314},[34,93212,11874],{"class":87},[34,93214,92685],{"class":63},[34,93216,14217],{"class":87},[34,93218,55041],{"class":40},[34,93220,55044],{"class":149},[34,93222,801],{"class":40},[34,93224,93225],{"class":156},"'video'",[34,93227,807],{"class":40},[34,93229,93230],{"class":36,"line":17328},[34,93231,93232],{"class":205},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[34,93234,93235,93238,93240,93242,93244,93247,93249],{"class":36,"line":17348},[34,93236,93237],{"class":40},"    video.ontimeupdate ",[34,93239,153],{"class":87},[34,93241,88985],{"class":40},[34,93243,91803],{"class":149},[34,93245,93246],{"class":40},"(() ",[34,93248,85352],{"class":87},[34,93250,57],{"class":40},[34,93252,93253],{"class":36,"line":17354},[34,93254,93255],{"class":205},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[34,93257,93258],{"class":36,"line":17365},[34,93259,93260],{"class":205},"      \u002F\u002F 控制台输出当前的时间\n",[34,93262,93263,93266],{"class":36,"line":17388},[34,93264,93265],{"class":205},"      \u002F\u002F console.log(video.currentTime)",[34,93267,93268],{"class":205},"  \u002F\u002F获得当前的视频时间\n",[34,93270,93271],{"class":36,"line":17410},[34,93272,93273],{"class":205},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[34,93275,93276,93278,93280,93282,93285],{"class":36,"line":17415},[34,93277,75314],{"class":40},[34,93279,72285],{"class":149},[34,93281,801],{"class":40},[34,93283,93284],{"class":156},"'currentTime'",[34,93286,93287],{"class":40},", video.currentTime)\n",[34,93289,93290,93292,93294],{"class":36,"line":17421},[34,93291,55180],{"class":40},[34,93293,7063],{"class":63},[34,93295,807],{"class":40},[34,93297,93298],{"class":36,"line":17435},[34,93299,93300],{"class":205},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[34,93302,93303,93306,93309,93311,93314,93316],{"class":36,"line":17448},[34,93304,93305],{"class":40},"    video.",[34,93307,93308],{"class":149},"onloadeddata",[34,93310,14217],{"class":87},[34,93312,93313],{"class":40}," () ",[34,93315,85352],{"class":87},[34,93317,57],{"class":40},[34,93319,93320],{"class":36,"line":17453},[34,93321,60655],{"class":205},[34,93323,93324],{"class":36,"line":17467},[34,93325,93326],{"class":205},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[34,93328,93329,93332,93334,93337,93339,93341,93343,93345,93347],{"class":36,"line":17472},[34,93330,93331],{"class":40},"      video.currentTime ",[34,93333,153],{"class":87},[34,93335,93336],{"class":40}," localStorage.",[34,93338,72316],{"class":149},[34,93340,801],{"class":40},[34,93342,93284],{"class":156},[34,93344,14367],{"class":40},[34,93346,71988],{"class":87},[34,93348,47984],{"class":63},[34,93350,93351],{"class":36,"line":17478},[34,93352,2840],{"class":40},[34,93354,93355,93357,93359],{"class":36,"line":17483},[34,93356,53063],{"class":40},[34,93358,52459],{"class":44},[34,93360,48],{"class":40},[34,93362,93363,93365,93367],{"class":36,"line":17497},[34,93364,102],{"class":40},[34,93366,52446],{"class":44},[34,93368,48],{"class":40},[34,93370,93371],{"class":36,"line":17502},[34,93372,3053],{"emptyLinePlaceholder":726},[34,93374,93375,93377,93379],{"class":36,"line":17507},[34,93376,102],{"class":40},[34,93378,51286],{"class":44},[34,93380,48],{"class":40},[45,93382,93383],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":93385},[93386,93391,93395,93396,93397,93402,93407,93408,93409,93410,93417,93422,93423,93433,93437,93438,93442],{"id":77322,"depth":51,"text":77323,"children":93387},[93388,93389,93390],{"id":77326,"depth":60,"text":77327},{"id":77351,"depth":60,"text":77352},{"id":77363,"depth":60,"text":77364},{"id":77375,"depth":51,"text":77376,"children":93392},[93393,93394],{"id":77379,"depth":60,"text":77380},{"id":77394,"depth":60,"text":77395},{"id":77446,"depth":51,"text":77447},{"id":77490,"depth":51,"text":77491},{"id":77507,"depth":51,"text":77508,"children":93398},[93399,93400,93401],{"id":77511,"depth":60,"text":77512},{"id":77524,"depth":60,"text":77525},{"id":77629,"depth":60,"text":77630},{"id":77917,"depth":51,"text":77918,"children":93403},[93404,93405,93406],{"id":77921,"depth":60,"text":77922},{"id":78364,"depth":60,"text":78365},{"id":78775,"depth":60,"text":78776},{"id":78838,"depth":51,"text":78839},{"id":78917,"depth":51,"text":78918},{"id":79010,"depth":51,"text":79011},{"id":80855,"depth":51,"text":80856,"children":93411},[93412,93413,93414,93415,93416],{"id":80859,"depth":60,"text":80860},{"id":80871,"depth":60,"text":80872},{"id":81090,"depth":60,"text":81091},{"id":81108,"depth":60,"text":81109},{"id":81168,"depth":60,"text":81169},{"id":85436,"depth":51,"text":85437,"children":93418},[93419,93420,93421],{"id":85440,"depth":60,"text":85441},{"id":85458,"depth":60,"text":85459},{"id":85484,"depth":60,"text":85485},{"id":85493,"depth":51,"text":85494},{"id":85515,"depth":51,"text":85516,"children":93424},[93425,93426,93427,93428,93429,93430,93431,93432],{"id":85519,"depth":60,"text":85520},{"id":85780,"depth":60,"text":85781},{"id":85966,"depth":60,"text":85967},{"id":86333,"depth":60,"text":86334},{"id":86449,"depth":60,"text":86450},{"id":86485,"depth":60,"text":86486},{"id":86532,"depth":60,"text":86533},{"id":86566,"depth":60,"text":86567},{"id":87929,"depth":51,"text":87930,"children":93434},[93435,93436],{"id":87933,"depth":60,"text":87934},{"id":87970,"depth":60,"text":87971},{"id":89325,"depth":51,"text":89326},{"id":89696,"depth":51,"text":89697,"children":93439},[93440,93441],{"id":89700,"depth":60,"text":89701},{"id":89734,"depth":60,"text":89735},{"id":90463,"depth":51,"text":90464,"children":93443},[93444,93445,93446,93447],{"id":90467,"depth":60,"text":90468},{"id":91425,"depth":60,"text":91426},{"id":92367,"depth":60,"text":92368},{"id":92441,"depth":60,"text":92442},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77311,"description":723},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93454,"title":93455,"body":93456,"description":93467,"extension":724,"meta":93468,"navigation":726,"path":93470,"seo":93471,"stem":93472,"__hash__":93473},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93457,"toc":93465},[93458],[108,93459,93460,93461],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[520,93462,93463],{"href":93463,"rel":93464},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24517],{"title":29,"searchDepth":51,"depth":51,"links":93466},[],"三件套第三套学习",{"category":93469},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93455,"description":93467},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93475,"title":93476,"body":93477,"description":723,"extension":724,"meta":93582,"navigation":726,"path":93583,"seo":93584,"stem":93585,"__hash__":93586},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93478,"toc":93577},[93479,93486,93489,93492,93495,93499,93508,93511,93514,93518,93527,93530,93534,93537,93557,93560,93574],[108,93480,93481],{},[520,93482,93485],{"href":93483,"rel":93484},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24517],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93487,93476],{"id":93488},"_1安装",[108,93490,93491],{},"numpy是科学计算基础库,底层是C语言",[108,93493,93494],{},"三种方式：",[14,93496,93498],{"id":93497},"_11-通过pip安装","1.1 通过pip安装",[24,93500,93502],{"className":31029,"code":93501,"language":31031,"meta":29,"style":29},"pip install numpy\n",[31,93503,93504],{"__ignoreMap":29},[34,93505,93506],{"class":36,"line":37},[34,93507,93501],{"class":40},[108,93509,93510],{},"首选方式，自动处理依赖项",[108,93512,93513],{},"在提示系统命令符中使用cmd",[14,93515,93517],{"id":93516},"_12-通过anaconda安装","1.2 通过Anaconda安装",[24,93519,93521],{"className":31029,"code":93520,"language":31031,"meta":29,"style":29},"conda install numpy\n",[31,93522,93523],{"__ignoreMap":29},[34,93524,93525],{"class":36,"line":37},[34,93526,93520],{"class":40},[108,93528,93529],{},"自动解决环境依赖",[14,93531,93533],{"id":93532},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[108,93535,93536],{},"对于Debian\u002FUbuntu",[24,93538,93540],{"className":31029,"code":93539,"language":31031,"meta":29,"style":29},"sudo apt-get install python3-numpy\n",[31,93541,93542],{"__ignoreMap":29},[34,93543,93544,93547,93549,93552,93554],{"class":36,"line":37},[34,93545,93546],{"class":40},"sudo apt",[34,93548,1327],{"class":87},[34,93550,93551],{"class":40},"get install python3",[34,93553,1327],{"class":87},[34,93555,93556],{"class":40},"numpy\n",[108,93558,93559],{},"对于Fedora:",[24,93561,93563],{"className":31029,"code":93562,"language":31031,"meta":29,"style":29},"sudo dnf install python3-numpy\n",[31,93564,93565],{"__ignoreMap":29},[34,93566,93567,93570,93572],{"class":36,"line":37},[34,93568,93569],{"class":40},"sudo dnf install python3",[34,93571,1327],{"class":87},[34,93573,93556],{"class":40},[45,93575,93576],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":93578},[93579,93580,93581],{"id":93497,"depth":51,"text":93498},{"id":93516,"depth":51,"text":93517},{"id":93532,"depth":51,"text":93533},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93476,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93588,"title":93589,"body":93590,"description":723,"extension":724,"meta":93703,"navigation":726,"path":93704,"seo":93705,"stem":93706,"__hash__":93707},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93591,"toc":93701},[93592,93595,93598,93601,93604,93607,93610,93613,93616,93619,93695,93698],[10,93593,93589],{"id":93594},"_10算数函数",[108,93596,93597],{},"加减乘除运算跟python基础语法没区别",[108,93599,93600],{},"除了python那种方法外还可以使用函数",[108,93602,93603],{},"加：np.add(a,b)",[108,93605,93606],{},"减：np.subtract(a,b)",[108,93608,93609],{},"乘：np.multiply(a,b)",[108,93611,93612],{},"除：np.divide(a,b) == a\u002Fb",[108,93614,93615],{},"取余：np.mod(a,b) == a%b",[108,93617,93618],{},"必须会的用法：",[24,93620,93622],{"className":31029,"code":93621,"language":31031,"meta":29,"style":29},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[31,93623,93624,93646,93667,93677,93690],{"__ignoreMap":29},[34,93625,93626,93628,93630,93633,93635,93638,93640,93642,93644],{"class":36,"line":37},[34,93627,520],{"class":40},[34,93629,153],{"class":87},[34,93631,93632],{"class":40},"np.arange(",[34,93634,1215],{"class":63},[34,93636,93637],{"class":40},").reshape(",[34,93639,869],{"class":63},[34,93641,1173],{"class":40},[34,93643,869],{"class":63},[34,93645,807],{"class":40},[34,93647,93648,93650,93652,93655,93657,93659,93661,93663,93665],{"class":36,"line":51},[34,93649,1058],{"class":40},[34,93651,153],{"class":87},[34,93653,93654],{"class":40},"np.array([",[34,93656,1241],{"class":63},[34,93658,1173],{"class":40},[34,93660,1241],{"class":63},[34,93662,1173],{"class":40},[34,93664,1241],{"class":63},[34,93666,5310],{"class":40},[34,93668,93669,93672,93674],{"class":36,"line":60},[34,93670,93671],{"class":40},"result",[34,93673,153],{"class":87},[34,93675,93676],{"class":40},"np.empty_like(a)\n",[34,93678,93679,93682,93685,93687],{"class":36,"line":76},[34,93680,93681],{"class":40},"np.add(a,b,",[34,93683,93684],{"class":5869},"out",[34,93686,153],{"class":87},[34,93688,93689],{"class":40},"result)\n",[34,93691,93692],{"class":36,"line":93},[34,93693,93694],{"class":40},"result\n",[108,93696,93697],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[45,93699,93700],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":93702},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93589,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93709,"title":93710,"body":93711,"description":723,"extension":724,"meta":94473,"navigation":726,"path":94474,"seo":94475,"stem":94476,"__hash__":94477},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93712,"toc":94460},[93713,93716,93719,93722,93726,93765,93769,93813,93873,93877,93880,93919,93922,93967,93971,94007,94011,94080,94084,94148,94152,94155,94158,94161,94164,94200,94204,94244,94248,94320,94323,94327,94390,94394,94457],[10,93714,93710],{"id":93715},"_11统计函数",[108,93717,93718],{},"sum max min mean",[108,93720,93721],{},"这些有axis参数，可以指定方向",[14,93723,93725],{"id":93724},"_111-sum求和函数","11.1 sum()求和函数",[24,93727,93729],{"className":31029,"code":93728,"language":31031,"meta":29,"style":29},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[31,93730,93731,93736,93757],{"__ignoreMap":29},[34,93732,93733],{"class":36,"line":37},[34,93734,93735],{"class":205},"#创建一维数组\n",[34,93737,93738,93740,93742,93745,93747,93749,93751,93753,93755],{"class":36,"line":51},[34,93739,520],{"class":40},[34,93741,153],{"class":87},[34,93743,93744],{"class":40},"np.random.randint(",[34,93746,1013],{"class":63},[34,93748,1173],{"class":40},[34,93750,1106],{"class":63},[34,93752,1173],{"class":40},[34,93754,1495],{"class":63},[34,93756,807],{"class":40},[34,93758,93759,93762],{"class":36,"line":60},[34,93760,93761],{"class":40},"np.sum(a)",[34,93763,93764],{"class":205},"#求和\n",[14,93766,93768],{"id":93767},"_112-max求最大值函数","11.2 max()求最大值函数",[24,93770,93772],{"className":31029,"code":93771,"language":31031,"meta":29,"style":29},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[31,93773,93774,93778,93798,93803,93808],{"__ignoreMap":29},[34,93775,93776],{"class":36,"line":37},[34,93777,93735],{"class":205},[34,93779,93780,93782,93784,93786,93788,93790,93792,93794,93796],{"class":36,"line":51},[34,93781,520],{"class":40},[34,93783,153],{"class":87},[34,93785,93744],{"class":40},[34,93787,1013],{"class":63},[34,93789,1173],{"class":40},[34,93791,1106],{"class":63},[34,93793,1173],{"class":40},[34,93795,1495],{"class":63},[34,93797,807],{"class":40},[34,93799,93800],{"class":36,"line":60},[34,93801,93802],{"class":40},"np.max(a)\n",[34,93804,93805],{"class":36,"line":76},[34,93806,93807],{"class":205},"#最大索引(求最大元素的索引)arg\n",[34,93809,93810],{"class":36,"line":93},[34,93811,93812],{"class":40},"np.argmax(a)\n",[24,93814,93816],{"className":31029,"code":93815,"language":31031,"meta":29,"style":29},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[31,93817,93818,93839,93859,93863],{"__ignoreMap":29},[34,93819,93820,93822,93824,93827,93829,93831,93833,93835,93837],{"class":36,"line":37},[34,93821,11572],{"class":40},[34,93823,153],{"class":87},[34,93825,93826],{"class":40}," np.array([",[34,93828,1013],{"class":63},[34,93830,13088],{"class":40},[34,93832,1114],{"class":63},[34,93834,13088],{"class":40},[34,93836,869],{"class":63},[34,93838,5310],{"class":40},[34,93840,93841,93843,93845,93847,93849,93851,93853,93855,93857],{"class":36,"line":51},[34,93842,11598],{"class":40},[34,93844,153],{"class":87},[34,93846,93826],{"class":40},[34,93848,869],{"class":63},[34,93850,13088],{"class":40},[34,93852,875],{"class":63},[34,93854,13088],{"class":40},[34,93856,1088],{"class":63},[34,93858,5310],{"class":40},[34,93860,93861],{"class":36,"line":60},[34,93862,3053],{"emptyLinePlaceholder":726},[34,93864,93865,93867,93870],{"class":36,"line":76},[34,93866,31066],{"class":63},[34,93868,93869],{"class":40},"(np.maximum(a, b))   ",[34,93871,93872],{"class":205},"# [3 5 4]，每个位置上取较大值\n",[14,93874,93876],{"id":93875},"_113-mean求平均值函数","11.3 mean()求平均值函数",[108,93878,93879],{},"①一维数组：",[24,93881,93883],{"className":31029,"code":93882,"language":31031,"meta":29,"style":29},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[31,93884,93885,93889,93909,93914],{"__ignoreMap":29},[34,93886,93887],{"class":36,"line":37},[34,93888,93735],{"class":205},[34,93890,93891,93893,93895,93897,93899,93901,93903,93905,93907],{"class":36,"line":51},[34,93892,520],{"class":40},[34,93894,153],{"class":87},[34,93896,93744],{"class":40},[34,93898,1013],{"class":63},[34,93900,1173],{"class":40},[34,93902,1106],{"class":63},[34,93904,1173],{"class":40},[34,93906,1495],{"class":63},[34,93908,807],{"class":40},[34,93910,93911],{"class":36,"line":60},[34,93912,93913],{"class":205},"#求平均值\n",[34,93915,93916],{"class":36,"line":76},[34,93917,93918],{"class":40},"np.mean(a)\n",[108,93920,93921],{},"②二维数组",[24,93923,93925],{"className":31029,"code":93924,"language":31031,"meta":29,"style":29},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[31,93926,93927,93932,93957,93962],{"__ignoreMap":29},[34,93928,93929],{"class":36,"line":37},[34,93930,93931],{"class":205},"#二维数组\n",[34,93933,93934,93937,93939,93941,93943,93945,93947,93949,93951,93953,93955],{"class":36,"line":51},[34,93935,93936],{"class":40},"aa",[34,93938,153],{"class":87},[34,93940,93632],{"class":40},[34,93942,1013],{"class":63},[34,93944,1173],{"class":40},[34,93946,1318],{"class":63},[34,93948,93637],{"class":40},[34,93950,869],{"class":63},[34,93952,1173],{"class":40},[34,93954,1088],{"class":63},[34,93956,807],{"class":40},[34,93958,93959],{"class":36,"line":60},[34,93960,93961],{"class":205},"#对数组中的所有数求平均\n",[34,93963,93964],{"class":36,"line":76},[34,93965,93966],{"class":40},"np.mean(aa)\n",[14,93968,93970],{"id":93969},"_114-median求中位数函数","11.4 median()求中位数函数",[24,93972,93974],{"className":31029,"code":93973,"language":31031,"meta":29,"style":29},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[31,93975,93976,93981,93997,94002],{"__ignoreMap":29},[34,93977,93978],{"class":36,"line":37},[34,93979,93980],{"class":205},"#求中位数\n",[34,93982,93983,93985,93987,93989,93991,93993,93995],{"class":36,"line":51},[34,93984,1058],{"class":40},[34,93986,153],{"class":87},[34,93988,93632],{"class":40},[34,93990,1013],{"class":63},[34,93992,1173],{"class":40},[34,93994,1241],{"class":63},[34,93996,807],{"class":40},[34,93998,93999],{"class":36,"line":60},[34,94000,94001],{"class":40},"np.median(b)\n",[34,94003,94004],{"class":36,"line":76},[34,94005,94006],{"class":205},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94008,94010],{"id":94009},"_115-power求幂运算函数","11.5 power()求幂运算函数",[24,94012,94014],{"className":31029,"code":94013,"language":31031,"meta":29,"style":29},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[31,94015,94016,94032,94037,94042,94051,94056,94065],{"__ignoreMap":29},[34,94017,94018,94020,94022,94024,94026,94028,94030],{"class":36,"line":37},[34,94019,1058],{"class":40},[34,94021,153],{"class":87},[34,94023,93632],{"class":40},[34,94025,1013],{"class":63},[34,94027,1173],{"class":40},[34,94029,1241],{"class":63},[34,94031,807],{"class":40},[34,94033,94034],{"class":36,"line":51},[34,94035,94036],{"class":205},"#幂运算\n",[34,94038,94039],{"class":36,"line":60},[34,94040,94041],{"class":205},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[34,94043,94044,94047,94049],{"class":36,"line":76},[34,94045,94046],{"class":40},"np.power(b,",[34,94048,875],{"class":63},[34,94050,807],{"class":40},[34,94052,94053],{"class":36,"line":93},[34,94054,94055],{"class":205},"#或者以下代码，将数据存储起来\n",[34,94057,94058,94060,94062],{"class":36,"line":99},[34,94059,1639],{"class":40},[34,94061,153],{"class":87},[34,94063,94064],{"class":40},"np.empty_like(b)\n",[34,94066,94067,94069,94071,94073,94075,94077],{"class":36,"line":353},[34,94068,94046],{"class":40},[34,94070,875],{"class":63},[34,94072,1173],{"class":40},[34,94074,93684],{"class":5869},[34,94076,153],{"class":87},[34,94078,94079],{"class":40},"y)\n",[14,94081,94083],{"id":94082},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[24,94085,94087],{"className":31029,"code":94086,"language":31031,"meta":29,"style":29},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[31,94088,94089,94105,94110,94115,94119,94137],{"__ignoreMap":29},[34,94090,94091,94093,94095,94097,94099,94101,94103],{"class":36,"line":37},[34,94092,1058],{"class":40},[34,94094,153],{"class":87},[34,94096,93632],{"class":40},[34,94098,1013],{"class":63},[34,94100,1173],{"class":40},[34,94102,1241],{"class":63},[34,94104,807],{"class":40},[34,94106,94107],{"class":36,"line":51},[34,94108,94109],{"class":205},"#开方\n",[34,94111,94112],{"class":36,"line":60},[34,94113,94114],{"class":40},"np.sqrt(b)\n",[34,94116,94117],{"class":36,"line":76},[34,94118,94055],{"class":205},[34,94120,94121,94123,94125,94128,94131,94133,94135],{"class":36,"line":93},[34,94122,1639],{"class":40},[34,94124,153],{"class":87},[34,94126,94127],{"class":40},"np.empty_like(b,",[34,94129,94130],{"class":5869},"dtype",[34,94132,153],{"class":87},[34,94134,840],{"class":63},[34,94136,807],{"class":40},[34,94138,94139,94142,94144,94146],{"class":36,"line":99},[34,94140,94141],{"class":40},"np.sqrt(b,",[34,94143,93684],{"class":5869},[34,94145,153],{"class":87},[34,94147,94079],{"class":40},[14,94149,94151],{"id":94150},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[108,94153,94154],{},"对数组中的元素累计求和，可指定轴",[108,94156,94157],{},"#累计求和的意思是：",[108,94159,94160],{},"a = np.array([1, 2, 3, 4])",[108,94162,94163],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[24,94165,94167],{"className":31029,"code":94166,"language":31031,"meta":29,"style":29},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[31,94168,94169,94185,94190,94195],{"__ignoreMap":29},[34,94170,94171,94173,94175,94177,94179,94181,94183],{"class":36,"line":37},[34,94172,1058],{"class":40},[34,94174,153],{"class":87},[34,94176,93632],{"class":40},[34,94178,1013],{"class":63},[34,94180,1173],{"class":40},[34,94182,1241],{"class":63},[34,94184,807],{"class":40},[34,94186,94187],{"class":36,"line":51},[34,94188,94189],{"class":40},"np.cumsum(b)\n",[34,94191,94192],{"class":36,"line":60},[34,94193,94194],{"class":205},"#结果：\n",[34,94196,94197],{"class":36,"line":76},[34,94198,94199],{"class":205},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94201,94203],{"id":94202},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[24,94205,94207],{"className":31029,"code":94206,"language":31031,"meta":29,"style":29},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[31,94208,94209,94225,94230,94235,94239],{"__ignoreMap":29},[34,94210,94211,94213,94215,94217,94219,94221,94223],{"class":36,"line":37},[34,94212,1058],{"class":40},[34,94214,153],{"class":87},[34,94216,93632],{"class":40},[34,94218,1013],{"class":63},[34,94220,1173],{"class":40},[34,94222,1241],{"class":63},[34,94224,807],{"class":40},[34,94226,94227],{"class":36,"line":51},[34,94228,94229],{"class":205},"#对数组中的元素累计求积，可指定轴\n",[34,94231,94232],{"class":36,"line":60},[34,94233,94234],{"class":40},"np.cumprod(b)\n",[34,94236,94237],{"class":36,"line":76},[34,94238,94194],{"class":205},[34,94240,94241],{"class":36,"line":93},[34,94242,94243],{"class":205},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94245,94247],{"id":94246},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[24,94249,94251],{"className":31029,"code":94250,"language":31031,"meta":29,"style":29},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[31,94252,94253,94258,94306,94311,94315],{"__ignoreMap":29},[34,94254,94255],{"class":36,"line":37},[34,94256,94257],{"class":205},"#删除数组中的重复数据，并对数据进行排序\n",[34,94259,94260,94262,94264,94266,94268,94270,94272,94274,94276,94278,94280,94282,94284,94286,94288,94290,94292,94294,94296,94298,94300,94302,94304],{"class":36,"line":51},[34,94261,520],{"class":40},[34,94263,153],{"class":87},[34,94265,93654],{"class":40},[34,94267,1013],{"class":63},[34,94269,1173],{"class":40},[34,94271,875],{"class":63},[34,94273,1173],{"class":40},[34,94275,869],{"class":63},[34,94277,1173],{"class":40},[34,94279,1293],{"class":63},[34,94281,1173],{"class":40},[34,94283,869],{"class":63},[34,94285,1173],{"class":40},[34,94287,1241],{"class":63},[34,94289,1173],{"class":40},[34,94291,993],{"class":63},[34,94293,1173],{"class":40},[34,94295,987],{"class":63},[34,94297,1173],{"class":40},[34,94299,1570],{"class":63},[34,94301,1173],{"class":40},[34,94303,1088],{"class":63},[34,94305,5310],{"class":40},[34,94307,94308],{"class":36,"line":60},[34,94309,94310],{"class":40},"np.unique(a)\n",[34,94312,94313],{"class":36,"line":76},[34,94314,94194],{"class":205},[34,94316,94317],{"class":36,"line":93},[34,94318,94319],{"class":205},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[108,94321,94322],{},"升序形式排序",[14,94324,94326],{"id":94325},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[24,94328,94330],{"className":31029,"code":94329,"language":31031,"meta":29,"style":29},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[31,94331,94332,94380,94385],{"__ignoreMap":29},[34,94333,94334,94336,94338,94340,94342,94344,94346,94348,94350,94352,94354,94356,94358,94360,94362,94364,94366,94368,94370,94372,94374,94376,94378],{"class":36,"line":37},[34,94335,520],{"class":40},[34,94337,153],{"class":87},[34,94339,93654],{"class":40},[34,94341,1013],{"class":63},[34,94343,1173],{"class":40},[34,94345,875],{"class":63},[34,94347,1173],{"class":40},[34,94349,869],{"class":63},[34,94351,1173],{"class":40},[34,94353,1293],{"class":63},[34,94355,1173],{"class":40},[34,94357,869],{"class":63},[34,94359,1173],{"class":40},[34,94361,1241],{"class":63},[34,94363,1173],{"class":40},[34,94365,993],{"class":63},[34,94367,1173],{"class":40},[34,94369,987],{"class":63},[34,94371,1173],{"class":40},[34,94373,1570],{"class":63},[34,94375,1173],{"class":40},[34,94377,1088],{"class":63},[34,94379,5310],{"class":40},[34,94381,94382],{"class":36,"line":51},[34,94383,94384],{"class":205},"#返回数组中非零元素的索引\n",[34,94386,94387],{"class":36,"line":60},[34,94388,94389],{"class":40},"np.nonzero(a)\n",[14,94391,94393],{"id":94392},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[24,94395,94397],{"className":31029,"code":94396,"language":31031,"meta":29,"style":29},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[31,94398,94399,94447,94452],{"__ignoreMap":29},[34,94400,94401,94403,94405,94407,94409,94411,94413,94415,94417,94419,94421,94423,94425,94427,94429,94431,94433,94435,94437,94439,94441,94443,94445],{"class":36,"line":37},[34,94402,520],{"class":40},[34,94404,153],{"class":87},[34,94406,93654],{"class":40},[34,94408,1013],{"class":63},[34,94410,1173],{"class":40},[34,94412,875],{"class":63},[34,94414,1173],{"class":40},[34,94416,869],{"class":63},[34,94418,1173],{"class":40},[34,94420,1293],{"class":63},[34,94422,1173],{"class":40},[34,94424,869],{"class":63},[34,94426,1173],{"class":40},[34,94428,1241],{"class":63},[34,94430,1173],{"class":40},[34,94432,993],{"class":63},[34,94434,1173],{"class":40},[34,94436,987],{"class":63},[34,94438,1173],{"class":40},[34,94440,1570],{"class":63},[34,94442,1173],{"class":40},[34,94444,1088],{"class":63},[34,94446,5310],{"class":40},[34,94448,94449],{"class":36,"line":51},[34,94450,94451],{"class":205},"#计算一组数中最大值与最小值的差，可指定轴\n",[34,94453,94454],{"class":36,"line":60},[34,94455,94456],{"class":40},"np.ptp(a)\n",[45,94458,94459],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":94461},[94462,94463,94464,94465,94466,94467,94468,94469,94470,94471,94472],{"id":93724,"depth":51,"text":93725},{"id":93767,"depth":51,"text":93768},{"id":93875,"depth":51,"text":93876},{"id":93969,"depth":51,"text":93970},{"id":94009,"depth":51,"text":94010},{"id":94082,"depth":51,"text":94083},{"id":94150,"depth":51,"text":94151},{"id":94202,"depth":51,"text":94203},{"id":94246,"depth":51,"text":94247},{"id":94325,"depth":51,"text":94326},{"id":94392,"depth":51,"text":94393},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93710,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94479,"title":94480,"body":94481,"description":723,"extension":724,"meta":95136,"navigation":726,"path":95137,"seo":95138,"stem":95139,"__hash__":95140},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94482,"toc":95124},[94483,94486,94490,94493,94709,94713,94716,94925,94929,94995,95000,95004,95007,95010,95048,95052,95055,95060,95064,95067,95070,95075,95079,95082,95086,95089,95092,95097,95101,95104,95107,95112,95116,95121],[10,94484,94480],{"id":94485},"_12其他常用函数",[14,94487,94489],{"id":94488},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[108,94491,94492],{},"将数组的数据按照行列复制扩展",[24,94494,94496],{"className":31029,"code":94495,"language":31031,"meta":29,"style":29},"a=np.arange(1,5)\nnp.tile(a,2)\n#结果：\n#array([1, 2, 3, 4, 1, 2, 3, 4])\n#行复制两次，列复制三次\nnp.tile(a,(2,3))\n#结果：\n'''\narray([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n'''\n#创建二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.tile(aa,2)#一个数的时候就是行\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12]])\n'''\nnp.tile(aa,(2,3))\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n'''\n\n",[31,94497,94498,94514,94523,94527,94532,94537,94550,94554,94559,94564,94569,94573,94578,94602,94614,94618,94622,94627,94632,94637,94642,94646,94659,94663,94667,94672,94677,94682,94687,94692,94696,94700,94705],{"__ignoreMap":29},[34,94499,94500,94502,94504,94506,94508,94510,94512],{"class":36,"line":37},[34,94501,520],{"class":40},[34,94503,153],{"class":87},[34,94505,93632],{"class":40},[34,94507,1013],{"class":63},[34,94509,1173],{"class":40},[34,94511,1114],{"class":63},[34,94513,807],{"class":40},[34,94515,94516,94519,94521],{"class":36,"line":51},[34,94517,94518],{"class":40},"np.tile(a,",[34,94520,875],{"class":63},[34,94522,807],{"class":40},[34,94524,94525],{"class":36,"line":60},[34,94526,94194],{"class":205},[34,94528,94529],{"class":36,"line":76},[34,94530,94531],{"class":205},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[34,94533,94534],{"class":36,"line":93},[34,94535,94536],{"class":205},"#行复制两次，列复制三次\n",[34,94538,94539,94542,94544,94546,94548],{"class":36,"line":99},[34,94540,94541],{"class":40},"np.tile(a,(",[34,94543,875],{"class":63},[34,94545,1173],{"class":40},[34,94547,869],{"class":63},[34,94549,31148],{"class":40},[34,94551,94552],{"class":36,"line":353},[34,94553,94194],{"class":205},[34,94555,94556],{"class":36,"line":359},[34,94557,94558],{"class":156},"'''\n",[34,94560,94561],{"class":36,"line":579},[34,94562,94563],{"class":156},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[34,94565,94566],{"class":36,"line":589},[34,94567,94568],{"class":156},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[34,94570,94571],{"class":36,"line":601},[34,94572,94558],{"class":156},[34,94574,94575],{"class":36,"line":613},[34,94576,94577],{"class":205},"#创建二维数组\n",[34,94579,94580,94582,94584,94586,94588,94590,94592,94594,94596,94598,94600],{"class":36,"line":618},[34,94581,93936],{"class":40},[34,94583,153],{"class":87},[34,94585,93632],{"class":40},[34,94587,1013],{"class":63},[34,94589,1173],{"class":40},[34,94591,1318],{"class":63},[34,94593,93637],{"class":40},[34,94595,1088],{"class":63},[34,94597,1173],{"class":40},[34,94599,869],{"class":63},[34,94601,807],{"class":40},[34,94603,94604,94607,94609,94611],{"class":36,"line":628},[34,94605,94606],{"class":40},"np.tile(aa,",[34,94608,875],{"class":63},[34,94610,1224],{"class":40},[34,94612,94613],{"class":205},"#一个数的时候就是行\n",[34,94615,94616],{"class":36,"line":640},[34,94617,94194],{"class":205},[34,94619,94620],{"class":36,"line":2301},[34,94621,94558],{"class":156},[34,94623,94624],{"class":36,"line":2307},[34,94625,94626],{"class":156},"array([[ 1,  2,  3,  1,  2,  3],\n",[34,94628,94629],{"class":36,"line":2328},[34,94630,94631],{"class":156},"       [ 4,  5,  6,  4,  5,  6],\n",[34,94633,94634],{"class":36,"line":2333},[34,94635,94636],{"class":156},"       [ 7,  8,  9,  7,  8,  9],\n",[34,94638,94639],{"class":36,"line":2347},[34,94640,94641],{"class":156},"       [10, 11, 12, 10, 11, 12]])\n",[34,94643,94644],{"class":36,"line":2352},[34,94645,94558],{"class":156},[34,94647,94648,94651,94653,94655,94657],{"class":36,"line":2381},[34,94649,94650],{"class":40},"np.tile(aa,(",[34,94652,875],{"class":63},[34,94654,1173],{"class":40},[34,94656,869],{"class":63},[34,94658,31148],{"class":40},[34,94660,94661],{"class":36,"line":2386},[34,94662,94194],{"class":205},[34,94664,94665],{"class":36,"line":2403},[34,94666,94558],{"class":156},[34,94668,94669],{"class":36,"line":2408},[34,94670,94671],{"class":156},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[34,94673,94674],{"class":36,"line":2413},[34,94675,94676],{"class":156},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[34,94678,94679],{"class":36,"line":2418},[34,94680,94681],{"class":156},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[34,94683,94684],{"class":36,"line":2432},[34,94685,94686],{"class":156},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[34,94688,94689],{"class":36,"line":2437},[34,94690,94691],{"class":156},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[34,94693,94694],{"class":36,"line":3230},[34,94695,94676],{"class":156},[34,94697,94698],{"class":36,"line":3244},[34,94699,94681],{"class":156},[34,94701,94702],{"class":36,"line":3252},[34,94703,94704],{"class":156},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[34,94706,94707],{"class":36,"line":3257},[34,94708,94558],{"class":156},[14,94710,94712],{"id":94711},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[108,94714,94715],{},"repeat()将数组中的每个元素重复若干次",[24,94717,94719],{"className":31029,"code":94718,"language":31031,"meta":29,"style":29},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[31,94720,94721,94737,94746,94750,94755,94779,94784,94793,94797,94802,94806,94811,94827,94831,94835,94840,94845,94850,94854,94859,94863,94868,94873,94877,94893,94897,94901,94906,94911,94916,94921],{"__ignoreMap":29},[34,94722,94723,94725,94727,94729,94731,94733,94735],{"class":36,"line":37},[34,94724,520],{"class":40},[34,94726,153],{"class":87},[34,94728,93632],{"class":40},[34,94730,1013],{"class":63},[34,94732,1173],{"class":40},[34,94734,1114],{"class":63},[34,94736,807],{"class":40},[34,94738,94739,94742,94744],{"class":36,"line":51},[34,94740,94741],{"class":40},"np.repeat(a,",[34,94743,869],{"class":63},[34,94745,807],{"class":40},[34,94747,94748],{"class":36,"line":60},[34,94749,94194],{"class":205},[34,94751,94752],{"class":36,"line":76},[34,94753,94754],{"class":205},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[34,94756,94757,94759,94761,94763,94765,94767,94769,94771,94773,94775,94777],{"class":36,"line":93},[34,94758,93936],{"class":40},[34,94760,153],{"class":87},[34,94762,93632],{"class":40},[34,94764,1013],{"class":63},[34,94766,1173],{"class":40},[34,94768,1318],{"class":63},[34,94770,93637],{"class":40},[34,94772,1088],{"class":63},[34,94774,1173],{"class":40},[34,94776,869],{"class":63},[34,94778,807],{"class":40},[34,94780,94781],{"class":36,"line":99},[34,94782,94783],{"class":205},"#这个重复之后二维变成一维\n",[34,94785,94786,94789,94791],{"class":36,"line":353},[34,94787,94788],{"class":40},"np.repeat(aa,",[34,94790,875],{"class":63},[34,94792,807],{"class":40},[34,94794,94795],{"class":36,"line":359},[34,94796,94558],{"class":156},[34,94798,94799],{"class":36,"line":579},[34,94800,94801],{"class":156},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[34,94803,94804],{"class":36,"line":589},[34,94805,94558],{"class":156},[34,94807,94808],{"class":36,"line":601},[34,94809,94810],{"class":205},"#指定axis\n",[34,94812,94813,94815,94817,94819,94821,94823,94825],{"class":36,"line":613},[34,94814,94788],{"class":40},[34,94816,875],{"class":63},[34,94818,1173],{"class":40},[34,94820,48165],{"class":5869},[34,94822,153],{"class":87},[34,94824,987],{"class":63},[34,94826,807],{"class":40},[34,94828,94829],{"class":36,"line":618},[34,94830,94194],{"class":205},[34,94832,94833],{"class":36,"line":628},[34,94834,94558],{"class":156},[34,94836,94837],{"class":36,"line":640},[34,94838,94839],{"class":156},"array([[ 1,  2,  3],\n",[34,94841,94842],{"class":36,"line":2301},[34,94843,94844],{"class":156},"       [ 1,  2,  3],\n",[34,94846,94847],{"class":36,"line":2307},[34,94848,94849],{"class":156},"       [ 4,  5,  6],\n",[34,94851,94852],{"class":36,"line":2328},[34,94853,94849],{"class":156},[34,94855,94856],{"class":36,"line":2333},[34,94857,94858],{"class":156},"       [ 7,  8,  9],\n",[34,94860,94861],{"class":36,"line":2347},[34,94862,94858],{"class":156},[34,94864,94865],{"class":36,"line":2352},[34,94866,94867],{"class":156},"       [10, 11, 12],\n",[34,94869,94870],{"class":36,"line":2381},[34,94871,94872],{"class":156},"       [10, 11, 12]])\n",[34,94874,94875],{"class":36,"line":2386},[34,94876,94558],{"class":156},[34,94878,94879,94881,94883,94885,94887,94889,94891],{"class":36,"line":2403},[34,94880,94788],{"class":40},[34,94882,875],{"class":63},[34,94884,1173],{"class":40},[34,94886,48165],{"class":5869},[34,94888,153],{"class":87},[34,94890,1013],{"class":63},[34,94892,807],{"class":40},[34,94894,94895],{"class":36,"line":2408},[34,94896,94194],{"class":205},[34,94898,94899],{"class":36,"line":2413},[34,94900,94558],{"class":156},[34,94902,94903],{"class":36,"line":2418},[34,94904,94905],{"class":156},"array([[ 1,  1,  2,  2,  3,  3],\n",[34,94907,94908],{"class":36,"line":2432},[34,94909,94910],{"class":156},"       [ 4,  4,  5,  5,  6,  6],\n",[34,94912,94913],{"class":36,"line":2437},[34,94914,94915],{"class":156},"       [ 7,  7,  8,  8,  9,  9],\n",[34,94917,94918],{"class":36,"line":3230},[34,94919,94920],{"class":156},"       [10, 10, 11, 11, 12, 12]])\n",[34,94922,94923],{"class":36,"line":3244},[34,94924,94558],{"class":156},[14,94926,94928],{"id":94927},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[24,94930,94932],{"className":31029,"code":94931,"language":31031,"meta":29,"style":29},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[31,94933,94934,94950,94955,94967,94971,94976,94986,94990],{"__ignoreMap":29},[34,94935,94936,94938,94940,94942,94944,94946,94948],{"class":36,"line":37},[34,94937,520],{"class":40},[34,94939,153],{"class":87},[34,94941,93632],{"class":40},[34,94943,1013],{"class":63},[34,94945,1173],{"class":40},[34,94947,1114],{"class":63},[34,94949,807],{"class":40},[34,94951,94952],{"class":36,"line":51},[34,94953,94954],{"class":205},"#array([，2，3，4])\n",[34,94956,94957,94960,94962,94964],{"class":36,"line":60},[34,94958,94959],{"class":40},"np.roll(a,",[34,94961,875],{"class":63},[34,94963,1224],{"class":40},[34,94965,94966],{"class":205},"#传正数向后调多少位，传负数向前调多少位\n",[34,94968,94969],{"class":36,"line":76},[34,94970,94194],{"class":205},[34,94972,94973],{"class":36,"line":93},[34,94974,94975],{"class":205},"#array([3, 4, 1, 2])\n",[34,94977,94978,94980,94982,94984],{"class":36,"line":99},[34,94979,94959],{"class":40},[34,94981,1327],{"class":87},[34,94983,1013],{"class":63},[34,94985,807],{"class":40},[34,94987,94988],{"class":36,"line":353},[34,94989,94194],{"class":205},[34,94991,94992],{"class":36,"line":359},[34,94993,94994],{"class":205},"#array([2, 3, 4, 1])\n",[108,94996,94997],{},[2122,94998],{"alt":29,"src":94999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95001,95003],{"id":95002},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[108,95005,95006],{},"resize()重新调整数组的大小",[108,95008,95009],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[24,95011,95013],{"className":31029,"code":95012,"language":31031,"meta":29,"style":29},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[31,95014,95015,95020,95033],{"__ignoreMap":29},[34,95016,95017],{"class":36,"line":37},[34,95018,95019],{"class":205},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[34,95021,95022,95025,95027,95029,95031],{"class":36,"line":51},[34,95023,95024],{"class":40},"np.resize(aa,(",[34,95026,875],{"class":63},[34,95028,1173],{"class":40},[34,95030,1139],{"class":63},[34,95032,31148],{"class":40},[34,95034,95035,95037,95039,95041,95043,95045],{"class":36,"line":60},[34,95036,95024],{"class":40},[34,95038,875],{"class":63},[34,95040,1173],{"class":40},[34,95042,1215],{"class":63},[34,95044,83401],{"class":40},[34,95046,95047],{"class":205},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95049,95051],{"id":95050},"_125-placeput函数","12.5 place()\u002Fput()函数",[108,95053,95054],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[108,95056,95057],{},[2122,95058],{"alt":29,"src":95059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95061,95063],{"id":95062},"_126-保存加载文件","12.6 保存加载文件",[108,95065,95066],{},"savetxt():将数据保存到txt文件中",[108,95068,95069],{},"loadtxt():从文件加载数据",[108,95071,95072],{},[2122,95073],{"alt":29,"src":95074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95076,95078],{"id":95077},"_127-genfromtxt函数","12.7 genfromtxt()函数",[108,95080,95081],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95083,95085],{"id":95084},"_128-anyall函数","12.8 any()\u002Fall()函数",[108,95087,95088],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[108,95090,95091],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[108,95093,95094],{},[2122,95095],{"alt":29,"src":95096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95098,95100],{"id":95099},"_129-where语句","12.9 where语句",[108,95102,95103],{},"np.where(条件,x,y)",[108,95105,95106],{},"如果条件为True,对应值为x,否则对应值为y",[108,95108,95109],{},[2122,95110],{"alt":29,"src":95111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95113,95115],{"id":95114},"_1210-dot矩阵","12.10 dot()矩阵",[108,95117,95118],{},[2122,95119],{"alt":29,"src":95120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[45,95122,95123],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":95125},[95126,95127,95128,95129,95130,95131,95132,95133,95134,95135],{"id":94488,"depth":51,"text":94489},{"id":94711,"depth":51,"text":94712},{"id":94927,"depth":51,"text":94928},{"id":95002,"depth":51,"text":95003},{"id":95050,"depth":51,"text":95051},{"id":95062,"depth":51,"text":95063},{"id":95077,"depth":51,"text":95078},{"id":95084,"depth":51,"text":95085},{"id":95099,"depth":51,"text":95100},{"id":95114,"depth":51,"text":95115},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94480,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95142,"title":95143,"body":95144,"description":723,"extension":724,"meta":95497,"navigation":726,"path":95498,"seo":95499,"stem":95500,"__hash__":95501},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95145,"toc":95495},[95146,95149,95152,95155,95158,95161,95226,95228,95492],[10,95147,95143],{"id":95148},"_13数组排序",[108,95150,95151],{},"排序主要用到的方法是np.sort和np.argsort",[108,95153,95154],{},"其中np.sort()对数组直接排序",[108,95156,95157],{},"而np.argsort()是返回排序后的原始索引",[108,95159,95160],{},"①一维数组",[24,95162,95164],{"className":31029,"code":95163,"language":31031,"meta":29,"style":29},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[31,95165,95166,95170,95210,95218],{"__ignoreMap":29},[34,95167,95168],{"class":36,"line":37},[34,95169,93735],{"class":205},[34,95171,95172,95174,95176,95178,95180,95182,95184,95186,95188,95190,95192,95194,95196,95198,95200,95202,95204,95206,95208],{"class":36,"line":51},[34,95173,520],{"class":40},[34,95175,153],{"class":87},[34,95177,93654],{"class":40},[34,95179,869],{"class":63},[34,95181,1173],{"class":40},[34,95183,1293],{"class":63},[34,95185,1173],{"class":40},[34,95187,1190],{"class":63},[34,95189,1173],{"class":40},[34,95191,1570],{"class":63},[34,95193,1173],{"class":40},[34,95195,1074],{"class":63},[34,95197,1173],{"class":40},[34,95199,1687],{"class":63},[34,95201,1173],{"class":40},[34,95203,1139],{"class":63},[34,95205,1173],{"class":40},[34,95207,1241],{"class":63},[34,95209,5310],{"class":40},[34,95211,95212,95215],{"class":36,"line":60},[34,95213,95214],{"class":40},"np.sort(a)",[34,95216,95217],{"class":205},"#升序排序\n",[34,95219,95220,95223],{"class":36,"line":76},[34,95221,95222],{"class":40},"np.argsort(a)",[34,95224,95225],{"class":205},"#按照元素大小来索引排序\n",[108,95227,93921],{},[24,95229,95231],{"className":31029,"code":95230,"language":31031,"meta":29,"style":29},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[31,95232,95233,95245,95271,95276,95280,95285,95290,95295,95300,95304,95312,95316,95321,95326,95331,95336,95340,95345,95358,95362,95367,95372,95377,95382,95386,95391,95403,95407,95411,95415,95419,95423,95427,95432,95447,95452,95461,95466,95470,95474,95479,95483,95488],{"__ignoreMap":29},[34,95234,95235,95238,95240,95242],{"class":36,"line":37},[34,95236,95237],{"class":40},"np.random.seed(",[34,95239,987],{"class":63},[34,95241,1224],{"class":40},[34,95243,95244],{"class":205},"#保证每次值一样\n",[34,95246,95247,95249,95251,95253,95255,95257,95259,95261,95263,95265,95267,95269],{"class":36,"line":51},[34,95248,93936],{"class":40},[34,95250,153],{"class":87},[34,95252,93744],{"class":40},[34,95254,1106],{"class":63},[34,95256,1173],{"class":40},[34,95258,32147],{"class":5869},[34,95260,153],{"class":87},[34,95262,801],{"class":40},[34,95264,1088],{"class":63},[34,95266,1173],{"class":40},[34,95268,1139],{"class":63},[34,95270,31148],{"class":40},[34,95272,95273],{"class":36,"line":60},[34,95274,95275],{"class":205},"#原数组：\n",[34,95277,95278],{"class":36,"line":76},[34,95279,94558],{"class":156},[34,95281,95282],{"class":36,"line":93},[34,95283,95284],{"class":156},"array([[44, 47, 64, 67, 67,  9],\n",[34,95286,95287],{"class":36,"line":99},[34,95288,95289],{"class":156},"       [83, 21, 36, 87, 70, 88],\n",[34,95291,95292],{"class":36,"line":353},[34,95293,95294],{"class":156},"       [88, 12, 58, 65, 39, 87],\n",[34,95296,95297],{"class":36,"line":359},[34,95298,95299],{"class":156},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[34,95301,95302],{"class":36,"line":579},[34,95303,94558],{"class":156},[34,95305,95306,95309],{"class":36,"line":589},[34,95307,95308],{"class":40},"np.sort(aa)",[34,95310,95311],{"class":205},"#每行进行了排序\n",[34,95313,95314],{"class":36,"line":601},[34,95315,94558],{"class":156},[34,95317,95318],{"class":36,"line":613},[34,95319,95320],{"class":156},"array([[ 9, 44, 47, 64, 67, 67],\n",[34,95322,95323],{"class":36,"line":618},[34,95324,95325],{"class":156},"       [21, 36, 70, 83, 87, 88],\n",[34,95327,95328],{"class":36,"line":628},[34,95329,95330],{"class":156},"       [12, 39, 58, 65, 87, 88],\n",[34,95332,95333],{"class":36,"line":640},[34,95334,95335],{"class":156},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[34,95337,95338],{"class":36,"line":2301},[34,95339,94558],{"class":156},[34,95341,95342],{"class":36,"line":2307},[34,95343,95344],{"class":205},"#axis=0时\n",[34,95346,95347,95350,95352,95354,95356],{"class":36,"line":2328},[34,95348,95349],{"class":40},"np.sort(aa,",[34,95351,48165],{"class":5869},[34,95353,153],{"class":87},[34,95355,987],{"class":63},[34,95357,807],{"class":40},[34,95359,95360],{"class":36,"line":2333},[34,95361,94558],{"class":156},[34,95363,95364],{"class":36,"line":2347},[34,95365,95366],{"class":156},"array([[44, 12, 36, 37, 25,  9],\n",[34,95368,95369],{"class":36,"line":2352},[34,95370,95371],{"class":156},"       [46, 21, 58, 65, 39, 77],\n",[34,95373,95374],{"class":36,"line":2381},[34,95375,95376],{"class":156},"       [83, 47, 64, 67, 67, 87],\n",[34,95378,95379],{"class":36,"line":2386},[34,95380,95381],{"class":156},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[34,95383,95384],{"class":36,"line":2403},[34,95385,94558],{"class":156},[34,95387,95388],{"class":36,"line":2408},[34,95389,95390],{"class":205},"#axis=1时,为默认值\n",[34,95392,95393,95395,95397,95399,95401],{"class":36,"line":2413},[34,95394,95349],{"class":40},[34,95396,48165],{"class":5869},[34,95398,153],{"class":87},[34,95400,1013],{"class":63},[34,95402,807],{"class":40},[34,95404,95405],{"class":36,"line":2418},[34,95406,94558],{"class":156},[34,95408,95409],{"class":36,"line":2432},[34,95410,95320],{"class":156},[34,95412,95413],{"class":36,"line":2437},[34,95414,95325],{"class":156},[34,95416,95417],{"class":36,"line":3230},[34,95418,95330],{"class":156},[34,95420,95421],{"class":36,"line":3244},[34,95422,95335],{"class":156},[34,95424,95425],{"class":36,"line":3252},[34,95426,94558],{"class":156},[34,95428,95429],{"class":36,"line":3257},[34,95430,95431],{"class":205},"#按最后一列排序\n",[34,95433,95434,95436,95438,95441,95443,95445],{"class":36,"line":3263},[34,95435,1058],{"class":40},[34,95437,153],{"class":87},[34,95439,95440],{"class":40},"aa[:,",[34,95442,1327],{"class":87},[34,95444,1013],{"class":63},[34,95446,33897],{"class":40},[34,95448,95449],{"class":36,"line":3269},[34,95450,95451],{"class":205},"#获取最后一列排好序的索引\n",[34,95453,95454,95456,95458],{"class":36,"line":3274},[34,95455,74689],{"class":40},[34,95457,153],{"class":87},[34,95459,95460],{"class":40},"np.argsort(b)\n",[34,95462,95463],{"class":36,"line":8601},[34,95464,95465],{"class":40},"aa[index]\n",[34,95467,95468],{"class":36,"line":8625},[34,95469,94558],{"class":156},[34,95471,95472],{"class":36,"line":8630},[34,95473,95284],{"class":156},[34,95475,95476],{"class":36,"line":8636},[34,95477,95478],{"class":156},"       [46, 88, 81, 37, 25, 77],\n",[34,95480,95481],{"class":36,"line":8663},[34,95482,95294],{"class":156},[34,95484,95485],{"class":36,"line":8668},[34,95486,95487],{"class":156},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[34,95489,95490],{"class":36,"line":8674},[34,95491,94558],{"class":156},[45,95493,95494],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":95496},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95143,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95503,"title":95504,"body":95505,"description":723,"extension":724,"meta":95535,"navigation":726,"path":95536,"seo":95537,"stem":95538,"__hash__":95539},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95506,"toc":95533},[95507,95510,95513,95516,95519,95522,95525,95528],[10,95508,95504],{"id":95509},"_14广播机制",[108,95511,95512],{},"广播的规则：",[108,95514,95515],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[108,95517,95518],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[108,95520,95521],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[108,95523,95524],{},"3.如果没有维度形状为1，则会引发异常",[108,95526,95527],{},"也就是只有维度或者个数为1才可以进行广播操作",[108,95529,95530],{},[2122,95531],{"alt":29,"src":95532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":29,"searchDepth":51,"depth":51,"links":95534},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95504,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95541,"title":95542,"body":95543,"description":723,"extension":724,"meta":95641,"navigation":726,"path":95642,"seo":95643,"stem":95644,"__hash__":95645},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95544,"toc":95639},[95545,95548,95551,95636],[10,95546,95542],{"id":95547},"_15比较掩码",[108,95549,95550],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[24,95552,95554],{"className":31029,"code":95553,"language":31031,"meta":29,"style":29},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[31,95555,95556,95602,95613,95627,95631],{"__ignoreMap":29},[34,95557,95558,95560,95562,95565,95567,95569,95571,95573,95575,95577,95579,95581,95583,95585,95587,95589,95591,95593,95595,95597,95599],{"class":36,"line":37},[34,95559,520],{"class":40},[34,95561,153],{"class":87},[34,95563,95564],{"class":40},"np.array([[",[34,95566,1013],{"class":63},[34,95568,1173],{"class":40},[34,95570,875],{"class":63},[34,95572,1173],{"class":40},[34,95574,869],{"class":63},[34,95576,48681],{"class":40},[34,95578,1267],{"class":63},[34,95580,1173],{"class":40},[34,95582,1293],{"class":63},[34,95584,1173],{"class":40},[34,95586,1318],{"class":63},[34,95588,48681],{"class":40},[34,95590,1520],{"class":63},[34,95592,1173],{"class":40},[34,95594,1545],{"class":63},[34,95596,1173],{"class":40},[34,95598,1570],{"class":63},[34,95600,95601],{"class":40},"]])\n",[34,95603,95604,95606,95608,95610],{"class":36,"line":51},[34,95605,520],{"class":40},[34,95607,41],{"class":87},[34,95609,1495],{"class":63},[34,95611,95612],{"class":205},"#结果是一个由True,False组成的数组\n",[34,95614,95615,95618,95620,95622,95624],{"class":36,"line":60},[34,95616,95617],{"class":40},"a[a",[34,95619,41],{"class":87},[34,95621,1495],{"class":63},[34,95623,1733],{"class":40},[34,95625,95626],{"class":205},"#小于20的元素会存到这个数组中\n",[34,95628,95629],{"class":36,"line":76},[34,95630,94194],{"class":205},[34,95632,95633],{"class":36,"line":93},[34,95634,95635],{"class":205},"#array([ 1,  2,  3, 11, 12, 13])\n",[45,95637,95638],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":95640},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95542,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95647,"title":95648,"body":95649,"description":723,"extension":724,"meta":95741,"navigation":726,"path":95742,"seo":95743,"stem":95744,"__hash__":95745},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95650,"toc":95739},[95651,95654,95657,95660,95663,95666,95731,95736],[10,95652,95648],{"id":95653},"_16魔法命令time",[108,95655,95656],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[108,95658,95659],{},"%:行模式",[108,95661,95662],{},"%%:单元格模式",[108,95664,95665],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[24,95667,95669],{"className":31029,"code":95668,"language":31031,"meta":29,"style":29},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[31,95670,95671,95676,95683,95688,95697,95710,95714,95722],{"__ignoreMap":29},[34,95672,95673],{"class":36,"line":37},[34,95674,95675],{"class":205},"#程序执行时间\n",[34,95677,95678,95680],{"class":36,"line":51},[34,95679,31043],{"class":87},[34,95681,95682],{"class":40}," time \n",[34,95684,95685],{"class":36,"line":60},[34,95686,95687],{"class":205},"#获取时间\n",[34,95689,95690,95693,95695],{"class":36,"line":76},[34,95691,95692],{"class":40},"start",[34,95694,153],{"class":87},[34,95696,33069],{"class":40},[34,95698,95699,95702,95705,95707],{"class":36,"line":93},[34,95700,95701],{"class":40},"time.sleep(",[34,95703,95704],{"class":63},"0.4",[34,95706,1224],{"class":40},[34,95708,95709],{"class":205},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[34,95711,95712],{"class":36,"line":99},[34,95713,95687],{"class":205},[34,95715,95716,95718,95720],{"class":36,"line":353},[34,95717,46452],{"class":40},[34,95719,153],{"class":87},[34,95721,33069],{"class":40},[34,95723,95724,95726,95728],{"class":36,"line":359},[34,95725,46452],{"class":40},[34,95727,1327],{"class":87},[34,95729,95730],{"class":40},"start\n",[108,95732,95733],{},[2122,95734],{"alt":29,"src":95735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[45,95737,95738],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":95740},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95648,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95747,"title":95748,"body":95749,"description":723,"extension":724,"meta":95784,"navigation":726,"path":95785,"seo":95786,"stem":95787,"__hash__":95788},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95750,"toc":95782},[95751,95754,95757,95760,95763,95766,95769,95772,95777],[10,95752,95748],{"id":95753},"_17魔法命令timeit",[108,95755,95756],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[108,95758,95759],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[108,95761,95762],{},"单元格模式：",[108,95764,95765],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[108,95767,95768],{},"初始化语句执行次数由轮数来决定",[108,95770,95771],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[108,95773,95774],{},[2122,95775],{"alt":29,"src":95776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[108,95778,95779],{},[2122,95780],{"alt":29,"src":95781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":29,"searchDepth":51,"depth":51,"links":95783},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95748,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95790,"title":95791,"body":95792,"description":723,"extension":724,"meta":95810,"navigation":726,"path":95811,"seo":95812,"stem":95813,"__hash__":95814},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95793,"toc":95808},[95794,95797,95800,95803],[10,95795,95791],{"id":95796},"_18魔法命令writefile和run",[108,95798,95799],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[108,95801,95802],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[108,95804,95805],{},[2122,95806],{"alt":29,"src":95807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":29,"searchDepth":51,"depth":51,"links":95809},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95791,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95816,"title":95817,"body":95818,"description":723,"extension":724,"meta":95871,"navigation":726,"path":95872,"seo":95873,"stem":95874,"__hash__":95875},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95819,"toc":95869},[95820,95823,95826,95828,95831,95834,95839,95842,95845,95848,95851,95854,95857,95860,95863,95866],[10,95821,95817],{"id":95822},"_19魔法命令memit",[108,95824,95825],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[108,95827,25252],{},[108,95829,95830],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[108,95832,95833],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[108,95835,95836],{},[2122,95837],{"alt":29,"src":95838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[108,95840,95841],{},"补充：",[108,95843,95844],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[108,95846,95847],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[108,95849,95850],{},"解决方法：",[108,95852,95853],{},"1.cmd",[108,95855,95856],{},"2.依次输入以下代码：",[108,95858,95859],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[108,95861,95862],{},"pip install --upgrade ipython",[108,95864,95865],{},"#升级 memory_profiler 和 setuptools",[108,95867,95868],{},"pip install --upgrade memory_profiler setuptools",{"title":29,"searchDepth":51,"depth":51,"links":95870},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95817,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95877,"title":95878,"body":95879,"description":723,"extension":724,"meta":97525,"navigation":726,"path":97526,"seo":97527,"stem":97528,"__hash__":97529},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95880,"toc":97495},[95881,95884,95888,95892,95953,95956,95961,95965,95970,95975,95980,95985,95988,95993,95997,96001,96034,96037,96040,96043,96095,96098,96134,96137,96179,96183,96204,96206,96243,96245,96250,96252,96257,96261,96264,96292,96296,96300,96353,96357,96449,96453,96457,96460,96465,96469,96494,96499,96503,96506,96509,96512,96515,96518,96521,96524,96536,96540,96544,96547,96579,96582,96605,96608,96634,96637,96663,96666,96700,96703,96765,96769,96772,96776,96779,96805,96808,96811,96816,96819,96888,96890,96895,96956,96959,96970,96976,96981,96985,96988,97001,97005,97020,97022,97045,97047,97073,97076,97079,97082,97130,97132,97137,97141,97145,97172,97176,97203,97206,97211,97216,97306,97310,97368,97373,97376,97379,97421,97425,97481,97486,97489,97492],[10,95882,95878],{"id":95883},"_2创建数组",[14,95885,95887],{"id":95886},"_21-array函数创建数组","2.1 array()函数创建数组",[19,95889,95891],{"id":95890},"_221-函数语句","2.2.1 函数语句",[24,95893,95895],{"className":31029,"code":95894,"language":31031,"meta":29,"style":29},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[31,95896,95897],{"__ignoreMap":29},[34,95898,95899,95902,95905,95907,95909,95911,95913,95915,95918,95920,95923,95925,95928,95930,95932,95934,95937,95939,95942,95944,95947,95949,95951],{"class":36,"line":37},[34,95900,95901],{"class":40},"numpy.array(",[34,95903,95904],{"class":63},"object",[34,95906,13088],{"class":40},[34,95908,94130],{"class":5869},[34,95910,14217],{"class":87},[34,95912,39584],{"class":63},[34,95914,13088],{"class":40},[34,95916,95917],{"class":5869},"copy",[34,95919,14217],{"class":87},[34,95921,95922],{"class":63}," True",[34,95924,13088],{"class":40},[34,95926,95927],{"class":5869},"order",[34,95929,14217],{"class":87},[34,95931,39584],{"class":63},[34,95933,13088],{"class":40},[34,95935,95936],{"class":5869},"subok",[34,95938,14217],{"class":87},[34,95940,95941],{"class":63}," False",[34,95943,13088],{"class":40},[34,95945,95946],{"class":5869},"ndmin",[34,95948,14217],{"class":87},[34,95950,4746],{"class":63},[34,95952,807],{"class":40},[108,95954,95955],{},"参数：",[108,95957,95958],{},[2122,95959],{"alt":29,"src":95960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[19,95962,95964],{"id":95963},"_222-实例","2.2.2 实例",[108,95966,95967],{},[2122,95968],{"alt":29,"src":95969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[108,95971,95972],{},[2122,95973],{"alt":29,"src":95974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[108,95976,95977],{},[2122,95978],{"alt":29,"src":95979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[108,95981,95982],{},[2122,95983],{"alt":29,"src":95984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[108,95986,95987],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[108,95989,95990],{},[2122,95991],{"alt":29,"src":95992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95994,95996],{"id":95995},"_22-随机数创建数组","2.2 随机数创建数组",[19,95998,96000],{"id":95999},"_221-random语句","2.2.1 random语句",[24,96002,96004],{"className":31029,"code":96003,"language":31031,"meta":29,"style":29},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[31,96005,96006,96011,96016,96024,96029],{"__ignoreMap":29},[34,96007,96008],{"class":36,"line":37},[34,96009,96010],{"class":205},"#random.random()\n",[34,96012,96013],{"class":36,"line":51},[34,96014,96015],{"class":205},"#确定随机种子,就是每次运行结果是相同的\n",[34,96017,96018,96020,96022],{"class":36,"line":60},[34,96019,95237],{"class":40},[34,96021,987],{"class":63},[34,96023,807],{"class":40},[34,96025,96026],{"class":36,"line":76},[34,96027,96028],{"class":40},"np.random.random()\n",[34,96030,96031],{"class":36,"line":93},[34,96032,96033],{"class":205},"#生成一个随机的数目\n",[108,96035,96036],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[108,96038,96039],{},"可以指定数组形状 size",[108,96041,96042],{},"①生成一维数组",[24,96044,96046],{"className":31029,"code":96045,"language":31031,"meta":29,"style":29},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[31,96047,96048,96053,96066,96071,96087],{"__ignoreMap":29},[34,96049,96050],{"class":36,"line":37},[34,96051,96052],{"class":205},"#random.random(size())\n",[34,96054,96055,96058,96060,96062,96064],{"class":36,"line":51},[34,96056,96057],{"class":40},"np.random.random(",[34,96059,32147],{"class":5869},[34,96061,153],{"class":87},[34,96063,1114],{"class":63},[34,96065,807],{"class":40},[34,96067,96068],{"class":36,"line":60},[34,96069,96070],{"class":205},"#生成一位的五个元素\n",[34,96072,96073,96075,96077,96079,96081,96083,96085],{"class":36,"line":76},[34,96074,520],{"class":40},[34,96076,153],{"class":87},[34,96078,96057],{"class":40},[34,96080,32147],{"class":5869},[34,96082,153],{"class":87},[34,96084,1088],{"class":63},[34,96086,807],{"class":40},[34,96088,96089,96092],{"class":36,"line":93},[34,96090,96091],{"class":40},"a.shape ",[34,96093,96094],{"class":205},"#输出数组形状\n",[108,96096,96097],{},"②生成二维数组",[24,96099,96101],{"className":31029,"code":96100,"language":31031,"meta":29,"style":29},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[31,96102,96103,96107,96129],{"__ignoreMap":29},[34,96104,96105],{"class":36,"line":37},[34,96106,93931],{"class":205},[34,96108,96109,96111,96113,96115,96117,96119,96121,96123,96125,96127],{"class":36,"line":51},[34,96110,93936],{"class":40},[34,96112,153],{"class":87},[34,96114,96057],{"class":40},[34,96116,32147],{"class":5869},[34,96118,153],{"class":87},[34,96120,801],{"class":40},[34,96122,1088],{"class":63},[34,96124,1173],{"class":40},[34,96126,1114],{"class":63},[34,96128,31148],{"class":40},[34,96130,96131],{"class":36,"line":60},[34,96132,96133],{"class":205},"#生成四行五列的数组\n",[108,96135,96136],{},"③生成三维数组",[24,96138,96140],{"className":31029,"code":96139,"language":31031,"meta":29,"style":29},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[31,96141,96142,96147,96174],{"__ignoreMap":29},[34,96143,96144],{"class":36,"line":37},[34,96145,96146],{"class":205},"#三维数组\n",[34,96148,96149,96152,96154,96156,96158,96160,96162,96164,96166,96168,96170,96172],{"class":36,"line":51},[34,96150,96151],{"class":40},"aaa",[34,96153,153],{"class":87},[34,96155,96057],{"class":40},[34,96157,32147],{"class":5869},[34,96159,153],{"class":87},[34,96161,801],{"class":40},[34,96163,875],{"class":63},[34,96165,1173],{"class":40},[34,96167,869],{"class":63},[34,96169,1173],{"class":40},[34,96171,1088],{"class":63},[34,96173,31148],{"class":40},[34,96175,96176],{"class":36,"line":60},[34,96177,96178],{"class":40},"aaa.shape\n",[19,96180,96182],{"id":96181},"_222-randint语句","2.2.2 randint语句",[24,96184,96186],{"className":31029,"code":96185,"language":31031,"meta":29,"style":29},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[31,96187,96188,96193],{"__ignoreMap":29},[34,96189,96190],{"class":36,"line":37},[34,96191,96192],{"class":205},"#生成随机的整数 random.randint(low,high,size)\n",[34,96194,96195,96197,96199,96201],{"class":36,"line":51},[34,96196,93744],{"class":40},[34,96198,1114],{"class":63},[34,96200,14367],{"class":40},[34,96202,96203],{"class":205},"#0~5中的随机一个数\n",[108,96205,96042],{},[24,96207,96209],{"className":31029,"code":96208,"language":31031,"meta":29,"style":29},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[31,96210,96211,96216,96238],{"__ignoreMap":29},[34,96212,96213],{"class":36,"line":37},[34,96214,96215],{"class":205},"#一维\n",[34,96217,96218,96220,96222,96224,96226,96228,96230,96232,96234,96236],{"class":36,"line":51},[34,96219,93744],{"class":40},[34,96221,1013],{"class":63},[34,96223,1173],{"class":40},[34,96225,1267],{"class":63},[34,96227,1173],{"class":40},[34,96229,32147],{"class":5869},[34,96231,153],{"class":87},[34,96233,801],{"class":40},[34,96235,1241],{"class":63},[34,96237,31148],{"class":40},[34,96239,96240],{"class":36,"line":60},[34,96241,96242],{"class":205},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[108,96244,96097],{},[108,96246,96247],{},[2122,96248],{"alt":29,"src":96249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[108,96251,96136],{},[108,96253,96254],{},[2122,96255],{"alt":29,"src":96256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[19,96258,96260],{"id":96259},"_222-rand语句","2.2.2 rand语句",[108,96262,96263],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[24,96265,96267],{"className":31029,"code":96266,"language":31031,"meta":29,"style":29},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[31,96268,96269,96282,96287],{"__ignoreMap":29},[34,96270,96271,96274,96276,96278,96280],{"class":36,"line":37},[34,96272,96273],{"class":40},"np.random.rand(",[34,96275,1106],{"class":63},[34,96277,1173],{"class":40},[34,96279,1241],{"class":63},[34,96281,807],{"class":40},[34,96283,96284],{"class":36,"line":51},[34,96285,96286],{"class":205},"#第一个参数100：行数，表示有100个样本\n",[34,96288,96289],{"class":36,"line":60},[34,96290,96291],{"class":205},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96293,96295],{"id":96294},"_23-arange创建数组","2.3 arange()创建数组",[19,96297,96299],{"id":96298},"_231-函数语句","2.3.1 函数语句",[24,96301,96303],{"className":31029,"code":96302,"language":31031,"meta":29,"style":29},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[31,96304,96305,96319,96324,96329,96334,96339,96344,96349],{"__ignoreMap":29},[34,96306,96307,96310,96312,96314,96317],{"class":36,"line":37},[34,96308,96309],{"class":40},"numpy.arange([start,] stop[, step], ",[34,96311,94130],{"class":5869},[34,96313,153],{"class":87},[34,96315,96316],{"class":63},"None",[34,96318,807],{"class":40},[34,96320,96321],{"class":36,"line":51},[34,96322,96323],{"class":205},"#参数\n",[34,96325,96326],{"class":36,"line":60},[34,96327,96328],{"class":156},"\"\"\"\n",[34,96330,96331],{"class":36,"line":76},[34,96332,96333],{"class":156},"start:起始值，可选，默认从 0 开始。\n",[34,96335,96336],{"class":36,"line":93},[34,96337,96338],{"class":156},"stop:结束值（不包含该值）。\n",[34,96340,96341],{"class":36,"line":99},[34,96342,96343],{"class":156},"step:步长，可选，默认是 1。可以为浮点数。\n",[34,96345,96346],{"class":36,"line":353},[34,96347,96348],{"class":156},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[34,96350,96351],{"class":36,"line":359},[34,96352,96328],{"class":156},[19,96354,96356],{"id":96355},"_232-实例","2.3.2 实例",[24,96358,96360],{"className":31029,"code":96359,"language":31031,"meta":29,"style":29},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[31,96361,96362,96366,96390,96395,96400,96404,96427,96431,96435,96440,96445],{"__ignoreMap":29},[34,96363,96364],{"class":36,"line":37},[34,96365,93735],{"class":205},[34,96367,96368,96370,96372,96374,96376,96378,96380,96382,96384,96386,96388],{"class":36,"line":51},[34,96369,93632],{"class":40},[34,96371,1013],{"class":63},[34,96373,1173],{"class":40},[34,96375,1520],{"class":63},[34,96377,1173],{"class":40},[34,96379,1013],{"class":63},[34,96381,1173],{"class":40},[34,96383,94130],{"class":5869},[34,96385,153],{"class":87},[34,96387,804],{"class":63},[34,96389,807],{"class":40},[34,96391,96392],{"class":36,"line":60},[34,96393,96394],{"class":205},"#输出结果：\n",[34,96396,96397],{"class":36,"line":76},[34,96398,96399],{"class":205},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[34,96401,96402],{"class":36,"line":93},[34,96403,94577],{"class":205},[34,96405,96406,96409,96411,96413,96415,96418,96420,96422,96424],{"class":36,"line":99},[34,96407,96408],{"class":40},"np.array([np.arange(",[34,96410,1013],{"class":63},[34,96412,1173],{"class":40},[34,96414,1088],{"class":63},[34,96416,96417],{"class":40},"),np.arange(",[34,96419,1088],{"class":63},[34,96421,1173],{"class":40},[34,96423,1164],{"class":63},[34,96425,96426],{"class":40},")])\n",[34,96428,96429],{"class":36,"line":353},[34,96430,94194],{"class":205},[34,96432,96433],{"class":36,"line":359},[34,96434,96328],{"class":156},[34,96436,96437],{"class":36,"line":579},[34,96438,96439],{"class":156},"array([[1, 2, 3],\n",[34,96441,96442],{"class":36,"line":589},[34,96443,96444],{"class":156},"       [4, 5, 6]])\n",[34,96446,96447],{"class":36,"line":601},[34,96448,96328],{"class":156},[14,96450,96452],{"id":96451},"_24-生态分布","2.4 生态分布",[19,96454,96456],{"id":96455},"_241-标准正态分布","2.4.1 标准正态分布",[108,96458,96459],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[108,96461,96462],{},[2122,96463],{"alt":29,"src":96464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[19,96466,96468],{"id":96467},"_242-常规正态分布","2.4.2 常规正态分布",[24,96470,96472],{"className":31029,"code":96471,"language":31031,"meta":29,"style":29},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[31,96473,96474,96479,96484,96489],{"__ignoreMap":29},[34,96475,96476],{"class":36,"line":37},[34,96477,96478],{"class":40},"random.normal(loc,scale,size)也可以生成正态分布\n",[34,96480,96481],{"class":36,"line":51},[34,96482,96483],{"class":205},"#loc:期望\n",[34,96485,96486],{"class":36,"line":60},[34,96487,96488],{"class":205},"#scale:方差\n",[34,96490,96491],{"class":36,"line":76},[34,96492,96493],{"class":205},"#size:用于确定是几维的数列\n",[108,96495,96496],{},[2122,96497],{"alt":29,"src":96498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96500,96502],{"id":96501},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[108,96504,96505],{},"ndim:秩，维度个数",[108,96507,96508],{},"size:数组元素的个数",[108,96510,96511],{},"shape:数组的形状",[108,96513,96514],{},"dtype:数组元素的类型",[108,96516,96517],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[108,96519,96520],{},"他们都是属性，通过数组.属性的形式来确定",[108,96522,96523],{},"如果需要输出多个可以通过以下方式：",[24,96525,96527],{"className":31029,"code":96526,"language":31031,"meta":29,"style":29},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[31,96528,96529],{"__ignoreMap":29},[34,96530,96531,96533],{"class":36,"line":37},[34,96532,31066],{"class":63},[34,96534,96535],{"class":40},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96537,96539],{"id":96538},"_26-其他方式创建数组","2.6 其他方式创建数组",[19,96541,96543],{"id":96542},"_261-zeros创建数组","2.6.1 zeros()创建数组",[108,96545,96546],{},"①创建一维数组",[24,96548,96550],{"className":31029,"code":96549,"language":31031,"meta":29,"style":29},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[31,96551,96552,96561,96565,96570,96575],{"__ignoreMap":29},[34,96553,96554,96557,96559],{"class":36,"line":37},[34,96555,96556],{"class":40},"np.zeros(",[34,96558,1241],{"class":63},[34,96560,807],{"class":40},[34,96562,96563],{"class":36,"line":51},[34,96564,96328],{"class":156},[34,96566,96567],{"class":36,"line":60},[34,96568,96569],{"class":156},"输出结果：\n",[34,96571,96572],{"class":36,"line":76},[34,96573,96574],{"class":156},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[34,96576,96577],{"class":36,"line":93},[34,96578,96328],{"class":156},[108,96580,96581],{},"上方代码等价于：",[24,96583,96585],{"className":31029,"code":96584,"language":31031,"meta":29,"style":29},"np.zeros(shape=(10))#创建10个元素的0数组\n",[31,96586,96587],{"__ignoreMap":29},[34,96588,96589,96591,96594,96596,96598,96600,96602],{"class":36,"line":37},[34,96590,96556],{"class":40},[34,96592,96593],{"class":5869},"shape",[34,96595,153],{"class":87},[34,96597,801],{"class":40},[34,96599,1241],{"class":63},[34,96601,83401],{"class":40},[34,96603,96604],{"class":205},"#创建10个元素的0数组\n",[108,96606,96607],{},"也可以指定类型",[24,96609,96611],{"className":31029,"code":96610,"language":31031,"meta":29,"style":29},"#指定类型\nnp.zeros(5,dtype=int)\n",[31,96612,96613,96618],{"__ignoreMap":29},[34,96614,96615],{"class":36,"line":37},[34,96616,96617],{"class":205},"#指定类型\n",[34,96619,96620,96622,96624,96626,96628,96630,96632],{"class":36,"line":51},[34,96621,96556],{"class":40},[34,96623,1114],{"class":63},[34,96625,1173],{"class":40},[34,96627,94130],{"class":5869},[34,96629,153],{"class":87},[34,96631,804],{"class":63},[34,96633,807],{"class":40},[108,96635,96636],{},"②创建二维数组",[24,96638,96640],{"className":31029,"code":96639,"language":31031,"meta":29,"style":29},"np.zeros((3,4),dtype=int)\n",[31,96641,96642],{"__ignoreMap":29},[34,96643,96644,96647,96649,96651,96653,96655,96657,96659,96661],{"class":36,"line":37},[34,96645,96646],{"class":40},"np.zeros((",[34,96648,869],{"class":63},[34,96650,1173],{"class":40},[34,96652,1088],{"class":63},[34,96654,42907],{"class":40},[34,96656,94130],{"class":5869},[34,96658,153],{"class":87},[34,96660,804],{"class":63},[34,96662,807],{"class":40},[108,96664,96665],{},"③创建三维数组",[24,96667,96669],{"className":31029,"code":96668,"language":31031,"meta":29,"style":29},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[31,96670,96671,96676],{"__ignoreMap":29},[34,96672,96673],{"class":36,"line":37},[34,96674,96675],{"class":205},"#创建三维数组\n",[34,96677,96678,96680,96682,96684,96686,96688,96690,96692,96694,96696,96698],{"class":36,"line":51},[34,96679,96646],{"class":40},[34,96681,869],{"class":63},[34,96683,1173],{"class":40},[34,96685,1088],{"class":63},[34,96687,1173],{"class":40},[34,96689,1114],{"class":63},[34,96691,42907],{"class":40},[34,96693,94130],{"class":5869},[34,96695,153],{"class":87},[34,96697,804],{"class":63},[34,96699,807],{"class":40},[108,96701,96702],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[24,96704,96706],{"className":31029,"code":96705,"language":31031,"meta":29,"style":29},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[31,96707,96708,96713,96728,96733,96738,96760],{"__ignoreMap":29},[34,96709,96710],{"class":36,"line":37},[34,96711,96712],{"class":205},"#使用zeros_like将创建的一维数组变成全0的数组\n",[34,96714,96715,96717,96719,96721,96723,96725],{"class":36,"line":51},[34,96716,520],{"class":40},[34,96718,153],{"class":87},[34,96720,93632],{"class":40},[34,96722,1088],{"class":63},[34,96724,1224],{"class":40},[34,96726,96727],{"class":205},"#这个得到的结果：一维数组0，1，2，3\n",[34,96729,96730],{"class":36,"line":60},[34,96731,96732],{"class":40},"np.zeros_like(a)\n",[34,96734,96735],{"class":36,"line":76},[34,96736,96737],{"class":205},"#使用zeros_like将创建的二维数组变成全0的数组\n",[34,96739,96740,96742,96744,96746,96748,96750,96752,96754,96756,96758],{"class":36,"line":93},[34,96741,93936],{"class":40},[34,96743,153],{"class":87},[34,96745,96057],{"class":40},[34,96747,32147],{"class":5869},[34,96749,153],{"class":87},[34,96751,801],{"class":40},[34,96753,1088],{"class":63},[34,96755,1173],{"class":40},[34,96757,1114],{"class":63},[34,96759,31148],{"class":40},[34,96761,96762],{"class":36,"line":99},[34,96763,96764],{"class":40},"np.zeros_like(aa)\n",[19,96766,96768],{"id":96767},"_262-ones创建数组","2.6.2 ones()创建数组",[108,96770,96771],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[19,96773,96775],{"id":96774},"_263-empty创建数组","2.6.3 empty()创建数组",[108,96777,96778],{},"①empty()用法",[24,96780,96782],{"className":31029,"code":96781,"language":31031,"meta":29,"style":29},"numpy.empty(shape,dtype=float,order='c')\n",[31,96783,96784],{"__ignoreMap":29},[34,96785,96786,96789,96791,96793,96795,96797,96799,96801,96803],{"class":36,"line":37},[34,96787,96788],{"class":40},"numpy.empty(shape,",[34,96790,94130],{"class":5869},[34,96792,153],{"class":87},[34,96794,840],{"class":63},[34,96796,1173],{"class":40},[34,96798,95927],{"class":5869},[34,96800,153],{"class":87},[34,96802,76659],{"class":156},[34,96804,807],{"class":40},[108,96806,96807],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[108,96809,96810],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[108,96812,96813],{},[2122,96814],{"alt":29,"src":96815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[108,96817,96818],{},"②empty()用法",[24,96820,96822],{"className":31029,"code":96821,"language":31031,"meta":29,"style":29},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[31,96823,96824,96845,96857,96878,96883],{"__ignoreMap":29},[34,96825,96826,96828,96830,96833,96835,96837,96839,96841,96843],{"class":36,"line":37},[34,96827,1639],{"class":40},[34,96829,153],{"class":87},[34,96831,96832],{"class":40},"np.empty(",[34,96834,1241],{"class":63},[34,96836,1173],{"class":40},[34,96838,94130],{"class":5869},[34,96840,153],{"class":87},[34,96842,804],{"class":63},[34,96844,807],{"class":40},[34,96846,96847,96849,96851,96853,96855],{"class":36,"line":51},[34,96848,1614],{"class":40},[34,96850,153],{"class":87},[34,96852,93632],{"class":40},[34,96854,1114],{"class":63},[34,96856,807],{"class":40},[34,96858,96859,96862,96864,96867,96869,96871,96874,96876],{"class":36,"line":60},[34,96860,96861],{"class":40},"np.add(",[34,96863,875],{"class":63},[34,96865,96866],{"class":40},",x,",[34,96868,93684],{"class":5869},[34,96870,153],{"class":87},[34,96872,96873],{"class":40},"y[:",[34,96875,1114],{"class":63},[34,96877,5310],{"class":40},[34,96879,96880],{"class":36,"line":76},[34,96881,96882],{"class":205},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[34,96884,96885],{"class":36,"line":93},[34,96886,96887],{"class":40},"y\n",[108,96889,12167],{},[108,96891,96892],{},[2122,96893],{"alt":29,"src":96894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[24,96896,96898],{"className":31029,"code":96897,"language":31031,"meta":29,"style":29},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[31,96899,96900,96916,96936,96951],{"__ignoreMap":29},[34,96901,96902,96904,96906,96908,96910,96912,96914],{"class":36,"line":37},[34,96903,1614],{"class":40},[34,96905,153],{"class":87},[34,96907,93632],{"class":40},[34,96909,1013],{"class":63},[34,96911,1173],{"class":40},[34,96913,1139],{"class":63},[34,96915,807],{"class":40},[34,96917,96918,96920,96922,96924,96926,96928,96930,96932,96934],{"class":36,"line":51},[34,96919,1639],{"class":40},[34,96921,153],{"class":87},[34,96923,96832],{"class":40},[34,96925,1114],{"class":63},[34,96927,1173],{"class":40},[34,96929,94130],{"class":5869},[34,96931,153],{"class":87},[34,96933,804],{"class":63},[34,96935,807],{"class":40},[34,96937,96938,96941,96943,96945,96947,96949],{"class":36,"line":60},[34,96939,96940],{"class":40},"np.add(x,",[34,96942,875],{"class":63},[34,96944,1173],{"class":40},[34,96946,93684],{"class":5869},[34,96948,153],{"class":87},[34,96950,94079],{"class":40},[34,96952,96953],{"class":36,"line":76},[34,96954,96955],{"class":205},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[108,96957,96958],{},"③empty_like()",[108,96960,96961],{},[111,96962,96963,96964,96969],{},"创建一个",[111,96965,96966],{},[111,96967,96968],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[108,96971,96972,96975],{},[31,96973,96974],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[108,96977,96978],{},[2122,96979],{"alt":29,"src":96980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[19,96982,96984],{"id":96983},"_264-用法","2.6.4 ？？用法",[108,96986,96987],{},"当想查看一个函数的参数时，可以通过？？来实现",[24,96989,96991],{"className":31029,"code":96990,"language":31031,"meta":29,"style":29},"np.full??\n",[31,96992,96993],{"__ignoreMap":29},[34,96994,96995,96998],{"class":36,"line":37},[34,96996,96997],{"class":40},"np.full",[34,96999,97000],{"class":78033},"??\n",[19,97002,97004],{"id":97003},"_265-full创建数组","2.6.5 full()创建数组",[24,97006,97008],{"className":31029,"code":97007,"language":31031,"meta":29,"style":29},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[31,97009,97010,97015],{"__ignoreMap":29},[34,97011,97012],{"class":36,"line":37},[34,97013,97014],{"class":40},"full(shape,fill_value)\n",[34,97016,97017],{"class":36,"line":51},[34,97018,97019],{"class":40},"创建全为某个指定值的数组\n",[108,97021,95160],{},[24,97023,97025],{"className":31029,"code":97024,"language":31031,"meta":29,"style":29},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[31,97026,97027,97032],{"__ignoreMap":29},[34,97028,97029],{"class":36,"line":37},[34,97030,97031],{"class":205},"#创建一个一维数组,以20进行填充\n",[34,97033,97034,97037,97039,97041,97043],{"class":36,"line":51},[34,97035,97036],{"class":40},"np.full(",[34,97038,1241],{"class":63},[34,97040,1173],{"class":40},[34,97042,1495],{"class":63},[34,97044,807],{"class":40},[108,97046,93921],{},[24,97048,97050],{"className":31029,"code":97049,"language":31031,"meta":29,"style":29},"#创建二维数组\nnp.full((3,5),11)\n",[31,97051,97052,97056],{"__ignoreMap":29},[34,97053,97054],{"class":36,"line":37},[34,97055,94577],{"class":205},[34,97057,97058,97061,97063,97065,97067,97069,97071],{"class":36,"line":51},[34,97059,97060],{"class":40},"np.full((",[34,97062,869],{"class":63},[34,97064,1173],{"class":40},[34,97066,1114],{"class":63},[34,97068,42907],{"class":40},[34,97070,1267],{"class":63},[34,97072,807],{"class":40},[108,97074,97075],{},"③full_like用法",[108,97077,97078],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[108,97080,97081],{},"这里是指定填充而已",[24,97083,97085],{"className":31029,"code":97084,"language":31031,"meta":29,"style":29},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[31,97086,97087,97092,97116,97121],{"__ignoreMap":29},[34,97088,97089],{"class":36,"line":37},[34,97090,97091],{"class":205},"#创建一个指定形状数组\n",[34,97093,97094,97096,97098,97100,97102,97104,97106,97108,97110,97112,97114],{"class":36,"line":51},[34,97095,520],{"class":40},[34,97097,153],{"class":87},[34,97099,93632],{"class":40},[34,97101,1013],{"class":63},[34,97103,1173],{"class":40},[34,97105,1120],{"class":63},[34,97107,93637],{"class":40},[34,97109,1088],{"class":63},[34,97111,1173],{"class":40},[34,97113,1215],{"class":63},[34,97115,807],{"class":40},[34,97117,97118],{"class":36,"line":60},[34,97119,97120],{"class":205},"#进行指定填充\n",[34,97122,97123,97126,97128],{"class":36,"line":76},[34,97124,97125],{"class":40},"np.full_like(a,",[34,97127,1241],{"class":63},[34,97129,807],{"class":40},[108,97131,12167],{},[108,97133,97134],{},[2122,97135],{"alt":29,"src":97136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[19,97138,97140],{"id":97139},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22650,97142,97144],{"id":97143},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[24,97146,97148],{"className":31029,"code":97147,"language":31031,"meta":29,"style":29},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[31,97149,97150,97167],{"__ignoreMap":29},[34,97151,97152,97155,97157,97159,97161,97163,97165],{"class":36,"line":37},[34,97153,97154],{"class":40},"np.eye(",[34,97156,1088],{"class":63},[34,97158,1173],{"class":40},[34,97160,94130],{"class":5869},[34,97162,153],{"class":87},[34,97164,804],{"class":63},[34,97166,807],{"class":40},[34,97168,97169],{"class":36,"line":51},[34,97170,97171],{"class":205},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22650,97173,97175],{"id":97174},"_2662-法2identity","2.6.6.2 法2：identity()",[24,97177,97179],{"className":31029,"code":97178,"language":31031,"meta":29,"style":29},"#identity()\nnp.identity(5,dtype=int)\n",[31,97180,97181,97186],{"__ignoreMap":29},[34,97182,97183],{"class":36,"line":37},[34,97184,97185],{"class":205},"#identity()\n",[34,97187,97188,97191,97193,97195,97197,97199,97201],{"class":36,"line":51},[34,97189,97190],{"class":40},"np.identity(",[34,97192,1114],{"class":63},[34,97194,1173],{"class":40},[34,97196,94130],{"class":5869},[34,97198,153],{"class":87},[34,97200,804],{"class":63},[34,97202,807],{"class":40},[108,97204,97205],{},"两个函数是有区别的",[108,97207,97208],{},[2122,97209],{"alt":29,"src":97210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[108,97212,97213],{},[2122,97214],{"alt":29,"src":97215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[24,97217,97219],{"className":31029,"code":97218,"language":31031,"meta":29,"style":29},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[31,97220,97221,97226,97238,97243,97248,97253,97258,97262,97267,97287,97291,97296,97301],{"__ignoreMap":29},[34,97222,97223],{"class":36,"line":37},[34,97224,97225],{"class":205},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[34,97227,97228,97230,97232,97234,97236],{"class":36,"line":51},[34,97229,97154],{"class":40},[34,97231,869],{"class":63},[34,97233,13088],{"class":40},[34,97235,1088],{"class":63},[34,97237,807],{"class":40},[34,97239,97240],{"class":36,"line":60},[34,97241,97242],{"class":205},"# 输出:\n",[34,97244,97245],{"class":36,"line":76},[34,97246,97247],{"class":205},"# [[1. 0. 0. 0.]\n",[34,97249,97250],{"class":36,"line":93},[34,97251,97252],{"class":205},"#  [0. 1. 0. 0.]\n",[34,97254,97255],{"class":36,"line":99},[34,97256,97257],{"class":205},"#  [0. 0. 1. 0.]]\n",[34,97259,97260],{"class":36,"line":353},[34,97261,3053],{"emptyLinePlaceholder":726},[34,97263,97264],{"class":36,"line":359},[34,97265,97266],{"class":205},"# 对角线向上偏移1\n",[34,97268,97269,97271,97273,97275,97277,97279,97281,97283,97285],{"class":36,"line":579},[34,97270,97154],{"class":40},[34,97272,869],{"class":63},[34,97274,13088],{"class":40},[34,97276,1088],{"class":63},[34,97278,13088],{"class":40},[34,97280,1288],{"class":5869},[34,97282,153],{"class":87},[34,97284,1013],{"class":63},[34,97286,807],{"class":40},[34,97288,97289],{"class":36,"line":589},[34,97290,97242],{"class":205},[34,97292,97293],{"class":36,"line":601},[34,97294,97295],{"class":205},"# [[0. 1. 0. 0.]\n",[34,97297,97298],{"class":36,"line":613},[34,97299,97300],{"class":205},"#  [0. 0. 1. 0.]\n",[34,97302,97303],{"class":36,"line":618},[34,97304,97305],{"class":205},"#  [0. 0. 0. 1.]]\n",[19,97307,97309],{"id":97308},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[24,97311,97313],{"className":31029,"code":97312,"language":31031,"meta":29,"style":29},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[31,97314,97315,97320,97324,97329,97334,97339,97344,97349,97354,97359,97364],{"__ignoreMap":29},[34,97316,97317],{"class":36,"line":37},[34,97318,97319],{"class":205},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[34,97321,97322],{"class":36,"line":51},[34,97323,96328],{"class":156},[34,97325,97326],{"class":36,"line":60},[34,97327,97328],{"class":156},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[34,97330,97331],{"class":36,"line":76},[34,97332,97333],{"class":156},"参数介绍：\n",[34,97335,97336],{"class":36,"line":93},[34,97337,97338],{"class":156},"start：序列的起始值\n",[34,97340,97341],{"class":36,"line":99},[34,97342,97343],{"class":156},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[34,97345,97346],{"class":36,"line":353},[34,97347,97348],{"class":156},"num：要生长的等步长的样本数量，默认为50\n",[34,97350,97351],{"class":36,"line":359},[34,97352,97353],{"class":156},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[34,97355,97356],{"class":36,"line":579},[34,97357,97358],{"class":156},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[34,97360,97361],{"class":36,"line":589},[34,97362,97363],{"class":156},"dtype：ndarry的数据类型\n",[34,97365,97366],{"class":36,"line":601},[34,97367,96328],{"class":156},[108,97369,97370],{},[2122,97371],{"alt":29,"src":97372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[108,97374,97375],{},"这里num=是可以省略的",[108,97377,97378],{},"也就是下方两行代码结果是一模一样的",[24,97380,97382],{"className":31029,"code":97381,"language":31031,"meta":29,"style":29},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[31,97383,97384,97401],{"__ignoreMap":29},[34,97385,97386,97389,97391,97393,97395,97397,97399],{"class":36,"line":37},[34,97387,97388],{"class":40},"np.linspace(",[34,97390,1013],{"class":63},[34,97392,1173],{"class":40},[34,97394,1114],{"class":63},[34,97396,1173],{"class":40},[34,97398,1114],{"class":63},[34,97400,807],{"class":40},[34,97402,97403,97405,97407,97409,97411,97413,97415,97417,97419],{"class":36,"line":51},[34,97404,97388],{"class":40},[34,97406,1013],{"class":63},[34,97408,1173],{"class":40},[34,97410,1114],{"class":63},[34,97412,1173],{"class":40},[34,97414,2319],{"class":5869},[34,97416,153],{"class":87},[34,97418,1114],{"class":63},[34,97420,807],{"class":40},[19,97422,97424],{"id":97423},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[24,97426,97428],{"className":31029,"code":97427,"language":31031,"meta":29,"style":29},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[31,97429,97430,97435,97439,97444,97449,97454,97459,97463,97468,97473,97477],{"__ignoreMap":29},[34,97431,97432],{"class":36,"line":37},[34,97433,97434],{"class":205},"#logspace函数用于创建一个等比数列，格式如下：\n",[34,97436,97437],{"class":36,"line":51},[34,97438,96328],{"class":156},[34,97440,97441],{"class":36,"line":60},[34,97442,97443],{"class":156},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[34,97445,97446],{"class":36,"line":76},[34,97447,97448],{"class":156},"参数为：\n",[34,97450,97451],{"class":36,"line":93},[34,97452,97453],{"class":156},"start:序列的起始位置为：base**start\n",[34,97455,97456],{"class":36,"line":99},[34,97457,97458],{"class":156},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[34,97460,97461],{"class":36,"line":353},[34,97462,97348],{"class":156},[34,97464,97465],{"class":36,"line":359},[34,97466,97467],{"class":156},"endpoint：是否包含 stop 这个值，默认是 True\n",[34,97469,97470],{"class":36,"line":579},[34,97471,97472],{"class":156},"base：对数的底数，默认是 10（常见对数）\n",[34,97474,97475],{"class":36,"line":589},[34,97476,97363],{"class":156},[34,97478,97479],{"class":36,"line":601},[34,97480,96328],{"class":156},[108,97482,97483],{},[2122,97484],{"alt":29,"src":97485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[108,97487,97488],{},"logspace()函数中的num参数也是可以不写num=的",[108,97490,97491],{},"endpoint是不可以省略的",[45,97493,97494],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":29,"searchDepth":51,"depth":51,"links":97496},[97497,97501,97506,97510,97514,97515],{"id":95886,"depth":51,"text":95887,"children":97498},[97499,97500],{"id":95890,"depth":60,"text":95891},{"id":95963,"depth":60,"text":95964},{"id":95995,"depth":51,"text":95996,"children":97502},[97503,97504,97505],{"id":95999,"depth":60,"text":96000},{"id":96181,"depth":60,"text":96182},{"id":96259,"depth":60,"text":96260},{"id":96294,"depth":51,"text":96295,"children":97507},[97508,97509],{"id":96298,"depth":60,"text":96299},{"id":96355,"depth":60,"text":96356},{"id":96451,"depth":51,"text":96452,"children":97511},[97512,97513],{"id":96455,"depth":60,"text":96456},{"id":96467,"depth":60,"text":96468},{"id":96501,"depth":51,"text":96502},{"id":96538,"depth":51,"text":96539,"children":97516},[97517,97518,97519,97520,97521,97522,97523,97524],{"id":96542,"depth":60,"text":96543},{"id":96767,"depth":60,"text":96768},{"id":96774,"depth":60,"text":96775},{"id":96983,"depth":60,"text":96984},{"id":97003,"depth":60,"text":97004},{"id":97139,"depth":60,"text":97140},{"id":97308,"depth":60,"text":97309},{"id":97423,"depth":60,"text":97424},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95878,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97531,"title":97532,"body":97533,"description":723,"extension":724,"meta":97626,"navigation":726,"path":97627,"seo":97628,"stem":97629,"__hash__":97630},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97534,"toc":97624},[97535,97538,97541,97544,97547,97550,97553,97556,97559,97562,97565,97568,97570,97573,97576,97581,97584,97587,97621],[10,97536,97532],{"id":97537},"_20魔法命令mprun",[108,97539,97540],{},"逐行分析数据内存的使用情况",[108,97542,97543],{},"语法格式：",[108,97545,97546],{},"%mprun -f 模块名.函数名 模块名.函数名()",[108,97548,97549],{},"分析结果列如下：",[108,97551,97552],{},"Line行号",[108,97554,97555],{},"Mem usage内存使用大小",[108,97557,97558],{},"increment内存增量",[108,97560,97561],{},"Line content代码内容",[108,97563,97564],{},"补充说明：",[108,97566,97567],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[108,97569,95833],{},[108,97571,97572],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[108,97574,97575],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[108,97577,97578],{},[2122,97579],{"alt":29,"src":97580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[108,97582,97583],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[108,97585,97586],{},"这时候需要重新加载模块",[24,97588,97590],{"className":31029,"code":97589,"language":31031,"meta":29,"style":29},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[31,97591,97592,97597,97604,97609],{"__ignoreMap":29},[34,97593,97594],{"class":36,"line":37},[34,97595,97596],{"class":205},"#重新加载模块\n",[34,97598,97599,97601],{"class":36,"line":51},[34,97600,31043],{"class":87},[34,97602,97603],{"class":40}," importlib\n",[34,97605,97606],{"class":36,"line":60},[34,97607,97608],{"class":40},"importlib.reload(mprun_test)\n",[34,97610,97611,97613,97616,97618],{"class":36,"line":76},[34,97612,1123],{"class":87},[34,97614,97615],{"class":40},"mprun ",[34,97617,1327],{"class":87},[34,97619,97620],{"class":40},"f mprun_test.fun_test mprun_test.fun_test()\n",[45,97622,97623],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":97625},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97532,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97632,"title":97633,"body":97634,"description":723,"extension":724,"meta":97651,"navigation":726,"path":97652,"seo":97653,"stem":97654,"__hash__":97655},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97635,"toc":97649},[97636,97639,97644],[10,97637,97633],{"id":97638},"_3一维数组的索引和切片",[108,97640,97641],{},[2122,97642],{"alt":29,"src":97643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[108,97645,97646],{},[2122,97647],{"alt":29,"src":97648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":29,"searchDepth":51,"depth":51,"links":97650},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97633,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97657,"title":97658,"body":97659,"description":723,"extension":724,"meta":98142,"navigation":726,"path":98143,"seo":98144,"stem":98145,"__hash__":98146},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97660,"toc":98140},[97661,97664,97667,97672,97705,97708,97746,97749,97783,97786,97891,97894,97931,97934,98035,98038,98089,98092,98134,98137],[10,97662,97658],{"id":97663},"_4二维数组的索引与切片",[108,97665,97666],{},"①获取指定单个元素",[108,97668,97669],{},[2122,97670],{"alt":29,"src":97671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[24,97673,97675],{"className":31029,"code":97674,"language":31031,"meta":29,"style":29},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[31,97676,97677,97682,97687,97692],{"__ignoreMap":29},[34,97678,97679],{"class":36,"line":37},[34,97680,97681],{"class":205},"#获取元素9\n",[34,97683,97684],{"class":36,"line":51},[34,97685,97686],{"class":205},"#先获取所在行，再获取所在列\n",[34,97688,97689],{"class":36,"line":60},[34,97690,97691],{"class":205},"#数组[行索引号，列索引号]\n",[34,97693,97694,97697,97699,97701,97703],{"class":36,"line":76},[34,97695,97696],{"class":40},"a[",[34,97698,1013],{"class":63},[34,97700,1173],{"class":40},[34,97702,875],{"class":63},[34,97704,33897],{"class":40},[108,97706,97707],{},"②获取整行元素",[24,97709,97711],{"className":31029,"code":97710,"language":31031,"meta":29,"style":29},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[31,97712,97713,97718,97723,97731,97736],{"__ignoreMap":29},[34,97714,97715],{"class":36,"line":37},[34,97716,97717],{"class":205},"#获取整行 数组[行索引号]\n",[34,97719,97720],{"class":36,"line":51},[34,97721,97722],{"class":205},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[34,97724,97725,97727,97729],{"class":36,"line":60},[34,97726,97696],{"class":40},[34,97728,875],{"class":63},[34,97730,33897],{"class":40},[34,97732,97733],{"class":36,"line":76},[34,97734,97735],{"class":205},"#也可以负索引获取一行\n",[34,97737,97738,97740,97742,97744],{"class":36,"line":93},[34,97739,97696],{"class":40},[34,97741,1327],{"class":87},[34,97743,1013],{"class":63},[34,97745,33897],{"class":40},[108,97747,97748],{},"③获取整列元素",[24,97750,97752],{"className":31029,"code":97751,"language":31031,"meta":29,"style":29},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[31,97753,97754,97759,97768,97773],{"__ignoreMap":29},[34,97755,97756],{"class":36,"line":37},[34,97757,97758],{"class":205},"#获取整列 数组名[:,列索引]\n",[34,97760,97761,97764,97766],{"class":36,"line":51},[34,97762,97763],{"class":40},"a[:,",[34,97765,875],{"class":63},[34,97767,33897],{"class":40},[34,97769,97770],{"class":36,"line":60},[34,97771,97772],{"class":205},"#也可以负索引获取一列\n",[34,97774,97775,97777,97779,97781],{"class":36,"line":76},[34,97776,97763],{"class":40},[34,97778,1327],{"class":87},[34,97780,1013],{"class":63},[34,97782,33897],{"class":40},[108,97784,97785],{},"④部分行部分列的元素",[24,97787,97789],{"className":31029,"code":97788,"language":31031,"meta":29,"style":29},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[31,97790,97791,97796,97806,97810,97814,97819,97824,97828,97840,97844,97848,97853,97858,97863,97868,97872,97877],{"__ignoreMap":29},[34,97792,97793],{"class":36,"line":37},[34,97794,97795],{"class":205},"#部分行部分列 数组名[行切片，列切片]\n",[34,97797,97798,97801,97803],{"class":36,"line":51},[34,97799,97800],{"class":40},"a[:",[34,97802,875],{"class":63},[34,97804,97805],{"class":40},",:]\n",[34,97807,97808],{"class":36,"line":60},[34,97809,94194],{"class":205},[34,97811,97812],{"class":36,"line":76},[34,97813,94558],{"class":156},[34,97815,97816],{"class":36,"line":93},[34,97817,97818],{"class":156},"array([[ 1,  2,  3,  4,  5,  6],\n",[34,97820,97821],{"class":36,"line":99},[34,97822,97823],{"class":156},"       [ 7,  8,  9, 10, 11, 12]])\n",[34,97825,97826],{"class":36,"line":353},[34,97827,94558],{"class":156},[34,97829,97830,97832,97834,97836,97838],{"class":36,"line":359},[34,97831,97763],{"class":40},[34,97833,1013],{"class":63},[34,97835,1653],{"class":40},[34,97837,1088],{"class":63},[34,97839,33897],{"class":40},[34,97841,97842],{"class":36,"line":579},[34,97843,94194],{"class":205},[34,97845,97846],{"class":36,"line":589},[34,97847,94558],{"class":156},[34,97849,97850],{"class":36,"line":601},[34,97851,97852],{"class":156},"array([[ 2,  3,  4],\n",[34,97854,97855],{"class":36,"line":613},[34,97856,97857],{"class":156},"       [ 8,  9, 10],\n",[34,97859,97860],{"class":36,"line":618},[34,97861,97862],{"class":156},"       [14, 15, 16],\n",[34,97864,97865],{"class":36,"line":628},[34,97866,97867],{"class":156},"       [20, 21, 22]])\n",[34,97869,97870],{"class":36,"line":640},[34,97871,94558],{"class":156},[34,97873,97874],{"class":36,"line":2301},[34,97875,97876],{"class":205},"#对列行同时进行切片，使用了step参数\n",[34,97878,97879,97882,97884,97887,97889],{"class":36,"line":2307},[34,97880,97881],{"class":40},"a[::",[34,97883,875],{"class":63},[34,97885,97886],{"class":40},",::",[34,97888,875],{"class":63},[34,97890,33897],{"class":40},[108,97892,97893],{},"⑤同时获取两个元素",[24,97895,97897],{"className":31029,"code":97896,"language":31031,"meta":29,"style":29},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[31,97898,97899,97904,97909],{"__ignoreMap":29},[34,97900,97901],{"class":36,"line":37},[34,97902,97903],{"class":205},"#同时获取第三行第二列，第四行第一列\n",[34,97905,97906],{"class":36,"line":51},[34,97907,97908],{"class":205},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[34,97910,97911,97914,97916,97918,97920,97922,97924,97926,97928],{"class":36,"line":60},[34,97912,97913],{"class":40},"a[(",[34,97915,875],{"class":63},[34,97917,1173],{"class":40},[34,97919,869],{"class":63},[34,97921,42898],{"class":40},[34,97923,1013],{"class":63},[34,97925,1173],{"class":40},[34,97927,987],{"class":63},[34,97929,97930],{"class":40},")]\n",[108,97932,97933],{},"⑥切片，对行进行反向获取",[24,97935,97937],{"className":31029,"code":97936,"language":31031,"meta":29,"style":29},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[31,97938,97939,97944,97954,97958,97962,97967,97972,97977,97982,97986,97991,98007,98011,98016,98021,98026,98031],{"__ignoreMap":29},[34,97940,97941],{"class":36,"line":37},[34,97942,97943],{"class":205},"#切片 对所有行进行反向获取\n",[34,97945,97946,97948,97950,97952],{"class":36,"line":51},[34,97947,97881],{"class":40},[34,97949,1327],{"class":87},[34,97951,1013],{"class":63},[34,97953,33897],{"class":40},[34,97955,97956],{"class":36,"line":60},[34,97957,94194],{"class":205},[34,97959,97960],{"class":36,"line":76},[34,97961,94558],{"class":156},[34,97963,97964],{"class":36,"line":93},[34,97965,97966],{"class":156},"array([[19, 20, 21, 22, 23, 24],\n",[34,97968,97969],{"class":36,"line":99},[34,97970,97971],{"class":156},"       [13, 14, 15, 16, 17, 18],\n",[34,97973,97974],{"class":36,"line":353},[34,97975,97976],{"class":156},"       [ 7,  8,  9, 10, 11, 12],\n",[34,97978,97979],{"class":36,"line":359},[34,97980,97981],{"class":156},"       [ 1,  2,  3,  4,  5,  6]])\n",[34,97983,97984],{"class":36,"line":579},[34,97985,94558],{"class":156},[34,97987,97988],{"class":36,"line":589},[34,97989,97990],{"class":205},"#对行列都进行反向切片获取\n",[34,97992,97993,97995,97997,97999,98001,98003,98005],{"class":36,"line":601},[34,97994,97881],{"class":40},[34,97996,1327],{"class":87},[34,97998,1013],{"class":63},[34,98000,97886],{"class":40},[34,98002,1327],{"class":87},[34,98004,1013],{"class":63},[34,98006,33897],{"class":40},[34,98008,98009],{"class":36,"line":613},[34,98010,94558],{"class":156},[34,98012,98013],{"class":36,"line":618},[34,98014,98015],{"class":156},"array([[24, 23, 22, 21, 20, 19],\n",[34,98017,98018],{"class":36,"line":628},[34,98019,98020],{"class":156},"       [18, 17, 16, 15, 14, 13],\n",[34,98022,98023],{"class":36,"line":640},[34,98024,98025],{"class":156},"       [12, 11, 10,  9,  8,  7],\n",[34,98027,98028],{"class":36,"line":2301},[34,98029,98030],{"class":156},"       [ 6,  5,  4,  3,  2,  1]])\n",[34,98032,98033],{"class":36,"line":2307},[34,98034,94558],{"class":156},[108,98036,98037],{},"⑦修改元素",[24,98039,98041],{"className":31029,"code":98040,"language":31031,"meta":29,"style":29},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[31,98042,98043,98048,98066,98071],{"__ignoreMap":29},[34,98044,98045],{"class":36,"line":37},[34,98046,98047],{"class":205},"#获取前两行和前两列\n",[34,98049,98050,98053,98055,98057,98059,98062,98064],{"class":36,"line":51},[34,98051,98052],{"class":40},"sub_a",[34,98054,153],{"class":87},[34,98056,97800],{"class":40},[34,98058,875],{"class":63},[34,98060,98061],{"class":40},",:",[34,98063,875],{"class":63},[34,98065,33897],{"class":40},[34,98067,98068],{"class":36,"line":60},[34,98069,98070],{"class":205},"#修改sub_a第一个元素的值\n",[34,98072,98073,98076,98078,98080,98082,98084,98086],{"class":36,"line":76},[34,98074,98075],{"class":40},"sub_a[",[34,98077,987],{"class":63},[34,98079,1173],{"class":40},[34,98081,987],{"class":63},[34,98083,1733],{"class":40},[34,98085,153],{"class":87},[34,98087,98088],{"class":63},"100\n",[108,98090,98091],{},"⑧数组复制copy()",[24,98093,98095],{"className":31029,"code":98094,"language":31031,"meta":29,"style":29},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[31,98096,98097,98102,98112,98117],{"__ignoreMap":29},[34,98098,98099],{"class":36,"line":37},[34,98100,98101],{"class":205},"#数组复制\n",[34,98103,98104,98107,98109],{"class":36,"line":51},[34,98105,98106],{"class":40},"copy_a",[34,98108,153],{"class":87},[34,98110,98111],{"class":40},"np.copy(sub_a)\n",[34,98113,98114],{"class":36,"line":60},[34,98115,98116],{"class":205},"#修改copy_a后不影响原数组\n",[34,98118,98119,98122,98124,98126,98128,98130,98132],{"class":36,"line":76},[34,98120,98121],{"class":40},"copy_a[",[34,98123,987],{"class":63},[34,98125,1173],{"class":40},[34,98127,987],{"class":63},[34,98129,1733],{"class":40},[34,98131,153],{"class":87},[34,98133,98088],{"class":63},[108,98135,98136],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[45,98138,98139],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":98141},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97658,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98148,"title":98149,"body":98150,"description":723,"extension":724,"meta":98642,"navigation":726,"path":98643,"seo":98644,"stem":98645,"__hash__":98646},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98151,"toc":98634},[98152,98155,98159,98162,98165,98218,98221,98246,98249,98268,98288,98291,98307,98311,98357,98361,98403,98407,98410,98413,98416,98419,98422,98484,98544,98548,98551,98608,98612,98617,98626,98631],[10,98153,98149],{"id":98154},"_5改变数组的维度",[14,98156,98158],{"id":98157},"_51-使用reshape","5.1 使用reshape()",[108,98160,98161],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[108,98163,98164],{},"①一维数组转换为二维数组",[24,98166,98168],{"className":31029,"code":98167,"language":31031,"meta":29,"style":29},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[31,98169,98170,98186,98191,98196,98201],{"__ignoreMap":29},[34,98171,98172,98174,98176,98178,98180,98182,98184],{"class":36,"line":37},[34,98173,520],{"class":40},[34,98175,153],{"class":87},[34,98177,93632],{"class":40},[34,98179,1013],{"class":63},[34,98181,1173],{"class":40},[34,98183,1318],{"class":63},[34,98185,807],{"class":40},[34,98187,98188],{"class":36,"line":51},[34,98189,98190],{"class":205},"#将一维数组进行转换\n",[34,98192,98193],{"class":36,"line":60},[34,98194,98195],{"class":205},"#注意点：元素个数不可以变\n",[34,98197,98198],{"class":36,"line":76},[34,98199,98200],{"class":205},"#转换维度要保持一致，不一致就异常！！！\n",[34,98202,98203,98205,98207,98210,98212,98214,98216],{"class":36,"line":93},[34,98204,93936],{"class":40},[34,98206,153],{"class":87},[34,98208,98209],{"class":40},"a.reshape(",[34,98211,875],{"class":63},[34,98213,1173],{"class":40},[34,98215,1139],{"class":63},[34,98217,807],{"class":40},[108,98219,98220],{},"②一维数组转换为三维数组",[24,98222,98224],{"className":31029,"code":98223,"language":31031,"meta":29,"style":29},"aaa=a.reshape(2,3,2)\n",[31,98225,98226],{"__ignoreMap":29},[34,98227,98228,98230,98232,98234,98236,98238,98240,98242,98244],{"class":36,"line":37},[34,98229,96151],{"class":40},[34,98231,153],{"class":87},[34,98233,98209],{"class":40},[34,98235,875],{"class":63},[34,98237,1173],{"class":40},[34,98239,869],{"class":63},[34,98241,1173],{"class":40},[34,98243,875],{"class":63},[34,98245,807],{"class":40},[108,98247,98248],{},"③二维数组转化为一维数组",[24,98250,98252],{"className":31029,"code":98251,"language":31031,"meta":29,"style":29},"#知道元素个数：\naa.reshape(12)\n",[31,98253,98254,98259],{"__ignoreMap":29},[34,98255,98256],{"class":36,"line":37},[34,98257,98258],{"class":205},"#知道元素个数：\n",[34,98260,98261,98264,98266],{"class":36,"line":51},[34,98262,98263],{"class":40},"aa.reshape(",[34,98265,1293],{"class":63},[34,98267,807],{"class":40},[24,98269,98271],{"className":31029,"code":98270,"language":31031,"meta":29,"style":29},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[31,98272,98273,98278],{"__ignoreMap":29},[34,98274,98275],{"class":36,"line":37},[34,98276,98277],{"class":205},"#不知道元素个数，参数传递-1\n",[34,98279,98280,98282,98284,98286],{"class":36,"line":51},[34,98281,98263],{"class":40},[34,98283,1327],{"class":87},[34,98285,1013],{"class":63},[34,98287,807],{"class":40},[108,98289,98290],{},"④三维数组转换为一维数组",[24,98292,98294],{"className":31029,"code":98293,"language":31031,"meta":29,"style":29},"aaa.reshape(-1)\n",[31,98295,98296],{"__ignoreMap":29},[34,98297,98298,98301,98303,98305],{"class":36,"line":37},[34,98299,98300],{"class":40},"aaa.reshape(",[34,98302,1327],{"class":87},[34,98304,1013],{"class":63},[34,98306,807],{"class":40},[14,98308,98310],{"id":98309},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[24,98312,98314],{"className":31029,"code":98313,"language":31031,"meta":29,"style":29},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[31,98315,98316,98343,98348,98352],{"__ignoreMap":29},[34,98317,98318,98320,98322,98324,98326,98328,98330,98332,98334,98336,98338,98340],{"class":36,"line":37},[34,98319,93936],{"class":40},[34,98321,153],{"class":87},[34,98323,93632],{"class":40},[34,98325,1013],{"class":63},[34,98327,1173],{"class":40},[34,98329,1318],{"class":63},[34,98331,93637],{"class":40},[34,98333,875],{"class":63},[34,98335,1173],{"class":40},[34,98337,1139],{"class":63},[34,98339,1224],{"class":40},[34,98341,98342],{"class":205},"#转换为2行6列的数组\n",[34,98344,98345],{"class":36,"line":51},[34,98346,98347],{"class":40},"aa.revel()\n",[34,98349,98350],{"class":36,"line":60},[34,98351,94194],{"class":205},[34,98353,98354],{"class":36,"line":76},[34,98355,98356],{"class":205},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98358,98360],{"id":98359},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[24,98362,98364],{"className":31029,"code":98363,"language":31031,"meta":29,"style":29},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[31,98365,98366,98390,98395,98399],{"__ignoreMap":29},[34,98367,98368,98370,98372,98374,98376,98378,98380,98382,98384,98386,98388],{"class":36,"line":37},[34,98369,93936],{"class":40},[34,98371,153],{"class":87},[34,98373,93632],{"class":40},[34,98375,1013],{"class":63},[34,98377,1173],{"class":40},[34,98379,1318],{"class":63},[34,98381,93637],{"class":40},[34,98383,875],{"class":63},[34,98385,1173],{"class":40},[34,98387,1139],{"class":63},[34,98389,807],{"class":40},[34,98391,98392],{"class":36,"line":51},[34,98393,98394],{"class":40},"aa.flatten()\n",[34,98396,98397],{"class":36,"line":60},[34,98398,94194],{"class":205},[34,98400,98401],{"class":36,"line":76},[34,98402,98356],{"class":205},[14,98404,98406],{"id":98405},"_54-使用resize","5.4 使用resize()",[108,98408,98409],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[108,98411,98412],{},"通过resize方法可以改变数组的维度",[108,98414,98415],{},"#resize修改数组维度",[108,98417,98418],{},"#以元组的形式指定形状",[108,98420,98421],{},"#改变的是原数组",[24,98423,98425],{"className":31029,"code":98424,"language":31031,"meta":29,"style":29},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[31,98426,98427,98443,98463,98476,98480],{"__ignoreMap":29},[34,98428,98429,98431,98433,98435,98437,98439,98441],{"class":36,"line":37},[34,98430,520],{"class":40},[34,98432,153],{"class":87},[34,98434,93632],{"class":40},[34,98436,1013],{"class":63},[34,98438,1173],{"class":40},[34,98440,1318],{"class":63},[34,98442,807],{"class":40},[34,98444,98445,98448,98450,98452,98454,98456,98458,98460],{"class":36,"line":51},[34,98446,98447],{"class":40},"a.shape",[34,98449,153],{"class":87},[34,98451,801],{"class":40},[34,98453,875],{"class":63},[34,98455,1173],{"class":40},[34,98457,1139],{"class":63},[34,98459,1224],{"class":40},[34,98461,98462],{"class":205},"#改变了原数组\n",[34,98464,98465,98467,98469,98472,98474],{"class":36,"line":60},[34,98466,520],{"class":40},[34,98468,153],{"class":87},[34,98470,98471],{"class":40},"resize((",[34,98473,1293],{"class":63},[34,98475,31148],{"class":40},[34,98477,98478],{"class":36,"line":76},[34,98479,94194],{"class":205},[34,98481,98482],{"class":36,"line":93},[34,98483,98356],{"class":205},[24,98485,98487],{"className":31029,"code":98486,"language":31031,"meta":29,"style":29},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[31,98488,98489,98502,98506,98510,98515,98520,98525,98530,98535,98540],{"__ignoreMap":29},[34,98490,98491,98494,98496,98498,98500],{"class":36,"line":37},[34,98492,98493],{"class":40},"a.resize((",[34,98495,1139],{"class":63},[34,98497,1173],{"class":40},[34,98499,875],{"class":63},[34,98501,31148],{"class":40},[34,98503,98504],{"class":36,"line":51},[34,98505,94194],{"class":205},[34,98507,98508],{"class":36,"line":60},[34,98509,94558],{"class":156},[34,98511,98512],{"class":36,"line":76},[34,98513,98514],{"class":156},"array([[ 1,  2],\n",[34,98516,98517],{"class":36,"line":93},[34,98518,98519],{"class":156},"       [ 3,  4],\n",[34,98521,98522],{"class":36,"line":99},[34,98523,98524],{"class":156},"       [ 5,  6],\n",[34,98526,98527],{"class":36,"line":353},[34,98528,98529],{"class":156},"       [ 7,  8],\n",[34,98531,98532],{"class":36,"line":359},[34,98533,98534],{"class":156},"       [ 9, 10],\n",[34,98536,98537],{"class":36,"line":579},[34,98538,98539],{"class":156},"       [11, 12]])\n",[34,98541,98542],{"class":36,"line":589},[34,98543,94558],{"class":156},[14,98545,98547],{"id":98546},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[108,98549,98550],{},"改变了原数组",[24,98552,98554],{"className":31029,"code":98553,"language":31031,"meta":29,"style":29},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[31,98555,98556,98572,98588,98592,98596,98600,98604],{"__ignoreMap":29},[34,98557,98558,98560,98562,98564,98566,98568,98570],{"class":36,"line":37},[34,98559,520],{"class":40},[34,98561,153],{"class":87},[34,98563,93632],{"class":40},[34,98565,1013],{"class":63},[34,98567,1173],{"class":40},[34,98569,1318],{"class":63},[34,98571,807],{"class":40},[34,98573,98574,98576,98578,98580,98582,98584,98586],{"class":36,"line":51},[34,98575,98447],{"class":40},[34,98577,153],{"class":87},[34,98579,801],{"class":40},[34,98581,875],{"class":63},[34,98583,1173],{"class":40},[34,98585,1139],{"class":63},[34,98587,807],{"class":40},[34,98589,98590],{"class":36,"line":60},[34,98591,94194],{"class":205},[34,98593,98594],{"class":36,"line":76},[34,98595,94558],{"class":156},[34,98597,98598],{"class":36,"line":93},[34,98599,97818],{"class":156},[34,98601,98602],{"class":36,"line":99},[34,98603,97823],{"class":156},[34,98605,98606],{"class":36,"line":353},[34,98607,94558],{"class":156},[14,98609,98611],{"id":98610},"_56-重要比较","5.6 重要比较：",[108,98613,98614],{},[2122,98615],{"alt":29,"src":98616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[108,98618,98619,98620,98622,98623,98625],{},"口诀：NumPy 函数要么用 ",[31,98621,96593],{},"，要么用 ",[31,98624,32147],{},"，创建结构用 shape，造数据用 size",[108,98627,98628],{},[2122,98629],{"alt":29,"src":98630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[45,98632,98633],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":98635},[98636,98637,98638,98639,98640,98641],{"id":98157,"depth":51,"text":98158},{"id":98309,"depth":51,"text":98310},{"id":98359,"depth":51,"text":98360},{"id":98405,"depth":51,"text":98406},{"id":98546,"depth":51,"text":98547},{"id":98610,"depth":51,"text":98611},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98149,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98648,"title":98649,"body":98650,"description":723,"extension":724,"meta":99722,"navigation":726,"path":99723,"seo":99724,"stem":99725,"__hash__":99726},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98651,"toc":99716},[98652,98655,98659,98662,98665,98668,98733,98736,98776,98779,98861,98864,98869,98891,98893,98898,98903,98906,98909,99064,99067,99269,99273,99276,99279,99347,99349,99354,99357,99360,99440,99444,99447,99449,99522,99524,99529,99531,99611,99615,99618,99621,99624,99627,99630,99633,99713],[10,98653,98649],{"id":98654},"_6数组的拼接",[14,98656,98658],{"id":98657},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[108,98660,98661],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[108,98663,98664],{},"函数内部传两个数列构成的数列或者元组",[108,98666,98667],{},"①一维数组的拼接",[24,98669,98671],{"className":31029,"code":98670,"language":31031,"meta":29,"style":29},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[31,98672,98673,98693,98713,98718,98723,98728],{"__ignoreMap":29},[34,98674,98675,98677,98679,98681,98683,98685,98687,98689,98691],{"class":36,"line":37},[34,98676,520],{"class":40},[34,98678,153],{"class":87},[34,98680,93654],{"class":40},[34,98682,1013],{"class":63},[34,98684,1173],{"class":40},[34,98686,875],{"class":63},[34,98688,1173],{"class":40},[34,98690,869],{"class":63},[34,98692,5310],{"class":40},[34,98694,98695,98697,98699,98701,98703,98705,98707,98709,98711],{"class":36,"line":51},[34,98696,1058],{"class":40},[34,98698,153],{"class":87},[34,98700,93654],{"class":40},[34,98702,1088],{"class":63},[34,98704,1173],{"class":40},[34,98706,1114],{"class":63},[34,98708,1173],{"class":40},[34,98710,1139],{"class":63},[34,98712,5310],{"class":40},[34,98714,98715],{"class":36,"line":60},[34,98716,98717],{"class":205},"#调用concatenate进行数组拼接\n",[34,98719,98720],{"class":36,"line":76},[34,98721,98722],{"class":40},"np.concatenate((a,b))\n",[34,98724,98725],{"class":36,"line":93},[34,98726,98727],{"class":205},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[34,98729,98730],{"class":36,"line":99},[34,98731,98732],{"class":205},"#np.concatenate([a,b])\n",[108,98734,98735],{},"②一维多个数组拼接",[24,98737,98739],{"className":31029,"code":98738,"language":31031,"meta":29,"style":29},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[31,98740,98741,98746,98766,98771],{"__ignoreMap":29},[34,98742,98743],{"class":36,"line":37},[34,98744,98745],{"class":205},"#也可以多个数组进行拼接\n",[34,98747,98748,98750,98752,98754,98756,98758,98760,98762,98764],{"class":36,"line":51},[34,98749,1083],{"class":40},[34,98751,153],{"class":87},[34,98753,93654],{"class":40},[34,98755,1241],{"class":63},[34,98757,1173],{"class":40},[34,98759,1267],{"class":63},[34,98761,1173],{"class":40},[34,98763,1318],{"class":63},[34,98765,5310],{"class":40},[34,98767,98768],{"class":36,"line":60},[34,98769,98770],{"class":40},"c\n",[34,98772,98773],{"class":36,"line":76},[34,98774,98775],{"class":40},"np.concatenate((a,b,c))\n",[108,98777,98778],{},"③二维数组拼接",[24,98780,98782],{"className":31029,"code":98781,"language":31031,"meta":29,"style":29},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[31,98783,98784,98789,98813,98838,98843,98848],{"__ignoreMap":29},[34,98785,98786],{"class":36,"line":37},[34,98787,98788],{"class":205},"#二维数组使用concatenate进行拼接\n",[34,98790,98791,98793,98795,98797,98799,98801,98803,98805,98807,98809,98811],{"class":36,"line":51},[34,98792,93936],{"class":40},[34,98794,153],{"class":87},[34,98796,93632],{"class":40},[34,98798,1013],{"class":63},[34,98800,1173],{"class":40},[34,98802,1318],{"class":63},[34,98804,93637],{"class":40},[34,98806,869],{"class":63},[34,98808,1173],{"class":40},[34,98810,1088],{"class":63},[34,98812,807],{"class":40},[34,98814,98815,98818,98820,98822,98824,98826,98828,98830,98832,98834,98836],{"class":36,"line":60},[34,98816,98817],{"class":40},"bb",[34,98819,153],{"class":87},[34,98821,93632],{"class":40},[34,98823,1132],{"class":63},[34,98825,1173],{"class":40},[34,98827,1437],{"class":63},[34,98829,93637],{"class":40},[34,98831,869],{"class":63},[34,98833,1173],{"class":40},[34,98835,1088],{"class":63},[34,98837,807],{"class":40},[34,98839,98840],{"class":36,"line":76},[34,98841,98842],{"class":205},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[34,98844,98845],{"class":36,"line":93},[34,98846,98847],{"class":205},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[34,98849,98850,98853,98855,98857,98859],{"class":36,"line":99},[34,98851,98852],{"class":40},"np.concatenate((aa,bb),",[34,98854,48165],{"class":5869},[34,98856,153],{"class":87},[34,98858,987],{"class":63},[34,98860,807],{"class":40},[108,98862,98863],{},"结果：",[108,98865,98866],{},[2122,98867],{"alt":29,"src":98868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[24,98870,98872],{"className":31029,"code":98871,"language":31031,"meta":29,"style":29},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[31,98873,98874,98879],{"__ignoreMap":29},[34,98875,98876],{"class":36,"line":37},[34,98877,98878],{"class":205},"#指定axis为1进行拼接\n",[34,98880,98881,98883,98885,98887,98889],{"class":36,"line":51},[34,98882,98852],{"class":40},[34,98884,48165],{"class":5869},[34,98886,153],{"class":87},[34,98888,1013],{"class":63},[34,98890,807],{"class":40},[108,98892,98863],{},[108,98894,98895],{},[2122,98896],{"alt":29,"src":98897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[108,98899,98900],{},[111,98901,98902],{},"二维数组总结：0竖着方向，1横着方向",[108,98904,98905],{},"④三维数组拼接",[108,98907,98908],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[24,98910,98912],{"className":31029,"code":98911,"language":31031,"meta":29,"style":29},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[31,98913,98914,98919,98947,98977,98982,98999,99004,99009,99014,99031,99036,99041,99046,99059],{"__ignoreMap":29},[34,98915,98916],{"class":36,"line":37},[34,98917,98918],{"class":205},"#两个三行六列\n",[34,98920,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945],{"class":36,"line":51},[34,98922,96151],{"class":40},[34,98924,153],{"class":87},[34,98926,93632],{"class":40},[34,98928,1013],{"class":63},[34,98930,1173],{"class":40},[34,98932,1120],{"class":63},[34,98934,93637],{"class":40},[34,98936,875],{"class":63},[34,98938,1173],{"class":40},[34,98940,869],{"class":63},[34,98942,1173],{"class":40},[34,98944,1139],{"class":63},[34,98946,807],{"class":40},[34,98948,98949,98952,98954,98956,98958,98960,98963,98965,98967,98969,98971,98973,98975],{"class":36,"line":60},[34,98950,98951],{"class":40},"bbb",[34,98953,153],{"class":87},[34,98955,93632],{"class":40},[34,98957,1132],{"class":63},[34,98959,1173],{"class":40},[34,98961,98962],{"class":63},"137",[34,98964,93637],{"class":40},[34,98966,875],{"class":63},[34,98968,1173],{"class":40},[34,98970,869],{"class":63},[34,98972,1173],{"class":40},[34,98974,1139],{"class":63},[34,98976,807],{"class":40},[34,98978,98979],{"class":36,"line":76},[34,98980,98981],{"class":205},"#axis=0\n",[34,98983,98984,98986,98988,98991,98993,98995,98997],{"class":36,"line":93},[34,98985,1490],{"class":40},[34,98987,153],{"class":87},[34,98989,98990],{"class":40},"np.concatenate((aaa,bbb),",[34,98992,48165],{"class":5869},[34,98994,153],{"class":87},[34,98996,987],{"class":63},[34,98998,807],{"class":40},[34,99000,99001],{"class":36,"line":99},[34,99002,99003],{"class":40},"s.shape\n",[34,99005,99006],{"class":36,"line":353},[34,99007,99008],{"class":205},"#输出：(4,3,6)\n",[34,99010,99011],{"class":36,"line":359},[34,99012,99013],{"class":205},"#axis=1\n",[34,99015,99016,99019,99021,99023,99025,99027,99029],{"class":36,"line":579},[34,99017,99018],{"class":40},"ss",[34,99020,153],{"class":87},[34,99022,98990],{"class":40},[34,99024,48165],{"class":5869},[34,99026,153],{"class":87},[34,99028,1013],{"class":63},[34,99030,807],{"class":40},[34,99032,99033],{"class":36,"line":589},[34,99034,99035],{"class":40},"ss.shape\n",[34,99037,99038],{"class":36,"line":601},[34,99039,99040],{"class":205},"#输出：(2,6,6)\n",[34,99042,99043],{"class":36,"line":613},[34,99044,99045],{"class":205},"#axis=2\n",[34,99047,99048,99050,99052,99054,99056],{"class":36,"line":618},[34,99049,98990],{"class":40},[34,99051,48165],{"class":5869},[34,99053,153],{"class":87},[34,99055,875],{"class":63},[34,99057,99058],{"class":40},").shape\n",[34,99060,99061],{"class":36,"line":628},[34,99062,99063],{"class":205},"#输出：（2，3，12）\n",[108,99065,99066],{},"⑤四维数组拼接",[24,99068,99070],{"className":31029,"code":99069,"language":31031,"meta":29,"style":29},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[31,99071,99072,99076,99104,99132,99157,99183,99187,99200,99205,99209,99221,99226,99230,99242,99247,99252,99264],{"__ignoreMap":29},[34,99073,99074],{"class":36,"line":37},[34,99075,98918],{"class":205},[34,99077,99078,99080,99082,99084,99086,99088,99090,99092,99094,99096,99098,99100,99102],{"class":36,"line":51},[34,99079,96151],{"class":40},[34,99081,153],{"class":87},[34,99083,93632],{"class":40},[34,99085,1013],{"class":63},[34,99087,1173],{"class":40},[34,99089,1120],{"class":63},[34,99091,93637],{"class":40},[34,99093,875],{"class":63},[34,99095,1173],{"class":40},[34,99097,869],{"class":63},[34,99099,1173],{"class":40},[34,99101,1139],{"class":63},[34,99103,807],{"class":40},[34,99105,99106,99108,99110,99112,99114,99116,99118,99120,99122,99124,99126,99128,99130],{"class":36,"line":60},[34,99107,98951],{"class":40},[34,99109,153],{"class":87},[34,99111,93632],{"class":40},[34,99113,1132],{"class":63},[34,99115,1173],{"class":40},[34,99117,98962],{"class":63},[34,99119,93637],{"class":40},[34,99121,875],{"class":63},[34,99123,1173],{"class":40},[34,99125,869],{"class":63},[34,99127,1173],{"class":40},[34,99129,1139],{"class":63},[34,99131,807],{"class":40},[34,99133,99134,99137,99139,99141,99143,99145,99147,99149,99151,99153,99155],{"class":36,"line":76},[34,99135,99136],{"class":40},"aaaa",[34,99138,153],{"class":87},[34,99140,98300],{"class":40},[34,99142,875],{"class":63},[34,99144,1173],{"class":40},[34,99146,869],{"class":63},[34,99148,1173],{"class":40},[34,99150,869],{"class":63},[34,99152,1173],{"class":40},[34,99154,875],{"class":63},[34,99156,807],{"class":40},[34,99158,99159,99162,99164,99167,99169,99171,99173,99175,99177,99179,99181],{"class":36,"line":93},[34,99160,99161],{"class":40},"bbbb",[34,99163,153],{"class":87},[34,99165,99166],{"class":40},"bbb.reshape(",[34,99168,875],{"class":63},[34,99170,1173],{"class":40},[34,99172,869],{"class":63},[34,99174,1173],{"class":40},[34,99176,869],{"class":63},[34,99178,1173],{"class":40},[34,99180,875],{"class":63},[34,99182,807],{"class":40},[34,99184,99185],{"class":36,"line":99},[34,99186,98981],{"class":205},[34,99188,99189,99192,99194,99196,99198],{"class":36,"line":353},[34,99190,99191],{"class":40},"np.concatenate((aaaa,bbbb),",[34,99193,48165],{"class":5869},[34,99195,153],{"class":87},[34,99197,987],{"class":63},[34,99199,99058],{"class":40},[34,99201,99202],{"class":36,"line":359},[34,99203,99204],{"class":205},"#结果：（4，3，3，2）\n",[34,99206,99207],{"class":36,"line":579},[34,99208,99013],{"class":205},[34,99210,99211,99213,99215,99217,99219],{"class":36,"line":589},[34,99212,99191],{"class":40},[34,99214,48165],{"class":5869},[34,99216,153],{"class":87},[34,99218,1013],{"class":63},[34,99220,99058],{"class":40},[34,99222,99223],{"class":36,"line":601},[34,99224,99225],{"class":205},"#结果：（2，6，3，2）\n",[34,99227,99228],{"class":36,"line":613},[34,99229,99045],{"class":205},[34,99231,99232,99234,99236,99238,99240],{"class":36,"line":618},[34,99233,99191],{"class":40},[34,99235,48165],{"class":5869},[34,99237,153],{"class":87},[34,99239,875],{"class":63},[34,99241,99058],{"class":40},[34,99243,99244],{"class":36,"line":628},[34,99245,99246],{"class":205},"#结果：（2，3，6，2）\n",[34,99248,99249],{"class":36,"line":640},[34,99250,99251],{"class":205},"#axis=3\n",[34,99253,99254,99256,99258,99260,99262],{"class":36,"line":2301},[34,99255,99191],{"class":40},[34,99257,48165],{"class":5869},[34,99259,153],{"class":87},[34,99261,869],{"class":63},[34,99263,99058],{"class":40},[34,99265,99266],{"class":36,"line":2307},[34,99267,99268],{"class":205},"#结果：（2，3，3，4）\n",[14,99270,99272],{"id":99271},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[108,99274,99275],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[108,99277,99278],{},"①二维数组",[24,99280,99282],{"className":31029,"code":99281,"language":31031,"meta":29,"style":29},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[31,99283,99284,99308,99332,99337,99342],{"__ignoreMap":29},[34,99285,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306],{"class":36,"line":37},[34,99287,93936],{"class":40},[34,99289,153],{"class":87},[34,99291,93632],{"class":40},[34,99293,1013],{"class":63},[34,99295,1173],{"class":40},[34,99297,1318],{"class":63},[34,99299,93637],{"class":40},[34,99301,869],{"class":63},[34,99303,1173],{"class":40},[34,99305,1088],{"class":63},[34,99307,807],{"class":40},[34,99309,99310,99312,99314,99316,99318,99320,99322,99324,99326,99328,99330],{"class":36,"line":51},[34,99311,98817],{"class":40},[34,99313,153],{"class":87},[34,99315,93632],{"class":40},[34,99317,1132],{"class":63},[34,99319,1173],{"class":40},[34,99321,1437],{"class":63},[34,99323,93637],{"class":40},[34,99325,869],{"class":63},[34,99327,1173],{"class":40},[34,99329,1088],{"class":63},[34,99331,807],{"class":40},[34,99333,99334],{"class":36,"line":60},[34,99335,99336],{"class":40},"np.hstack((aa,bb))\n",[34,99338,99339],{"class":36,"line":76},[34,99340,99341],{"class":205},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[34,99343,99344],{"class":36,"line":93},[34,99345,99346],{"class":205},"#np.hstack([aa,bb])\n",[108,99348,98863],{},[108,99350,99351],{},[2122,99352],{"alt":29,"src":99353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[108,99355,99356],{},"等效于concatenate()函数中axis=1时的情况",[108,99358,99359],{},"②三维数组",[24,99361,99363],{"className":31029,"code":99362,"language":31031,"meta":29,"style":29},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[31,99364,99365,99369,99397,99425,99430,99435],{"__ignoreMap":29},[34,99366,99367],{"class":36,"line":37},[34,99368,98918],{"class":205},[34,99370,99371,99373,99375,99377,99379,99381,99383,99385,99387,99389,99391,99393,99395],{"class":36,"line":51},[34,99372,96151],{"class":40},[34,99374,153],{"class":87},[34,99376,93632],{"class":40},[34,99378,1013],{"class":63},[34,99380,1173],{"class":40},[34,99382,1120],{"class":63},[34,99384,93637],{"class":40},[34,99386,875],{"class":63},[34,99388,1173],{"class":40},[34,99390,869],{"class":63},[34,99392,1173],{"class":40},[34,99394,1139],{"class":63},[34,99396,807],{"class":40},[34,99398,99399,99401,99403,99405,99407,99409,99411,99413,99415,99417,99419,99421,99423],{"class":36,"line":60},[34,99400,98951],{"class":40},[34,99402,153],{"class":87},[34,99404,93632],{"class":40},[34,99406,1132],{"class":63},[34,99408,1173],{"class":40},[34,99410,98962],{"class":63},[34,99412,93637],{"class":40},[34,99414,875],{"class":63},[34,99416,1173],{"class":40},[34,99418,869],{"class":63},[34,99420,1173],{"class":40},[34,99422,1139],{"class":63},[34,99424,807],{"class":40},[34,99426,99427],{"class":36,"line":76},[34,99428,99429],{"class":205},"#使用hstack\n",[34,99431,99432],{"class":36,"line":93},[34,99433,99434],{"class":40},"np.hstack((aaa,bbb)).shape\n",[34,99436,99437],{"class":36,"line":99},[34,99438,99439],{"class":205},"#输出：（2，6，6）\n",[14,99441,99443],{"id":99442},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[108,99445,99446],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[108,99448,99278],{},[24,99450,99452],{"className":31029,"code":99451,"language":31031,"meta":29,"style":29},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[31,99453,99454,99478,99502,99507,99512,99517],{"__ignoreMap":29},[34,99455,99456,99458,99460,99462,99464,99466,99468,99470,99472,99474,99476],{"class":36,"line":37},[34,99457,93936],{"class":40},[34,99459,153],{"class":87},[34,99461,93632],{"class":40},[34,99463,1013],{"class":63},[34,99465,1173],{"class":40},[34,99467,1318],{"class":63},[34,99469,93637],{"class":40},[34,99471,869],{"class":63},[34,99473,1173],{"class":40},[34,99475,1088],{"class":63},[34,99477,807],{"class":40},[34,99479,99480,99482,99484,99486,99488,99490,99492,99494,99496,99498,99500],{"class":36,"line":51},[34,99481,98817],{"class":40},[34,99483,153],{"class":87},[34,99485,93632],{"class":40},[34,99487,1132],{"class":63},[34,99489,1173],{"class":40},[34,99491,1437],{"class":63},[34,99493,93637],{"class":40},[34,99495,869],{"class":63},[34,99497,1173],{"class":40},[34,99499,1088],{"class":63},[34,99501,807],{"class":40},[34,99503,99504],{"class":36,"line":60},[34,99505,99506],{"class":205},"#vstack 垂直方向进行堆叠\n",[34,99508,99509],{"class":36,"line":76},[34,99510,99511],{"class":40},"np.vstack((aa,bb))\n",[34,99513,99514],{"class":36,"line":93},[34,99515,99516],{"class":205},"#与hstack传的参数类似，等价于：\n",[34,99518,99519],{"class":36,"line":99},[34,99520,99521],{"class":40},"np.vstack([aa,bb])\n",[108,99523,98863],{},[108,99525,99526],{},[2122,99527],{"alt":29,"src":99528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[108,99530,99359],{},[24,99532,99534],{"className":31029,"code":99533,"language":31031,"meta":29,"style":29},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[31,99535,99536,99540,99568,99596,99601,99606],{"__ignoreMap":29},[34,99537,99538],{"class":36,"line":37},[34,99539,98918],{"class":205},[34,99541,99542,99544,99546,99548,99550,99552,99554,99556,99558,99560,99562,99564,99566],{"class":36,"line":51},[34,99543,96151],{"class":40},[34,99545,153],{"class":87},[34,99547,93632],{"class":40},[34,99549,1013],{"class":63},[34,99551,1173],{"class":40},[34,99553,1120],{"class":63},[34,99555,93637],{"class":40},[34,99557,875],{"class":63},[34,99559,1173],{"class":40},[34,99561,869],{"class":63},[34,99563,1173],{"class":40},[34,99565,1139],{"class":63},[34,99567,807],{"class":40},[34,99569,99570,99572,99574,99576,99578,99580,99582,99584,99586,99588,99590,99592,99594],{"class":36,"line":60},[34,99571,98951],{"class":40},[34,99573,153],{"class":87},[34,99575,93632],{"class":40},[34,99577,1132],{"class":63},[34,99579,1173],{"class":40},[34,99581,98962],{"class":63},[34,99583,93637],{"class":40},[34,99585,875],{"class":63},[34,99587,1173],{"class":40},[34,99589,869],{"class":63},[34,99591,1173],{"class":40},[34,99593,1139],{"class":63},[34,99595,807],{"class":40},[34,99597,99598],{"class":36,"line":76},[34,99599,99600],{"class":205},"#使用vstack\n",[34,99602,99603],{"class":36,"line":93},[34,99604,99605],{"class":40},"np.vstack((aaa,bbb)).shape\n",[34,99607,99608],{"class":36,"line":99},[34,99609,99610],{"class":205},"#输出：（4，3，6）\n",[14,99612,99614],{"id":99613},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[108,99616,99617],{},"该方法是三维数组特有的方法",[108,99619,99620],{},"也就是说",[108,99622,99623],{},"一维数组拼接方法用：concatenate()",[108,99625,99626],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[108,99628,99629],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[108,99631,99632],{},"四维数组及多维数组只能用concatenate进行拼接",[24,99634,99636],{"className":31029,"code":99635,"language":31031,"meta":29,"style":29},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[31,99637,99638,99642,99670,99698,99703,99708],{"__ignoreMap":29},[34,99639,99640],{"class":36,"line":37},[34,99641,98918],{"class":205},[34,99643,99644,99646,99648,99650,99652,99654,99656,99658,99660,99662,99664,99666,99668],{"class":36,"line":51},[34,99645,96151],{"class":40},[34,99647,153],{"class":87},[34,99649,93632],{"class":40},[34,99651,1013],{"class":63},[34,99653,1173],{"class":40},[34,99655,1120],{"class":63},[34,99657,93637],{"class":40},[34,99659,875],{"class":63},[34,99661,1173],{"class":40},[34,99663,869],{"class":63},[34,99665,1173],{"class":40},[34,99667,1139],{"class":63},[34,99669,807],{"class":40},[34,99671,99672,99674,99676,99678,99680,99682,99684,99686,99688,99690,99692,99694,99696],{"class":36,"line":60},[34,99673,98951],{"class":40},[34,99675,153],{"class":87},[34,99677,93632],{"class":40},[34,99679,1132],{"class":63},[34,99681,1173],{"class":40},[34,99683,98962],{"class":63},[34,99685,93637],{"class":40},[34,99687,875],{"class":63},[34,99689,1173],{"class":40},[34,99691,869],{"class":63},[34,99693,1173],{"class":40},[34,99695,1139],{"class":63},[34,99697,807],{"class":40},[34,99699,99700],{"class":36,"line":76},[34,99701,99702],{"class":205},"#使用dstack\n",[34,99704,99705],{"class":36,"line":93},[34,99706,99707],{"class":40},"np.dstack((aaa,bbb)).shape\n",[34,99709,99710],{"class":36,"line":99},[34,99711,99712],{"class":205},"#结果：（2，3，12）\n",[45,99714,99715],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":99717},[99718,99719,99720,99721],{"id":98657,"depth":51,"text":98658},{"id":99271,"depth":51,"text":99272},{"id":99442,"depth":51,"text":99443},{"id":99613,"depth":51,"text":99614},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98649,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99728,"title":99729,"body":99730,"description":723,"extension":724,"meta":100005,"navigation":726,"path":100006,"seo":100007,"stem":100008,"__hash__":100009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99731,"toc":100003},[99732,99735,99738,99832,99835,99838,99841,99844,99847,99850,99853,99856,100000],[10,99733,99729],{"id":99734},"_7数组转置",[108,99736,99737],{},"使用transpose()函数",[24,99739,99741],{"className":31029,"code":99740,"language":31031,"meta":29,"style":29},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[31,99742,99743,99753,99777,99782,99787,99792,99797,99805,99809,99813,99818,99823,99828],{"__ignoreMap":29},[34,99744,99745,99747,99749,99751],{"class":36,"line":37},[34,99746,31043],{"class":87},[34,99748,32031],{"class":40},[34,99750,32034],{"class":87},[34,99752,32037],{"class":40},[34,99754,99755,99757,99759,99761,99763,99765,99767,99769,99771,99773,99775],{"class":36,"line":51},[34,99756,520],{"class":40},[34,99758,153],{"class":87},[34,99760,32368],{"class":40},[34,99762,1013],{"class":63},[34,99764,1173],{"class":40},[34,99766,1318],{"class":63},[34,99768,93637],{"class":40},[34,99770,1088],{"class":63},[34,99772,1173],{"class":40},[34,99774,869],{"class":63},[34,99776,807],{"class":40},[34,99778,99779],{"class":36,"line":60},[34,99780,99781],{"class":205},"#二维数组转置\n",[34,99783,99784],{"class":36,"line":76},[34,99785,99786],{"class":205},"#调用transpose()函数\n",[34,99788,99789],{"class":36,"line":93},[34,99790,99791],{"class":40},"a.transpose()\n",[34,99793,99794],{"class":36,"line":99},[34,99795,99796],{"class":205},"#对于二维数组也可以采用.T来实现\n",[34,99798,99799,99802],{"class":36,"line":353},[34,99800,99801],{"class":40},"a.T",[34,99803,99804],{"class":205},"#与上述代码一样\n",[34,99806,99807],{"class":36,"line":359},[34,99808,94194],{"class":205},[34,99810,99811],{"class":36,"line":579},[34,99812,94558],{"class":156},[34,99814,99815],{"class":36,"line":589},[34,99816,99817],{"class":156},"array([[ 1,  4,  7, 10],\n",[34,99819,99820],{"class":36,"line":601},[34,99821,99822],{"class":156},"       [ 2,  5,  8, 11],\n",[34,99824,99825],{"class":36,"line":613},[34,99826,99827],{"class":156},"       [ 3,  6,  9, 12]])\n",[34,99829,99830],{"class":36,"line":618},[34,99831,94558],{"class":156},[108,99833,99834],{},"也可以使用np.transpose()的形式",[108,99836,99837],{},"#多维数组进行转置 np.transpose()",[108,99839,99840],{},"#对二维数组也可以使用np.transpose()进行转置",[108,99842,99843],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[108,99845,99846],{},"第二个参数，维度可以理解为用axis中的数来理解",[108,99848,99849],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[108,99851,99852],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[108,99854,99855],{},"四维及以上的数组也是一样的道理",[24,99857,99859],{"className":31029,"code":99858,"language":31031,"meta":29,"style":29},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[31,99860,99861,99889,99894,99899,99904,99922,99927,99959,99964,99969,99974,99995],{"__ignoreMap":29},[34,99862,99863,99865,99867,99869,99871,99873,99875,99877,99879,99881,99883,99885,99887],{"class":36,"line":37},[34,99864,1614],{"class":40},[34,99866,153],{"class":87},[34,99868,93632],{"class":40},[34,99870,1013],{"class":63},[34,99872,1173],{"class":40},[34,99874,1120],{"class":63},[34,99876,93637],{"class":40},[34,99878,869],{"class":63},[34,99880,1173],{"class":40},[34,99882,1139],{"class":63},[34,99884,1173],{"class":40},[34,99886,875],{"class":63},[34,99888,807],{"class":40},[34,99890,99891],{"class":36,"line":51},[34,99892,99893],{"class":40},"x.shape\n",[34,99895,99896],{"class":36,"line":60},[34,99897,99898],{"class":205},"#结果：（3,6,2）\n",[34,99900,99901],{"class":36,"line":76},[34,99902,99903],{"class":205},"#使用np.transpose()进行转置 变为(2,6,3)\n",[34,99905,99906,99909,99911,99913,99915,99917,99919],{"class":36,"line":93},[34,99907,99908],{"class":40},"np.transpose(x,(",[34,99910,875],{"class":63},[34,99912,1173],{"class":40},[34,99914,1013],{"class":63},[34,99916,1173],{"class":40},[34,99918,987],{"class":63},[34,99920,99921],{"class":40},")).shape\n",[34,99923,99924],{"class":36,"line":99},[34,99925,99926],{"class":205},"#结果：(2,6,3)\n",[34,99928,99929,99931,99933,99935,99937,99939,99941,99943,99945,99947,99949,99951,99953,99955,99957],{"class":36,"line":353},[34,99930,99136],{"class":40},[34,99932,153],{"class":87},[34,99934,93632],{"class":40},[34,99936,1013],{"class":63},[34,99938,1173],{"class":40},[34,99940,1120],{"class":63},[34,99942,93637],{"class":40},[34,99944,869],{"class":63},[34,99946,1173],{"class":40},[34,99948,875],{"class":63},[34,99950,1173],{"class":40},[34,99952,1013],{"class":63},[34,99954,1173],{"class":40},[34,99956,1139],{"class":63},[34,99958,807],{"class":40},[34,99960,99961],{"class":36,"line":359},[34,99962,99963],{"class":40},"aaaa.shape\n",[34,99965,99966],{"class":36,"line":579},[34,99967,99968],{"class":205},"#结果：（3，2，1，6）\n",[34,99970,99971],{"class":36,"line":589},[34,99972,99973],{"class":205},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[34,99975,99976,99979,99981,99983,99985,99987,99989,99991,99993],{"class":36,"line":601},[34,99977,99978],{"class":40},"np.transpose(aaaa,(",[34,99980,1013],{"class":63},[34,99982,1173],{"class":40},[34,99984,875],{"class":63},[34,99986,1173],{"class":40},[34,99988,987],{"class":63},[34,99990,1173],{"class":40},[34,99992,869],{"class":63},[34,99994,99921],{"class":40},[34,99996,99997],{"class":36,"line":613},[34,99998,99999],{"class":205},"#结果：(2,1,3,6)\n",[45,100001,100002],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":100004},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99729,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100011,"title":100012,"body":100013,"description":723,"extension":724,"meta":100747,"navigation":726,"path":100748,"seo":100749,"stem":100750,"__hash__":100751},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100014,"toc":100745},[100015,100018,100021,100024,100027,100030,100033,100036,100039,100148,100151,100154,100742],[10,100016,100012],{"id":100017},"_8数组分割",[108,100019,100020],{},"split分割",[108,100022,100023],{},"numpy.split(ary,indics_or_sections,axis)",[108,100025,100026],{},"解释：",[108,100028,100029],{},"ary:被分割的数组",[108,100031,100032],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[108,100034,100035],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[108,100037,100038],{},"①一维数组的分割",[24,100040,100042],{"className":31029,"code":100041,"language":31031,"meta":29,"style":29},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[31,100043,100044,100060,100065,100074,100078,100083,100091,100095,100100,100105,100118,100122,100127,100139,100143],{"__ignoreMap":29},[34,100045,100046,100048,100050,100052,100054,100056,100058],{"class":36,"line":37},[34,100047,520],{"class":40},[34,100049,153],{"class":87},[34,100051,93632],{"class":40},[34,100053,1013],{"class":63},[34,100055,1173],{"class":40},[34,100057,1215],{"class":63},[34,100059,807],{"class":40},[34,100061,100062],{"class":36,"line":51},[34,100063,100064],{"class":205},"#如果传入整数，必须能够平分，否则会报错\n",[34,100066,100067,100070,100072],{"class":36,"line":60},[34,100068,100069],{"class":40},"np.split(a,",[34,100071,875],{"class":63},[34,100073,807],{"class":40},[34,100075,100076],{"class":36,"line":76},[34,100077,94194],{"class":205},[34,100079,100080],{"class":36,"line":93},[34,100081,100082],{"class":205},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[34,100084,100085,100087,100089],{"class":36,"line":99},[34,100086,100069],{"class":40},[34,100088,1088],{"class":63},[34,100090,807],{"class":40},[34,100092,100093],{"class":36,"line":353},[34,100094,94194],{"class":205},[34,100096,100097],{"class":36,"line":359},[34,100098,100099],{"class":205},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[34,100101,100102],{"class":36,"line":579},[34,100103,100104],{"class":205},"#传入数组\n",[34,100106,100107,100110,100112,100114,100116],{"class":36,"line":589},[34,100108,100109],{"class":40},"np.split(a,[",[34,100111,869],{"class":63},[34,100113,1173],{"class":40},[34,100115,1114],{"class":63},[34,100117,5310],{"class":40},[34,100119,100120],{"class":36,"line":601},[34,100121,94194],{"class":205},[34,100123,100124],{"class":36,"line":613},[34,100125,100126],{"class":205},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[34,100128,100129,100131,100133,100135,100137],{"class":36,"line":618},[34,100130,100109],{"class":40},[34,100132,1114],{"class":63},[34,100134,1173],{"class":40},[34,100136,1164],{"class":63},[34,100138,5310],{"class":40},[34,100140,100141],{"class":36,"line":628},[34,100142,94194],{"class":205},[34,100144,100145],{"class":36,"line":640},[34,100146,100147],{"class":205},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[108,100149,100150],{},"②二维数组的分割",[108,100152,100153],{},"使用split()",[24,100155,100157],{"className":31029,"code":100156,"language":31031,"meta":29,"style":29},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[31,100158,100159,100164,100188,100193,100202,100206,100210,100215,100220,100225,100230,100235,100240,100245,100249,100262,100266,100270,100274,100278,100282,100287,100292,100297,100301,100306,100322,100326,100330,100335,100340,100345,100350,100355,100360,100365,100370,100375,100380,100385,100390,100395,100400,100405,100410,100415,100420,100424,100428,100448,100452,100456,100461,100466,100471,100476,100481,100486,100491,100496,100501,100506,100511,100516,100521,100526,100531,100536,100541,100546,100550,100555,100564,100568,100572,100576,100580,100584,100588,100592,100596,100600,100609,100613,100617,100621,100625,100629,100633,100637,100641,100645,100649,100653,100657,100661,100665,100669,100673,100677,100681,100685,100689,100693,100706,100710,100714,100718,100722,100726,100730,100734,100738],{"__ignoreMap":29},[34,100160,100161],{"class":36,"line":37},[34,100162,100163],{"class":205},"#二维数组分割\n",[34,100165,100166,100168,100170,100172,100174,100176,100178,100180,100182,100184,100186],{"class":36,"line":51},[34,100167,93936],{"class":40},[34,100169,153],{"class":87},[34,100171,93632],{"class":40},[34,100173,1013],{"class":63},[34,100175,1173],{"class":40},[34,100177,1120],{"class":63},[34,100179,93637],{"class":40},[34,100181,1139],{"class":63},[34,100183,1173],{"class":40},[34,100185,1139],{"class":63},[34,100187,807],{"class":40},[34,100189,100190],{"class":36,"line":60},[34,100191,100192],{"class":205},"#默认axis=0  传入整数平均分,按行来的\n",[34,100194,100195,100198,100200],{"class":36,"line":76},[34,100196,100197],{"class":40},"np.split(aa,",[34,100199,869],{"class":63},[34,100201,807],{"class":40},[34,100203,100204],{"class":36,"line":93},[34,100205,96394],{"class":205},[34,100207,100208],{"class":36,"line":99},[34,100209,94558],{"class":156},[34,100211,100212],{"class":36,"line":353},[34,100213,100214],{"class":156},"[array([[ 1,  2,  3,  4,  5,  6],\n",[34,100216,100217],{"class":36,"line":359},[34,100218,100219],{"class":156},"        [ 7,  8,  9, 10, 11, 12]]),\n",[34,100221,100222],{"class":36,"line":579},[34,100223,100224],{"class":156}," array([[13, 14, 15, 16, 17, 18],\n",[34,100226,100227],{"class":36,"line":589},[34,100228,100229],{"class":156},"        [19, 20, 21, 22, 23, 24]]),\n",[34,100231,100232],{"class":36,"line":601},[34,100233,100234],{"class":156}," array([[25, 26, 27, 28, 29, 30],\n",[34,100236,100237],{"class":36,"line":613},[34,100238,100239],{"class":156},"        [31, 32, 33, 34, 35, 36]])]\n",[34,100241,100242],{"class":36,"line":618},[34,100243,100244],{"class":156}," '''\n",[34,100246,100247],{"class":36,"line":628},[34,100248,100104],{"class":205},[34,100250,100251,100254,100256,100258,100260],{"class":36,"line":640},[34,100252,100253],{"class":40},"np.split(aa,[",[34,100255,875],{"class":63},[34,100257,1173],{"class":40},[34,100259,1114],{"class":63},[34,100261,5310],{"class":40},[34,100263,100264],{"class":36,"line":2301},[34,100265,96394],{"class":205},[34,100267,100268],{"class":36,"line":2307},[34,100269,94558],{"class":156},[34,100271,100272],{"class":36,"line":2328},[34,100273,100214],{"class":156},[34,100275,100276],{"class":36,"line":2333},[34,100277,100219],{"class":156},[34,100279,100280],{"class":36,"line":2347},[34,100281,100224],{"class":156},[34,100283,100284],{"class":36,"line":2352},[34,100285,100286],{"class":156},"        [19, 20, 21, 22, 23, 24],\n",[34,100288,100289],{"class":36,"line":2381},[34,100290,100291],{"class":156},"        [25, 26, 27, 28, 29, 30]]),\n",[34,100293,100294],{"class":36,"line":2386},[34,100295,100296],{"class":156}," array([[31, 32, 33, 34, 35, 36]])]\n",[34,100298,100299],{"class":36,"line":2403},[34,100300,94558],{"class":156},[34,100302,100303],{"class":36,"line":2408},[34,100304,100305],{"class":205},"#axis=1 按照列来分\n",[34,100307,100308,100310,100312,100314,100316,100318,100320],{"class":36,"line":2413},[34,100309,100197],{"class":40},[34,100311,869],{"class":63},[34,100313,1173],{"class":40},[34,100315,48165],{"class":5869},[34,100317,153],{"class":87},[34,100319,1013],{"class":63},[34,100321,807],{"class":40},[34,100323,100324],{"class":36,"line":2418},[34,100325,96394],{"class":205},[34,100327,100328],{"class":36,"line":2432},[34,100329,94558],{"class":156},[34,100331,100332],{"class":36,"line":2437},[34,100333,100334],{"class":156},"[array([[ 1,  2],\n",[34,100336,100337],{"class":36,"line":3230},[34,100338,100339],{"class":156},"        [ 7,  8],\n",[34,100341,100342],{"class":36,"line":3244},[34,100343,100344],{"class":156},"        [13, 14],\n",[34,100346,100347],{"class":36,"line":3252},[34,100348,100349],{"class":156},"        [19, 20],\n",[34,100351,100352],{"class":36,"line":3257},[34,100353,100354],{"class":156},"        [25, 26],\n",[34,100356,100357],{"class":36,"line":3263},[34,100358,100359],{"class":156},"        [31, 32]]),\n",[34,100361,100362],{"class":36,"line":3269},[34,100363,100364],{"class":156}," array([[ 3,  4],\n",[34,100366,100367],{"class":36,"line":3274},[34,100368,100369],{"class":156},"        [ 9, 10],\n",[34,100371,100372],{"class":36,"line":8601},[34,100373,100374],{"class":156},"        [15, 16],\n",[34,100376,100377],{"class":36,"line":8625},[34,100378,100379],{"class":156},"        [21, 22],\n",[34,100381,100382],{"class":36,"line":8630},[34,100383,100384],{"class":156},"        [27, 28],\n",[34,100386,100387],{"class":36,"line":8636},[34,100388,100389],{"class":156},"        [33, 34]]),\n",[34,100391,100392],{"class":36,"line":8663},[34,100393,100394],{"class":156}," array([[ 5,  6],\n",[34,100396,100397],{"class":36,"line":8668},[34,100398,100399],{"class":156},"        [11, 12],\n",[34,100401,100402],{"class":36,"line":8674},[34,100403,100404],{"class":156},"        [17, 18],\n",[34,100406,100407],{"class":36,"line":8686},[34,100408,100409],{"class":156},"        [23, 24],\n",[34,100411,100412],{"class":36,"line":8698},[34,100413,100414],{"class":156},"        [29, 30],\n",[34,100416,100417],{"class":36,"line":8710},[34,100418,100419],{"class":156},"        [35, 36]])]\n",[34,100421,100422],{"class":36,"line":10369},[34,100423,100244],{"class":156},[34,100425,100426],{"class":36,"line":10394},[34,100427,100104],{"class":205},[34,100429,100430,100432,100434,100436,100438,100440,100442,100444,100446],{"class":36,"line":10417},[34,100431,100253],{"class":40},[34,100433,1013],{"class":63},[34,100435,1173],{"class":40},[34,100437,875],{"class":63},[34,100439,42260],{"class":40},[34,100441,48165],{"class":5869},[34,100443,153],{"class":87},[34,100445,1013],{"class":63},[34,100447,807],{"class":40},[34,100449,100450],{"class":36,"line":10441},[34,100451,94194],{"class":205},[34,100453,100454],{"class":36,"line":10446},[34,100455,94558],{"class":156},[34,100457,100458],{"class":36,"line":10451},[34,100459,100460],{"class":156},"[array([[ 1],\n",[34,100462,100463],{"class":36,"line":10456},[34,100464,100465],{"class":156},"        [ 7],\n",[34,100467,100468],{"class":36,"line":10465},[34,100469,100470],{"class":156},"        [13],\n",[34,100472,100473],{"class":36,"line":10470},[34,100474,100475],{"class":156},"        [19],\n",[34,100477,100478],{"class":36,"line":10476},[34,100479,100480],{"class":156},"        [25],\n",[34,100482,100483],{"class":36,"line":10497},[34,100484,100485],{"class":156},"        [31]]),\n",[34,100487,100488],{"class":36,"line":10503},[34,100489,100490],{"class":156}," array([[ 2],\n",[34,100492,100493],{"class":36,"line":10517},[34,100494,100495],{"class":156},"        [ 8],\n",[34,100497,100498],{"class":36,"line":10523},[34,100499,100500],{"class":156},"        [14],\n",[34,100502,100503],{"class":36,"line":10550},[34,100504,100505],{"class":156},"        [20],\n",[34,100507,100508],{"class":36,"line":10559},[34,100509,100510],{"class":156},"        [26],\n",[34,100512,100513],{"class":36,"line":10565},[34,100514,100515],{"class":156},"        [32]]),\n",[34,100517,100518],{"class":36,"line":10573},[34,100519,100520],{"class":156}," array([[ 3,  4,  5,  6],\n",[34,100522,100523],{"class":36,"line":10578},[34,100524,100525],{"class":156},"        [ 9, 10, 11, 12],\n",[34,100527,100528],{"class":36,"line":17256},[34,100529,100530],{"class":156},"        [15, 16, 17, 18],\n",[34,100532,100533],{"class":36,"line":17262},[34,100534,100535],{"class":156},"        [21, 22, 23, 24],\n",[34,100537,100538],{"class":36,"line":17285},[34,100539,100540],{"class":156},"        [27, 28, 29, 30],\n",[34,100542,100543],{"class":36,"line":17291},[34,100544,100545],{"class":156},"        [33, 34, 35, 36]])]\n",[34,100547,100548],{"class":36,"line":17314},[34,100549,94558],{"class":156},[34,100551,100552],{"class":36,"line":17328},[34,100553,100554],{"class":205},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[34,100556,100557,100560,100562],{"class":36,"line":17348},[34,100558,100559],{"class":40},"np.vsplit(aa,",[34,100561,869],{"class":63},[34,100563,807],{"class":40},[34,100565,100566],{"class":36,"line":17354},[34,100567,94194],{"class":205},[34,100569,100570],{"class":36,"line":17365},[34,100571,94558],{"class":156},[34,100573,100574],{"class":36,"line":17388},[34,100575,100214],{"class":156},[34,100577,100578],{"class":36,"line":17410},[34,100579,100219],{"class":156},[34,100581,100582],{"class":36,"line":17415},[34,100583,100224],{"class":156},[34,100585,100586],{"class":36,"line":17421},[34,100587,100229],{"class":156},[34,100589,100590],{"class":36,"line":17435},[34,100591,100234],{"class":156},[34,100593,100594],{"class":36,"line":17448},[34,100595,100239],{"class":156},[34,100597,100598],{"class":36,"line":17453},[34,100599,94558],{"class":156},[34,100601,100602,100605,100607],{"class":36,"line":17467},[34,100603,100604],{"class":40},"np.hsplit(aa,",[34,100606,869],{"class":63},[34,100608,807],{"class":40},[34,100610,100611],{"class":36,"line":17472},[34,100612,94194],{"class":205},[34,100614,100615],{"class":36,"line":17478},[34,100616,94558],{"class":156},[34,100618,100619],{"class":36,"line":17483},[34,100620,100334],{"class":156},[34,100622,100623],{"class":36,"line":17497},[34,100624,100339],{"class":156},[34,100626,100627],{"class":36,"line":17502},[34,100628,100344],{"class":156},[34,100630,100631],{"class":36,"line":17507},[34,100632,100349],{"class":156},[34,100634,100635],{"class":36,"line":17521},[34,100636,100354],{"class":156},[34,100638,100639],{"class":36,"line":17533},[34,100640,100359],{"class":156},[34,100642,100643],{"class":36,"line":17538},[34,100644,100364],{"class":156},[34,100646,100647],{"class":36,"line":17551},[34,100648,100369],{"class":156},[34,100650,100651],{"class":36,"line":17556},[34,100652,100374],{"class":156},[34,100654,100655],{"class":36,"line":17561},[34,100656,100379],{"class":156},[34,100658,100659],{"class":36,"line":17566},[34,100660,100384],{"class":156},[34,100662,100663],{"class":36,"line":17579},[34,100664,100389],{"class":156},[34,100666,100667],{"class":36,"line":17584},[34,100668,100394],{"class":156},[34,100670,100671],{"class":36,"line":33284},[34,100672,100399],{"class":156},[34,100674,100675],{"class":36,"line":33290},[34,100676,100404],{"class":156},[34,100678,100679],{"class":36,"line":33296},[34,100680,100409],{"class":156},[34,100682,100683],{"class":36,"line":33302},[34,100684,100414],{"class":156},[34,100686,100687],{"class":36,"line":33308},[34,100688,100419],{"class":156},[34,100690,100691],{"class":36,"line":33319},[34,100692,94558],{"class":156},[34,100694,100695,100698,100700,100702,100704],{"class":36,"line":33325},[34,100696,100697],{"class":40},"np.vsplit(aa,[",[34,100699,875],{"class":63},[34,100701,1173],{"class":40},[34,100703,1114],{"class":63},[34,100705,5310],{"class":40},[34,100707,100708],{"class":36,"line":33345},[34,100709,94194],{"class":205},[34,100711,100712],{"class":36,"line":33351},[34,100713,94558],{"class":156},[34,100715,100716],{"class":36,"line":33362},[34,100717,100214],{"class":156},[34,100719,100720],{"class":36,"line":33368},[34,100721,100219],{"class":156},[34,100723,100724],{"class":36,"line":33374},[34,100725,100224],{"class":156},[34,100727,100728],{"class":36,"line":33380},[34,100729,100286],{"class":156},[34,100731,100732],{"class":36,"line":33386},[34,100733,100291],{"class":156},[34,100735,100736],{"class":36,"line":33392},[34,100737,100296],{"class":156},[34,100739,100740],{"class":36,"line":33398},[34,100741,100244],{"class":156},[45,100743,100744],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":100746},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100012,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100753,"title":100754,"body":100755,"description":723,"extension":724,"meta":101249,"navigation":726,"path":101250,"seo":101251,"stem":101252,"__hash__":101253},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100756,"toc":101240},[100757,100760,100763,100788,100792,100851,100903,100907,100909,100945,100999,101001,101039,101110,101114,101119,101123,101126,101159,101162,101166,101169,101172,101175,101178,101183,101187,101190,101193,101196,101199,101204,101208,101213,101216,101237],[10,100758,100754],{"id":100759},"_9数学函数",[108,100761,100762],{},"补充回顾：python的列表推导式",[24,100764,100766],{"className":31029,"code":100765,"language":31031,"meta":29,"style":29},"[1\u002Fi for i in a]\n",[31,100767,100768],{"__ignoreMap":29},[34,100769,100770,100772,100774,100776,100779,100781,100783,100785],{"class":36,"line":37},[34,100771,1684],{"class":40},[34,100773,1013],{"class":63},[34,100775,1379],{"class":87},[34,100777,100778],{"class":40},"i ",[34,100780,3678],{"class":87},[34,100782,10091],{"class":40},[34,100784,26695],{"class":87},[34,100786,100787],{"class":40}," a]\n",[14,100789,100791],{"id":100790},"_91-求倒数","9.1 求倒数",[24,100793,100795],{"className":31029,"code":100794,"language":31031,"meta":29,"style":29},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[31,100796,100797,100802,100830,100842],{"__ignoreMap":29},[34,100798,100799],{"class":36,"line":37},[34,100800,100801],{"class":205},"#数组求倒数\n",[34,100803,100804,100806,100808,100810,100812,100814,100816,100818,100820,100822,100824,100826,100828],{"class":36,"line":51},[34,100805,520],{"class":40},[34,100807,153],{"class":87},[34,100809,1684],{"class":40},[34,100811,1013],{"class":63},[34,100813,1173],{"class":40},[34,100815,875],{"class":63},[34,100817,1173],{"class":40},[34,100819,869],{"class":63},[34,100821,1173],{"class":40},[34,100823,1088],{"class":63},[34,100825,1173],{"class":40},[34,100827,1114],{"class":63},[34,100829,33897],{"class":40},[34,100831,100832,100834,100836,100839],{"class":36,"line":60},[34,100833,1058],{"class":40},[34,100835,153],{"class":87},[34,100837,100838],{"class":40},"np.array(a)",[34,100840,100841],{"class":205},"#将列表转换为数组\n",[34,100843,100844,100846,100848],{"class":36,"line":76},[34,100845,1013],{"class":63},[34,100847,1379],{"class":87},[34,100849,100850],{"class":40},"b\n",[24,100852,100854],{"className":31029,"code":100853,"language":31031,"meta":29,"style":29},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[31,100855,100856,100884,100893,100898],{"__ignoreMap":29},[34,100857,100858,100860,100862,100864,100866,100868,100870,100872,100874,100876,100878,100880,100882],{"class":36,"line":37},[34,100859,520],{"class":40},[34,100861,153],{"class":87},[34,100863,1684],{"class":40},[34,100865,1013],{"class":63},[34,100867,1173],{"class":40},[34,100869,875],{"class":63},[34,100871,1173],{"class":40},[34,100873,869],{"class":63},[34,100875,1173],{"class":40},[34,100877,1088],{"class":63},[34,100879,1173],{"class":40},[34,100881,1114],{"class":63},[34,100883,33897],{"class":40},[34,100885,100886,100888,100890],{"class":36,"line":51},[34,100887,1058],{"class":40},[34,100889,153],{"class":87},[34,100891,100892],{"class":40},"np.array(a)\n",[34,100894,100895],{"class":36,"line":60},[34,100896,100897],{"class":205},"#调用numpy中的函数reciprocal()\n",[34,100899,100900],{"class":36,"line":76},[34,100901,100902],{"class":40},"np.reciprocal(b)\n",[14,100904,100906],{"id":100905},"_92-求平方","9.2 求平方",[108,100908,95160],{},[24,100910,100912],{"className":31029,"code":100911,"language":31031,"meta":29,"style":29},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[31,100913,100914,100919,100924,100940],{"__ignoreMap":29},[34,100915,100916],{"class":36,"line":37},[34,100917,100918],{"class":205},"#square()，求平方\n",[34,100920,100921],{"class":36,"line":51},[34,100922,100923],{"class":205},"#一维数组\n",[34,100925,100926,100928,100930,100932,100934,100936,100938],{"class":36,"line":60},[34,100927,520],{"class":40},[34,100929,153],{"class":87},[34,100931,93632],{"class":40},[34,100933,1013],{"class":63},[34,100935,1173],{"class":40},[34,100937,1241],{"class":63},[34,100939,807],{"class":40},[34,100941,100942],{"class":36,"line":76},[34,100943,100944],{"class":40},"np.square(a)\n",[24,100946,100948],{"className":31029,"code":100947,"language":31031,"meta":29,"style":29},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[31,100949,100950,100955,100960,100981],{"__ignoreMap":29},[34,100951,100952],{"class":36,"line":37},[34,100953,100954],{"class":205},"#或者通过循环遍历的形式来计算\n",[34,100956,100957],{"class":36,"line":51},[34,100958,100959],{"class":205},"#这是一个列表\n",[34,100961,100962,100965,100967,100969,100971,100973,100975,100978],{"class":36,"line":60},[34,100963,100964],{"class":40},"[i",[34,100966,1250],{"class":87},[34,100968,100778],{"class":40},[34,100970,3678],{"class":87},[34,100972,10091],{"class":40},[34,100974,26695],{"class":87},[34,100976,100977],{"class":40}," a]",[34,100979,100980],{"class":205},"#这个求完之后在数列当中\n",[34,100982,100983,100986,100988,100990,100992,100994,100996],{"class":36,"line":76},[34,100984,100985],{"class":40},"np.array([i",[34,100987,1250],{"class":87},[34,100989,100778],{"class":40},[34,100991,3678],{"class":87},[34,100993,10091],{"class":40},[34,100995,26695],{"class":87},[34,100997,100998],{"class":40}," a])\n",[108,101000,93921],{},[24,101002,101004],{"className":31029,"code":101003,"language":31031,"meta":29,"style":29},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[31,101005,101006,101010,101034],{"__ignoreMap":29},[34,101007,101008],{"class":36,"line":37},[34,101009,93931],{"class":205},[34,101011,101012,101014,101016,101018,101020,101022,101024,101026,101028,101030,101032],{"class":36,"line":51},[34,101013,93936],{"class":40},[34,101015,153],{"class":87},[34,101017,93632],{"class":40},[34,101019,1013],{"class":63},[34,101021,1173],{"class":40},[34,101023,1318],{"class":63},[34,101025,93637],{"class":40},[34,101027,1088],{"class":63},[34,101029,1173],{"class":40},[34,101031,869],{"class":63},[34,101033,807],{"class":40},[34,101035,101036],{"class":36,"line":60},[34,101037,101038],{"class":40},"np.square(aa)\n",[24,101040,101042],{"className":31029,"code":101041,"language":31031,"meta":29,"style":29},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[31,101043,101044,101049,101058,101074,101090,101105],{"__ignoreMap":29},[34,101045,101046],{"class":36,"line":37},[34,101047,101048],{"class":205},"#传统的方式\n",[34,101050,101051,101053,101055],{"class":36,"line":51},[34,101052,98817],{"class":40},[34,101054,153],{"class":87},[34,101056,101057],{"class":40},"np.empty_like(aa)\n",[34,101059,101060,101062,101064,101066,101068,101070,101072],{"class":36,"line":60},[34,101061,3678],{"class":87},[34,101063,10091],{"class":40},[34,101065,26695],{"class":87},[34,101067,33094],{"class":63},[34,101069,801],{"class":40},[34,101071,1088],{"class":63},[34,101073,31437],{"class":40},[34,101075,101076,101078,101080,101082,101084,101086,101088],{"class":36,"line":76},[34,101077,3854],{"class":87},[34,101079,10153],{"class":40},[34,101081,26695],{"class":87},[34,101083,33094],{"class":63},[34,101085,801],{"class":40},[34,101087,869],{"class":63},[34,101089,31437],{"class":40},[34,101091,101092,101095,101097,101100,101102],{"class":36,"line":93},[34,101093,101094],{"class":40},"        bb[i,j]",[34,101096,153],{"class":87},[34,101098,101099],{"class":40},"aa[i,j]",[34,101101,1250],{"class":87},[34,101103,101104],{"class":40},"aa[i,j]\n",[34,101106,101107],{"class":36,"line":99},[34,101108,101109],{"class":40},"bb\n",[14,101111,101113],{"id":101112},"_93-求各元素的符号","9.3 求各元素的符号",[108,101115,101116],{},[2122,101117],{"alt":29,"src":101118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101120,101122],{"id":101121},"_94-modf函数","9.4 modf函数",[108,101124,101125],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[24,101127,101129],{"className":31029,"code":101128,"language":31031,"meta":29,"style":29},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[31,101130,101131,101154],{"__ignoreMap":29},[34,101132,101133,101135,101137,101139,101141,101143,101145,101147,101149,101152],{"class":36,"line":37},[34,101134,520],{"class":40},[34,101136,153],{"class":87},[34,101138,93632],{"class":40},[34,101140,1327],{"class":87},[34,101142,1241],{"class":63},[34,101144,1173],{"class":40},[34,101146,1241],{"class":63},[34,101148,1173],{"class":40},[34,101150,101151],{"class":63},"0.3",[34,101153,807],{"class":40},[34,101155,101156],{"class":36,"line":51},[34,101157,101158],{"class":40},"np.modf(a)\n",[108,101160,101161],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101163,101165],{"id":101164},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[108,101167,101168],{},"np.cell()",[108,101170,101171],{},"np.floor()",[108,101173,101174],{},"np.rint()",[108,101176,101177],{},"对各元素分别向上取整、向下取整、四舍五入",[108,101179,101180],{},[2122,101181],{"alt":29,"src":101182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101184,101186],{"id":101185},"_96-around函数","9.6 around()函数",[108,101188,101189],{},"around()函数也可以实现对数的小数位数进行操作",[108,101191,101192],{},"其中的参数：",[108,101194,101195],{},"1.要传的数组",[108,101197,101198],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[108,101200,101201],{},[2122,101202],{"alt":29,"src":101203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101205,101207],{"id":101206},"_97-三角函数","9.7 三角函数",[108,101209,101210],{},[2122,101211],{"alt":29,"src":101212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[108,101214,101215],{},"引入图像模块非常重要",[24,101217,101219],{"className":31029,"code":101218,"language":31031,"meta":29,"style":29},"from matplotlib import pyplot as plt\n",[31,101220,101221],{"__ignoreMap":29},[34,101222,101223,101225,101228,101230,101233,101235],{"class":36,"line":37},[34,101224,31388],{"class":87},[34,101226,101227],{"class":40}," matplotlib ",[34,101229,31043],{"class":87},[34,101231,101232],{"class":40}," pyplot ",[34,101234,32034],{"class":87},[34,101236,32088],{"class":40},[45,101238,101239],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":101241},[101242,101243,101244,101245,101246,101247,101248],{"id":100790,"depth":51,"text":100791},{"id":100905,"depth":51,"text":100906},{"id":101112,"depth":51,"text":101113},{"id":101121,"depth":51,"text":101122},{"id":101164,"depth":51,"text":101165},{"id":101185,"depth":51,"text":101186},{"id":101206,"depth":51,"text":101207},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100754,"description":723},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101255,"title":101256,"body":101257,"description":723,"extension":724,"meta":101261,"navigation":726,"path":101262,"seo":101263,"stem":101264,"__hash__":101265},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101258,"toc":101259},[],{"title":29,"searchDepth":51,"depth":51,"links":101260},[],{"category":51071},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101256,"description":723},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101267,"title":101268,"body":101269,"description":29,"extension":724,"meta":103277,"navigation":726,"path":103278,"seo":103279,"stem":103280,"__hash__":103281},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101270,"toc":103253},[101271,101274,101278,101281,101284,101290,101293,101316,101319,101353,101356,101397,101401,101404,101497,101500,101544,101547,101564,101567,101581,101584,101587,101632,101635,101672,101676,101679,101685,101690,101710,101714,101717,101783,101786,101804,101808,101811,101840,101850,101856,101860,101863,101869,101880,101884,101887,101917,101920,102200,102203,102206,102217,102220,102223,102245,102252,102255,102273,102276,102279,102293,102301,102304,102330,102336,102339,102342,102352,102364,102384,102393,102413,102423,102447,102460,102474,102479,102520,102537,102562,102574,102594,102600,102645,102664,102681,102694,102710,102717,102729,102738,102773,102794,102819,102832,102856,102871,102896,102899,102920,102929,102932,102943,102947,102950,102956,102968,102975,102979,102982,102994,102997,103011,103014,103024,103034,103037,103077,103080,103084,103090,103093,103107,103111,103114,103147,103151,103154,103177,103185,103188,103194,103200,103203,103206,103234,103238,103241,103247,103250],[10,101272,101268],{"id":101273},"_1环境安装与第一个-mujoco-程序",[14,101275,101277],{"id":101276},"_1目标说明","1.目标说明",[108,101279,101280],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[108,101282,101283],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[24,101285,101288],{"className":101286,"code":101287,"language":5840,"meta":29},[5838],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[31,101289,101287],{"__ignoreMap":29},[108,101291,101292],{},"需要掌握:",[752,101294,101295,101298,101301,101306,101311],{},[755,101296,101297],{},"Fedora 44 下 MuJoCo 的系统依赖",[755,101299,101300],{},"Python 虚拟环境创建",[755,101302,101303],{},[31,101304,101305],{},"mujoco.MjModel",[755,101307,101308],{},[31,101309,101310],{},"mujoco.MjData",[755,101312,101313],{},[31,101314,101315],{},"mujoco.mj_step(model, data)",[108,101317,101318],{},"MuJoCo 中最重要的两个对象:",[934,101320,101321,101331],{},[937,101322,101323],{},[940,101324,101325,101328],{},[943,101326,101327],{"align":24388},"对象",[943,101329,101330],{"align":24388},"含义",[980,101332,101333,101343],{},[940,101334,101335,101340],{},[985,101336,101337],{"align":24388},[31,101338,101339],{},"MjModel",[985,101341,101342],{"align":24388},"模型结构，来自 XML，基本不随时间变化",[940,101344,101345,101350],{},[985,101346,101347],{"align":24388},[31,101348,101349],{},"MjData",[985,101351,101352],{"align":24388},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[108,101354,101355],{},"可以先用一个类比理解：",[934,101357,101358,101368],{},[937,101359,101360],{},[940,101361,101362,101365],{},[943,101363,101364],{"align":24388},"类比",[943,101366,101367],{"align":24388},"MuJoCo 对象",[980,101369,101370,101379,101388],{},[940,101371,101372,101375],{},[985,101373,101374],{"align":24388},"游戏地图和角色配置",[985,101376,101377],{"align":24388},[31,101378,101339],{},[940,101380,101381,101384],{},[985,101382,101383],{"align":24388},"游戏运行到当前帧的状态",[985,101385,101386],{"align":24388},[31,101387,101349],{},[940,101389,101390,101393],{},[985,101391,101392],{"align":24388},"前进一帧",[985,101394,101395],{"align":24388},[31,101396,101315],{},[14,101398,101400],{"id":101399},"_2环境与依赖安装","2.环境与依赖安装",[108,101402,101403],{},"Fedora 44 系统依赖:",[24,101405,101407],{"className":24474,"code":101406,"language":24476,"meta":29,"style":29},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[31,101408,101409,101421,101434,101447,101457,101467,101486],{"__ignoreMap":29},[34,101410,101411,101413,101415,101417,101419],{"class":36,"line":37},[34,101412,25229],{"class":149},[34,101414,26967],{"class":156},[34,101416,24486],{"class":156},[34,101418,27052],{"class":63},[34,101420,25331],{"class":63},[34,101422,101423,101426,101429,101432],{"class":36,"line":51},[34,101424,101425],{"class":156},"  python3",[34,101427,101428],{"class":156}," python3-pip",[34,101430,101431],{"class":156}," python3-virtualenv",[34,101433,25331],{"class":63},[34,101435,101436,101439,101442,101445],{"class":36,"line":60},[34,101437,101438],{"class":156},"  mesa-libGL",[34,101440,101441],{"class":156}," mesa-libGLU",[34,101443,101444],{"class":156}," mesa-dri-drivers",[34,101446,25331],{"class":63},[34,101448,101449,101452,101455],{"class":36,"line":76},[34,101450,101451],{"class":156},"  libglvnd-glx",[34,101453,101454],{"class":156}," libglvnd-opengl",[34,101456,25331],{"class":63},[34,101458,101459,101462,101465],{"class":36,"line":93},[34,101460,101461],{"class":156},"  glfw",[34,101463,101464],{"class":156}," glfw-devel",[34,101466,25331],{"class":63},[34,101468,101469,101472,101475,101478,101481,101484],{"class":36,"line":99},[34,101470,101471],{"class":156},"  libX11",[34,101473,101474],{"class":156}," libXcursor",[34,101476,101477],{"class":156}," libXi",[34,101479,101480],{"class":156}," libXinerama",[34,101482,101483],{"class":156}," libXrandr",[34,101485,25331],{"class":63},[34,101487,101488,101491,101494],{"class":36,"line":353},[34,101489,101490],{"class":156},"  gcc",[34,101492,101493],{"class":156}," gcc-c++",[34,101495,101496],{"class":156}," make\n",[108,101498,101499],{},"创建 Python 环境:",[24,101501,101503],{"className":24474,"code":101502,"language":24476,"meta":29,"style":29},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[31,101504,101505,101519,101527],{"__ignoreMap":29},[34,101506,101507,101510,101513,101516],{"class":36,"line":37},[34,101508,101509],{"class":149},"python3",[34,101511,101512],{"class":63}," -m",[34,101514,101515],{"class":156}," venv",[34,101517,101518],{"class":156}," .venv\n",[34,101520,101521,101524],{"class":36,"line":51},[34,101522,101523],{"class":63},"source",[34,101525,101526],{"class":156}," .venv\u002Fbin\u002Factivate\n",[34,101528,101529,101531,101533,101536,101538,101541],{"class":36,"line":60},[34,101530,31031],{"class":149},[34,101532,101512],{"class":63},[34,101534,101535],{"class":156}," pip",[34,101537,24486],{"class":156},[34,101539,101540],{"class":63}," --upgrade",[34,101542,101543],{"class":156}," pip\n",[108,101545,101546],{},"pip 安装:",[24,101548,101550],{"className":24474,"code":101549,"language":24476,"meta":29,"style":29},"pip install \"mujoco>=2.3\" numpy\n",[31,101551,101552],{"__ignoreMap":29},[34,101553,101554,101556,101558,101561],{"class":36,"line":37},[34,101555,24483],{"class":149},[34,101557,24486],{"class":156},[34,101559,101560],{"class":156}," \"mujoco>=2.3\"",[34,101562,101563],{"class":156}," numpy\n",[108,101565,101566],{},"安装完成后，先做最小检查：",[24,101568,101570],{"className":24474,"code":101569,"language":24476,"meta":29,"style":29},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[31,101571,101572],{"__ignoreMap":29},[34,101573,101574,101576,101578],{"class":36,"line":37},[34,101575,31031],{"class":149},[34,101577,31009],{"class":63},[34,101579,101580],{"class":156}," \"import mujoco; print(mujoco.__version__)\"\n",[108,101582,101583],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[108,101585,101586],{},"conda 安装:",[24,101588,101590],{"className":24474,"code":101589,"language":24476,"meta":29,"style":29},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[31,101591,101592,101612,101622],{"__ignoreMap":29},[34,101593,101594,101596,101598,101600,101603,101606,101609],{"class":36,"line":37},[34,101595,30981],{"class":149},[34,101597,29827],{"class":156},[34,101599,25768],{"class":63},[34,101601,101602],{"class":156}," mujoco-study",[34,101604,101605],{"class":156}," python=",[34,101607,101608],{"class":63},"3.10",[34,101610,101611],{"class":63}," -y\n",[34,101613,101614,101616,101619],{"class":36,"line":51},[34,101615,30981],{"class":149},[34,101617,101618],{"class":156}," activate",[34,101620,101621],{"class":156}," mujoco-study\n",[34,101623,101624,101626,101628,101630],{"class":36,"line":60},[34,101625,24483],{"class":149},[34,101627,24486],{"class":156},[34,101629,101560],{"class":156},[34,101631,101563],{"class":156},[108,101633,101634],{},"版本冲突说明:",[752,101636,101637,101643,101653,101662],{},[755,101638,101639,101640,29036],{},"不要安装 ",[31,101641,101642],{},"mujoco-py",[755,101644,101645,101646,101648,101649,101652],{},"如果旧项目里同时安装了 ",[31,101647,101642],{}," 和 ",[31,101650,101651],{},"mujoco","，建议新建干净虚拟环境。",[755,101654,101655,101658,101659,29036],{},[31,101656,101657],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[31,101660,101661],{},"~\u002F.mujoco\u002Fmujoco210",[755,101663,101664,101665,83169,101668,101671],{},"离屏渲染可能涉及 OpenGL 后端，",[31,101666,101667],{},"MUJOCO_GL=egl",[31,101669,101670],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101673,101675],{"id":101674},"_3核心概念解释","3.核心概念解释",[108,101677,101678],{},"MuJoCo 的基本执行流程:",[24,101680,101683],{"className":101681,"code":101682,"language":5840,"meta":29},[5838],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[31,101684,101682],{"__ignoreMap":29},[108,101686,101687,101689],{},[31,101688,101339],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[108,101691,101692,101694,101695,1008,101698,1008,101701,1008,101704,1008,101707,29036],{},[31,101693,101349],{}," 存放仿真运行时状态，例如 ",[31,101696,101697],{},"data.time",[31,101699,101700],{},"data.qpos",[31,101702,101703],{},"data.qvel",[31,101705,101706],{},"data.ctrl",[31,101708,101709],{},"data.xpos",[19,101711,101713],{"id":101712},"xml-是什么","XML 是什么",[108,101715,101716],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[24,101718,101720],{"className":53713,"code":101719,"language":53715,"meta":29,"style":29},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[31,101721,101722,101744,101775],{"__ignoreMap":29},[34,101723,101724,101726,101728,101730,101732,101734,101737,101739,101742],{"class":36,"line":37},[34,101725,41],{"class":40},[34,101727,52446],{"class":44},[34,101729,15573],{"class":149},[34,101731,153],{"class":40},[34,101733,54137],{"class":156},[34,101735,101736],{"class":149}," pos",[34,101738,153],{"class":40},[34,101740,101741],{"class":156},"\"0 0 1\"",[34,101743,48],{"class":40},[34,101745,101746,101748,101751,101753,101755,101758,101760,101762,101764,101767,101769,101772],{"class":36,"line":51},[34,101747,52790],{"class":40},[34,101749,101750],{"class":44},"geom",[34,101752,15573],{"class":149},[34,101754,153],{"class":40},[34,101756,101757],{"class":156},"\"box_geom\"",[34,101759,54469],{"class":149},[34,101761,153],{"class":40},[34,101763,54137],{"class":156},[34,101765,101766],{"class":149}," size",[34,101768,153],{"class":40},[34,101770,101771],{"class":156},"\"0.1 0.1 0.1\"",[34,101773,101774],{"class":40},"\u002F>\n",[34,101776,101777,101779,101781],{"class":36,"line":60},[34,101778,102],{"class":40},[34,101780,52446],{"class":44},[34,101782,48],{"class":40},[108,101784,101785],{},"这段意思是：",[752,101787,101788,101794,101801],{},[755,101789,101790,101791,101793],{},"创建一个叫 ",[31,101792,54360],{}," 的刚体。",[755,101795,101796,101797,101800],{},"它初始放在 ",[31,101798,101799],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[755,101802,101803],{},"它里面有一个盒子形状的几何体。",[19,101805,101807],{"id":101806},"timestep-是什么","timestep 是什么",[108,101809,101810],{},"XML 里的：",[24,101812,101814],{"className":53713,"code":101813,"language":53715,"meta":29,"style":29},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[31,101815,101816],{"__ignoreMap":29},[34,101817,101818,101820,101822,101825,101827,101830,101833,101835,101838],{"class":36,"line":37},[34,101819,41],{"class":40},[34,101821,69801],{"class":44},[34,101823,101824],{"class":149}," timestep",[34,101826,153],{"class":40},[34,101828,101829],{"class":156},"\"0.01\"",[34,101831,101832],{"class":149}," gravity",[34,101834,153],{"class":40},[34,101836,101837],{"class":156},"\"0 0 -9.81\"",[34,101839,101774],{"class":40},[108,101841,101842,101843,101846,101847,101849],{},"表示每调用一次 ",[31,101844,101845],{},"mj_step","，仿真时间前进 ",[31,101848,39637],{}," 秒。循环 100 次，大约就是 1 秒：",[24,101851,101854],{"className":101852,"code":101853,"language":5840,"meta":29},[5838],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[31,101855,101853],{"__ignoreMap":29},[19,101857,101859],{"id":101858},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[108,101861,101862],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[24,101864,101867],{"className":101865,"code":101866,"language":5840,"meta":29},[5838],"x y z qw qx qy qz\n",[31,101868,101866],{"__ignoreMap":29},[108,101870,101871,101872,101875,101876,101879],{},"表示一个自由刚体的位置和姿态。其中 ",[31,101873,101874],{},"x y z"," 是位置，",[31,101877,101878],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101881,101883],{"id":101882},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[108,101885,101886],{},"新建文件:",[24,101888,101890],{"className":24474,"code":101889,"language":24476,"meta":29,"style":29},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[31,101891,101892,101902,101909],{"__ignoreMap":29},[34,101893,101894,101897,101899],{"class":36,"line":37},[34,101895,101896],{"class":149},"mkdir",[34,101898,29867],{"class":63},[34,101900,101901],{"class":156}," mujoco_tutorial\n",[34,101903,101904,101907],{"class":36,"line":51},[34,101905,101906],{"class":63},"cd",[34,101908,101901],{"class":156},[34,101910,101911,101914],{"class":36,"line":60},[34,101912,101913],{"class":149},"touch",[34,101915,101916],{"class":156}," ch1_first_sim.py\n",[108,101918,101919],{},"写入:",[24,101921,101923],{"className":31029,"code":101922,"language":31031,"meta":29,"style":29},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,101924,101925,101932,101936,101940,101950,101955,101960,101964,101969,101974,101978,101983,101988,101993,101998,102003,102008,102012,102016,102020,102033,102047,102057,102061,102073,102085,102097,102109,102121,102125,102142,102147,102151,102162,102173,102177,102181,102195],{"__ignoreMap":29},[34,101926,101927,101929],{"class":36,"line":37},[34,101928,31043],{"class":87},[34,101930,101931],{"class":40}," mujoco\n",[34,101933,101934],{"class":36,"line":51},[34,101935,3053],{"emptyLinePlaceholder":726},[34,101937,101938],{"class":36,"line":60},[34,101939,3053],{"emptyLinePlaceholder":726},[34,101941,101942,101945,101947],{"class":36,"line":76},[34,101943,101944],{"class":63},"XML",[34,101946,14217],{"class":87},[34,101948,101949],{"class":156}," \"\"\"\n",[34,101951,101952],{"class":36,"line":93},[34,101953,101954],{"class":156},"\u003Cmujoco model=\"first_sim\">\n",[34,101956,101957],{"class":36,"line":99},[34,101958,101959],{"class":156},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[34,101961,101962],{"class":36,"line":353},[34,101963,3053],{"emptyLinePlaceholder":726},[34,101965,101966],{"class":36,"line":359},[34,101967,101968],{"class":156},"  \u003Cworldbody>\n",[34,101970,101971],{"class":36,"line":579},[34,101972,101973],{"class":156},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,101975,101976],{"class":36,"line":589},[34,101977,3053],{"emptyLinePlaceholder":726},[34,101979,101980],{"class":36,"line":601},[34,101981,101982],{"class":156},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[34,101984,101985],{"class":36,"line":613},[34,101986,101987],{"class":156},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[34,101989,101990],{"class":36,"line":618},[34,101991,101992],{"class":156},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,101994,101995],{"class":36,"line":628},[34,101996,101997],{"class":156},"    \u003C\u002Fbody>\n",[34,101999,102000],{"class":36,"line":640},[34,102001,102002],{"class":156},"  \u003C\u002Fworldbody>\n",[34,102004,102005],{"class":36,"line":2301},[34,102006,102007],{"class":156},"\u003C\u002Fmujoco>\n",[34,102009,102010],{"class":36,"line":2307},[34,102011,96328],{"class":156},[34,102013,102014],{"class":36,"line":2328},[34,102015,3053],{"emptyLinePlaceholder":726},[34,102017,102018],{"class":36,"line":2333},[34,102019,3053],{"emptyLinePlaceholder":726},[34,102021,102022,102024,102026,102029,102031],{"class":36,"line":2347},[34,102023,32598],{"class":87},[34,102025,2626],{"class":149},[34,102027,102028],{"class":40},"() -> ",[34,102030,96316],{"class":63},[34,102032,4392],{"class":40},[34,102034,102035,102038,102040,102043,102045],{"class":36,"line":2352},[34,102036,102037],{"class":40},"    model ",[34,102039,153],{"class":87},[34,102041,102042],{"class":40}," mujoco.MjModel.from_xml_string(",[34,102044,101944],{"class":63},[34,102046,807],{"class":40},[34,102048,102049,102052,102054],{"class":36,"line":2381},[34,102050,102051],{"class":40},"    data ",[34,102053,153],{"class":87},[34,102055,102056],{"class":40}," mujoco.MjData(model)\n",[34,102058,102059],{"class":36,"line":2386},[34,102060,3053],{"emptyLinePlaceholder":726},[34,102062,102063,102065,102067,102070],{"class":36,"line":2403},[34,102064,31950],{"class":63},[34,102066,801],{"class":40},[34,102068,102069],{"class":156},"\"nq:\"",[34,102071,102072],{"class":40},", model.nq)\n",[34,102074,102075,102077,102079,102082],{"class":36,"line":2408},[34,102076,31950],{"class":63},[34,102078,801],{"class":40},[34,102080,102081],{"class":156},"\"nv:\"",[34,102083,102084],{"class":40},", model.nv)\n",[34,102086,102087,102089,102091,102094],{"class":36,"line":2413},[34,102088,31950],{"class":63},[34,102090,801],{"class":40},[34,102092,102093],{"class":156},"\"nu:\"",[34,102095,102096],{"class":40},", model.nu)\n",[34,102098,102099,102101,102103,102106],{"class":36,"line":2418},[34,102100,31950],{"class":63},[34,102102,801],{"class":40},[34,102104,102105],{"class":156},"\"initial time:\"",[34,102107,102108],{"class":40},", data.time)\n",[34,102110,102111,102113,102115,102118],{"class":36,"line":2432},[34,102112,31950],{"class":63},[34,102114,801],{"class":40},[34,102116,102117],{"class":156},"\"initial qpos:\"",[34,102119,102120],{"class":40},", data.qpos.copy())\n",[34,102122,102123],{"class":36,"line":2437},[34,102124,3053],{"emptyLinePlaceholder":726},[34,102126,102127,102129,102132,102134,102136,102138,102140],{"class":36,"line":3230},[34,102128,3854],{"class":87},[34,102130,102131],{"class":40}," _ ",[34,102133,26695],{"class":87},[34,102135,33094],{"class":63},[34,102137,801],{"class":40},[34,102139,1106],{"class":63},[34,102141,31437],{"class":40},[34,102143,102144],{"class":36,"line":3244},[34,102145,102146],{"class":40},"        mujoco.mj_step(model, data)\n",[34,102148,102149],{"class":36,"line":3252},[34,102150,3053],{"emptyLinePlaceholder":726},[34,102152,102153,102155,102157,102160],{"class":36,"line":3257},[34,102154,31950],{"class":63},[34,102156,801],{"class":40},[34,102158,102159],{"class":156},"\"final time:\"",[34,102161,102108],{"class":40},[34,102163,102164,102166,102168,102171],{"class":36,"line":3263},[34,102165,31950],{"class":63},[34,102167,801],{"class":40},[34,102169,102170],{"class":156},"\"final qpos:\"",[34,102172,102120],{"class":40},[34,102174,102175],{"class":36,"line":3269},[34,102176,3053],{"emptyLinePlaceholder":726},[34,102178,102179],{"class":36,"line":3274},[34,102180,3053],{"emptyLinePlaceholder":726},[34,102182,102183,102185,102187,102190,102193],{"class":36,"line":8601},[34,102184,2191],{"class":87},[34,102186,31871],{"class":63},[34,102188,102189],{"class":87}," ==",[34,102191,102192],{"class":156}," \"__main__\"",[34,102194,4392],{"class":40},[34,102196,102197],{"class":36,"line":8625},[34,102198,102199],{"class":40},"    main()\n",[19,102201,102202],{"id":102202},"代码逐段解释",[108,102204,102205],{},"导入库：",[24,102207,102209],{"className":31029,"code":102208,"language":31031,"meta":29,"style":29},"import mujoco\n",[31,102210,102211],{"__ignoreMap":29},[34,102212,102213,102215],{"class":36,"line":37},[34,102214,31043],{"class":87},[34,102216,101931],{"class":40},[108,102218,102219],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[108,102221,102222],{},"定义 XML：",[24,102224,102226],{"className":31029,"code":102225,"language":31031,"meta":29,"style":29},"XML = \"\"\"\n...\n\"\"\"\n",[31,102227,102228,102236,102241],{"__ignoreMap":29},[34,102229,102230,102232,102234],{"class":36,"line":37},[34,102231,101944],{"class":63},[34,102233,14217],{"class":87},[34,102235,101949],{"class":156},[34,102237,102238],{"class":36,"line":51},[34,102239,102240],{"class":156},"...\n",[34,102242,102243],{"class":36,"line":60},[34,102244,96328],{"class":156},[108,102246,102247,102248,102251],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[31,102249,102250],{},"freejoint"," 的方块。",[108,102253,102254],{},"编译模型：",[24,102256,102258],{"className":31029,"code":102257,"language":31031,"meta":29,"style":29},"model = mujoco.MjModel.from_xml_string(XML)\n",[31,102259,102260],{"__ignoreMap":29},[34,102261,102262,102265,102267,102269,102271],{"class":36,"line":37},[34,102263,102264],{"class":40},"model ",[34,102266,153],{"class":87},[34,102268,102042],{"class":40},[34,102270,101944],{"class":63},[34,102272,807],{"class":40},[108,102274,102275],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[108,102277,102278],{},"创建数据：",[24,102280,102282],{"className":31029,"code":102281,"language":31031,"meta":29,"style":29},"data = mujoco.MjData(model)\n",[31,102283,102284],{"__ignoreMap":29},[34,102285,102286,102289,102291],{"class":36,"line":37},[34,102287,102288],{"class":40},"data ",[34,102290,153],{"class":87},[34,102292,102056],{"class":40},[108,102294,102295,102297,102298,102300],{},[31,102296,34052],{}," 会保存仿真当前状态。刚创建时，时间是 ",[31,102299,987],{},"，方块还在初始位置。",[108,102302,102303],{},"推进仿真：",[24,102305,102307],{"className":31029,"code":102306,"language":31031,"meta":29,"style":29},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[31,102308,102309,102325],{"__ignoreMap":29},[34,102310,102311,102313,102315,102317,102319,102321,102323],{"class":36,"line":37},[34,102312,3678],{"class":87},[34,102314,102131],{"class":40},[34,102316,26695],{"class":87},[34,102318,33094],{"class":63},[34,102320,801],{"class":40},[34,102322,1106],{"class":63},[34,102324,31437],{"class":40},[34,102326,102327],{"class":36,"line":51},[34,102328,102329],{"class":40},"    mujoco.mj_step(model, data)\n",[108,102331,102332,102333,102335],{},"每次 ",[31,102334,101845],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[19,102337,102338],{"id":102338},"代码逐行细讲",[108,102340,102341],{},"下面把完整代码按新手视角拆开讲。",[24,102343,102344],{"className":31029,"code":102208,"language":31031,"meta":29,"style":29},[31,102345,102346],{"__ignoreMap":29},[34,102347,102348,102350],{"class":36,"line":37},[34,102349,31043],{"class":87},[34,102351,101931],{"class":40},[108,102353,102354,102356,102357,1008,102359,1008,102361,29036],{},[31,102355,31043],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[31,102358,101305],{},[31,102360,101310],{},[31,102362,102363],{},"mujoco.mj_step",[24,102365,102366],{"className":31029,"code":102225,"language":31031,"meta":29,"style":29},[31,102367,102368,102376,102380],{"__ignoreMap":29},[34,102369,102370,102372,102374],{"class":36,"line":37},[34,102371,101944],{"class":63},[34,102373,14217],{"class":87},[34,102375,101949],{"class":156},[34,102377,102378],{"class":36,"line":51},[34,102379,102240],{"class":156},[34,102381,102382],{"class":36,"line":60},[34,102383,96328],{"class":156},[108,102385,102386,102388,102389,102392],{},[31,102387,101944],{}," 是一个变量名。右边的三引号 ",[31,102390,102391],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[24,102394,102395],{"className":53713,"code":101954,"language":53715,"meta":29,"style":29},[31,102396,102397],{"__ignoreMap":29},[34,102398,102399,102401,102403,102406,102408,102411],{"class":36,"line":37},[34,102400,41],{"class":40},[34,102402,101651],{"class":44},[34,102404,102405],{"class":149}," model",[34,102407,153],{"class":40},[34,102409,102410],{"class":156},"\"first_sim\"",[34,102412,48],{"class":40},[108,102414,102415,102416,102419,102420,29036],{},"这是 XML 的根标签。",[31,102417,102418],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[31,102421,102422],{},"first_sim",[24,102424,102425],{"className":53713,"code":101813,"language":53715,"meta":29,"style":29},[31,102426,102427],{"__ignoreMap":29},[34,102428,102429,102431,102433,102435,102437,102439,102441,102443,102445],{"class":36,"line":37},[34,102430,41],{"class":40},[34,102432,69801],{"class":44},[34,102434,101824],{"class":149},[34,102436,153],{"class":40},[34,102438,101829],{"class":156},[34,102440,101832],{"class":149},[34,102442,153],{"class":40},[34,102444,101837],{"class":156},[34,102446,101774],{"class":40},[108,102448,102449,102451,102452,102455,102456,102459],{},[31,102450,69801],{}," 用来设置仿真参数。",[31,102453,102454],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[31,102457,102458],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[24,102461,102463],{"className":53713,"code":102462,"language":53715,"meta":29,"style":29},"\u003Cworldbody>\n",[31,102464,102465],{"__ignoreMap":29},[34,102466,102467,102469,102472],{"class":36,"line":37},[34,102468,41],{"class":40},[34,102470,102471],{"class":44},"worldbody",[34,102473,48],{"class":40},[108,102475,102476,102478],{},[31,102477,102471],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[24,102480,102482],{"className":53713,"code":102481,"language":53715,"meta":29,"style":29},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[31,102483,102484],{"__ignoreMap":29},[34,102485,102486,102488,102490,102492,102494,102497,102499,102501,102504,102506,102508,102511,102513,102515,102518],{"class":36,"line":37},[34,102487,41],{"class":40},[34,102489,101750],{"class":44},[34,102491,15573],{"class":149},[34,102493,153],{"class":40},[34,102495,102496],{"class":156},"\"floor\"",[34,102498,54469],{"class":149},[34,102500,153],{"class":40},[34,102502,102503],{"class":156},"\"plane\"",[34,102505,101766],{"class":149},[34,102507,153],{"class":40},[34,102509,102510],{"class":156},"\"2 2 0.1\"",[34,102512,79397],{"class":149},[34,102514,153],{"class":40},[34,102516,102517],{"class":156},"\"0.8 0.8 0.8 1\"",[34,102519,101774],{"class":40},[108,102521,102522,102523,102525,102526,102529,102530,102533,102534,102536],{},"这行创建地面。",[31,102524,101750],{}," 是几何体。",[31,102527,102528],{},"name=\"floor\""," 是名字。",[31,102531,102532],{},"type=\"plane\""," 表示平面。",[31,102535,55753],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[24,102538,102540],{"className":53713,"code":102539,"language":53715,"meta":29,"style":29},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[31,102541,102542],{"__ignoreMap":29},[34,102543,102544,102546,102548,102550,102552,102554,102556,102558,102560],{"class":36,"line":37},[34,102545,41],{"class":40},[34,102547,52446],{"class":44},[34,102549,15573],{"class":149},[34,102551,153],{"class":40},[34,102553,54137],{"class":156},[34,102555,101736],{"class":149},[34,102557,153],{"class":40},[34,102559,101741],{"class":156},[34,102561,48],{"class":40},[108,102563,102564,102565,29036,102567,102570,102571,102573],{},"这行创建一个刚体，名字叫 ",[31,102566,54360],{},[31,102568,102569],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[31,102572,101799],{},"，也就是离地面 1 米高。",[24,102575,102577],{"className":53713,"code":102576,"language":53715,"meta":29,"style":29},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[31,102578,102579],{"__ignoreMap":29},[34,102580,102581,102583,102585,102587,102589,102592],{"class":36,"line":37},[34,102582,41],{"class":40},[34,102584,102250],{"class":44},[34,102586,15573],{"class":149},[34,102588,153],{"class":40},[34,102590,102591],{"class":156},"\"box_free\"",[34,102593,101774],{"class":40},[108,102595,102596,102597,102599],{},"这行很重要。",[31,102598,102250],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[24,102601,102603],{"className":53713,"code":102602,"language":53715,"meta":29,"style":29},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[31,102604,102605],{"__ignoreMap":29},[34,102606,102607,102609,102611,102613,102615,102617,102619,102621,102623,102625,102627,102629,102632,102634,102636,102638,102640,102643],{"class":36,"line":37},[34,102608,41],{"class":40},[34,102610,101750],{"class":44},[34,102612,15573],{"class":149},[34,102614,153],{"class":40},[34,102616,101757],{"class":156},[34,102618,54469],{"class":149},[34,102620,153],{"class":40},[34,102622,54137],{"class":156},[34,102624,101766],{"class":149},[34,102626,153],{"class":40},[34,102628,101771],{"class":156},[34,102630,102631],{"class":149}," mass",[34,102633,153],{"class":40},[34,102635,4331],{"class":156},[34,102637,79397],{"class":149},[34,102639,153],{"class":40},[34,102641,102642],{"class":156},"\"1 0 0 1\"",[34,102644,101774],{"class":40},[108,102646,102647,102648,102651,102652,102655,102656,102659,102660,102663],{},"这行给 box body 添加一个盒子形状。",[31,102649,102650],{},"type=\"box\""," 表示形状是盒子。",[31,102653,102654],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[31,102657,102658],{},"mass=\"1\""," 表示质量是 1。",[31,102661,102662],{},"rgba=\"1 0 0 1\""," 表示红色。",[24,102665,102667],{"className":31029,"code":102666,"language":31031,"meta":29,"style":29},"def main() -> None:\n",[31,102668,102669],{"__ignoreMap":29},[34,102670,102671,102673,102675,102677,102679],{"class":36,"line":37},[34,102672,32598],{"class":87},[34,102674,2626],{"class":149},[34,102676,102028],{"class":40},[34,102678,96316],{"class":63},[34,102680,4392],{"class":40},[108,102682,102683,102685,102686,102689,102690,102693],{},[31,102684,32598],{}," 用来定义函数。这里定义了一个叫 ",[31,102687,102688],{},"main"," 的函数。",[31,102691,102692],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[24,102695,102696],{"className":31029,"code":102257,"language":31031,"meta":29,"style":29},[31,102697,102698],{"__ignoreMap":29},[34,102699,102700,102702,102704,102706,102708],{"class":36,"line":37},[34,102701,102264],{"class":40},[34,102703,153],{"class":87},[34,102705,102042],{"class":40},[34,102707,101944],{"class":63},[34,102709,807],{"class":40},[108,102711,102712,102713,102716],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[31,102714,102715],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[24,102718,102719],{"className":31029,"code":102281,"language":31031,"meta":29,"style":29},[31,102720,102721],{"__ignoreMap":29},[34,102722,102723,102725,102727],{"class":36,"line":37},[34,102724,102288],{"class":40},[34,102726,153],{"class":87},[34,102728,102056],{"class":40},[108,102730,102731,102732,102734,102735,102737],{},"这行创建仿真数据。",[31,102733,34052],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[31,102736,34052],{}," 都会变化。",[24,102739,102741],{"className":31029,"code":102740,"language":31031,"meta":29,"style":29},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[31,102742,102743,102753,102763],{"__ignoreMap":29},[34,102744,102745,102747,102749,102751],{"class":36,"line":37},[34,102746,31066],{"class":63},[34,102748,801],{"class":40},[34,102750,102069],{"class":156},[34,102752,102072],{"class":40},[34,102754,102755,102757,102759,102761],{"class":36,"line":51},[34,102756,31066],{"class":63},[34,102758,801],{"class":40},[34,102760,102081],{"class":156},[34,102762,102084],{"class":40},[34,102764,102765,102767,102769,102771],{"class":36,"line":60},[34,102766,31066],{"class":63},[34,102768,801],{"class":40},[34,102770,102093],{"class":156},[34,102772,102096],{"class":40},[108,102774,102775,102777,102778,102781,102782,102785,102786,102789,102790,102793],{},[31,102776,31066],{}," 用来输出信息。",[31,102779,102780],{},"model.nq"," 是位置变量数量，",[31,102783,102784],{},"model.nv"," 是速度变量数量，",[31,102787,102788],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[31,102791,102792],{},"nu"," 是 0。",[24,102795,102797],{"className":31029,"code":102796,"language":31031,"meta":29,"style":29},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[31,102798,102799,102809],{"__ignoreMap":29},[34,102800,102801,102803,102805,102807],{"class":36,"line":37},[34,102802,31066],{"class":63},[34,102804,801],{"class":40},[34,102806,102105],{"class":156},[34,102808,102108],{"class":40},[34,102810,102811,102813,102815,102817],{"class":36,"line":51},[34,102812,31066],{"class":63},[34,102814,801],{"class":40},[34,102816,102117],{"class":156},[34,102818,102120],{"class":40},[108,102820,102821,102822,102824,102825,102827,102828,102831],{},"这里打印初始时间和初始位置。",[31,102823,101697],{}," 一开始是 0。",[31,102826,101700],{}," 是位置数组。",[31,102829,102830],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[24,102833,102834],{"className":31029,"code":102306,"language":31031,"meta":29,"style":29},[31,102835,102836,102852],{"__ignoreMap":29},[34,102837,102838,102840,102842,102844,102846,102848,102850],{"class":36,"line":37},[34,102839,3678],{"class":87},[34,102841,102131],{"class":40},[34,102843,26695],{"class":87},[34,102845,33094],{"class":63},[34,102847,801],{"class":40},[34,102849,1106],{"class":63},[34,102851,31437],{"class":40},[34,102853,102854],{"class":36,"line":51},[34,102855,102329],{"class":40},[108,102857,102858,102860,102861,102864,102865,102867,102868,102870],{},[31,102859,3678],{}," 是循环。",[31,102862,102863],{},"range(100)"," 表示循环 100 次。",[31,102866,1785],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[31,102869,101845],{},"，仿真就前进一步。",[24,102872,102874],{"className":31029,"code":102873,"language":31031,"meta":29,"style":29},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[31,102875,102876,102886],{"__ignoreMap":29},[34,102877,102878,102880,102882,102884],{"class":36,"line":37},[34,102879,31066],{"class":63},[34,102881,801],{"class":40},[34,102883,102159],{"class":156},[34,102885,102108],{"class":40},[34,102887,102888,102890,102892,102894],{"class":36,"line":51},[34,102889,31066],{"class":63},[34,102891,801],{"class":40},[34,102893,102170],{"class":156},[34,102895,102120],{"class":40},[108,102897,102898],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[24,102900,102902],{"className":31029,"code":102901,"language":31031,"meta":29,"style":29},"if __name__ == \"__main__\":\n    main()\n",[31,102903,102904,102916],{"__ignoreMap":29},[34,102905,102906,102908,102910,102912,102914],{"class":36,"line":37},[34,102907,2191],{"class":87},[34,102909,31871],{"class":63},[34,102911,102189],{"class":87},[34,102913,102192],{"class":156},[34,102915,4392],{"class":40},[34,102917,102918],{"class":36,"line":51},[34,102919,102199],{"class":40},[108,102921,102922,102923,102926,102927,29036],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[31,102924,102925],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[31,102928,102925],{},[108,102930,102931],{},"运行:",[24,102933,102935],{"className":24474,"code":102934,"language":24476,"meta":29,"style":29},"python ch1_first_sim.py\n",[31,102936,102937],{"__ignoreMap":29},[34,102938,102939,102941],{"class":36,"line":37},[34,102940,31031],{"class":149},[34,102942,101916],{"class":156},[14,102944,102946],{"id":102945},"_5运行结果说明","5.运行结果说明",[108,102948,102949],{},"你应该看到类似输出:",[24,102951,102954],{"className":102952,"code":102953,"language":5840,"meta":29},[5838],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[31,102955,102953],{"__ignoreMap":29},[108,102957,102958,102960,102961,102964,102965,29036],{},[31,102959,102250],{}," 有 7 个位置变量: ",[31,102962,102963],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[31,102966,102967],{},"vx vy vz wx wy wz",[108,102969,102970,102971,102974],{},"你还会看到 ",[31,102972,102973],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102976,102978],{"id":102977},"_6验证步骤","6.验证步骤",[108,102980,102981],{},"确认版本:",[24,102983,102984],{"className":24474,"code":101569,"language":24476,"meta":29,"style":29},[31,102985,102986],{"__ignoreMap":29},[34,102987,102988,102990,102992],{"class":36,"line":37},[34,102989,31031],{"class":149},[34,102991,31009],{"class":63},[34,102993,101580],{"class":156},[108,102995,102996],{},"确认导入的是官方 bindings:",[24,102998,103000],{"className":24474,"code":102999,"language":24476,"meta":29,"style":29},"python -c \"import mujoco; print(mujoco)\"\n",[31,103001,103002],{"__ignoreMap":29},[34,103003,103004,103006,103008],{"class":36,"line":37},[34,103005,31031],{"class":149},[34,103007,31009],{"class":63},[34,103009,103010],{"class":156}," \"import mujoco; print(mujoco)\"\n",[108,103012,103013],{},"运行程序:",[24,103015,103016],{"className":24474,"code":102934,"language":24476,"meta":29,"style":29},[31,103017,103018],{"__ignoreMap":29},[34,103019,103020,103022],{"class":36,"line":37},[34,103021,31031],{"class":149},[34,103023,101916],{"class":156},[108,103025,103026,103027,103030,103031,29036],{},"检查 ",[31,103028,103029],{},"final time"," 是否约等于 ",[31,103032,103033],{},"1.0",[108,103035,103036],{},"再做几个小实验：",[752,103038,103039,103049,103057,103070],{},[755,103040,103041,103042,103044,103045,103048],{},"把 ",[31,103043,102569],{}," 改成 ",[31,103046,103047],{},"pos=\"0 0 2\"","，观察初始高度变化。",[755,103050,103041,103051,103044,103053,103056],{},[31,103052,102458],{},[31,103054,103055],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[755,103058,103041,103059,103044,103061,103064,103065,103067,103068,29036],{},[31,103060,102454],{},[31,103062,103063],{},"timestep=\"0.005\"","，观察 100 步后的 ",[31,103066,103029],{}," 是否变成约 ",[31,103069,35980],{},[755,103071,103072,103073,103076],{},"删除 ",[31,103074,103075],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[108,103078,103079],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103081,103083],{"id":103082},"_7常见错误与解决方案","7.常见错误与解决方案",[19,103085,103087],{"id":103086},"modulenotfounderror-no-module-named-mujoco",[31,103088,103089],{},"ModuleNotFoundError: No module named 'mujoco'",[108,103091,103092],{},"解决:",[24,103094,103096],{"className":24474,"code":103095,"language":24476,"meta":29,"style":29},"pip install \"mujoco>=2.3\"\n",[31,103097,103098],{"__ignoreMap":29},[34,103099,103100,103102,103104],{"class":36,"line":37},[34,103101,24483],{"class":149},[34,103103,24486],{"class":156},[34,103105,103106],{"class":156}," \"mujoco>=2.3\"\n",[19,103108,103110],{"id":103109},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[108,103112,103113],{},"先安装系统依赖:",[24,103115,103117],{"className":24474,"code":103116,"language":24476,"meta":29,"style":29},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[31,103118,103119],{"__ignoreMap":29},[34,103120,103121,103123,103125,103127,103129,103132,103134,103137,103139,103142,103144],{"class":36,"line":37},[34,103122,25229],{"class":149},[34,103124,26967],{"class":156},[34,103126,24486],{"class":156},[34,103128,27052],{"class":63},[34,103130,103131],{"class":156}," mesa-libGL",[34,103133,101444],{"class":156},[34,103135,103136],{"class":156}," glfw",[34,103138,101464],{"class":156},[34,103140,103141],{"class":156}," libX11",[34,103143,101477],{"class":156},[34,103145,103146],{"class":156}," libXrandr\n",[19,103148,103150],{"id":103149},"xml-解析失败","XML 解析失败",[108,103152,103153],{},"检查:",[752,103155,103156,103159,103162,103168],{},[755,103157,103158],{},"标签是否闭合",[755,103160,103161],{},"属性是否带引号",[755,103163,103164,103165],{},"根节点是否是 ",[31,103166,103167],{},"\u003Cmujoco>",[755,103169,103170,103172,103173,103176],{},[31,103171,52446],{}," 是否放在 ",[31,103174,103175],{},"\u003Cworldbody>"," 内部",[19,103178,103180,103182,103183],{"id":103179},"final-time-不是严格等于-10",[31,103181,103029],{}," 不是严格等于 ",[31,103184,103033],{},[108,103186,103187],{},"这通常不是错误。浮点数计算可能得到：",[24,103189,103192],{"className":103190,"code":103191,"language":5840,"meta":29},[5838],"1.0000000000000007\n",[31,103193,103191],{"__ignoreMap":29},[108,103195,103196,103197,103199],{},"只要接近 ",[31,103198,103033],{}," 就正常。",[19,103201,103202],{"id":103202},"方块没有掉下来",[108,103204,103205],{},"检查：",[752,103207,103208,103214,103220,103225],{},[755,103209,103210,103211],{},"方块 body 里是否有 ",[31,103212,103213],{},"\u003Cfreejoint\u002F>",[755,103215,103216,103217],{},"重力是否是 ",[31,103218,103219],{},"0 0 -9.81",[755,103221,103222,103223],{},"是否真的调用了 ",[31,103224,101315],{},[755,103226,103227,103228,103230,103231],{},"你看的是否是 ",[31,103229,102973],{},"，不是 ",[31,103232,103233],{},"initial qpos",[14,103235,103237],{"id":103236},"_8本章小结","8.本章小结",[108,103239,103240],{},"本章你已经完成了 MuJoCo 的最小闭环：",[24,103242,103245],{"className":103243,"code":103244,"language":5840,"meta":29},[5838],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[31,103246,103244],{"__ignoreMap":29},[108,103248,103249],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[45,103251,103252],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":29,"searchDepth":51,"depth":51,"links":103254},[103255,103256,103257,103262,103266,103267,103268,103276],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":103258},[103259,103260,103261],{"id":101712,"depth":60,"text":101713},{"id":101806,"depth":60,"text":101807},{"id":101858,"depth":60,"text":101859},{"id":101882,"depth":51,"text":101883,"children":103263},[103264,103265],{"id":102202,"depth":60,"text":102202},{"id":102338,"depth":60,"text":102338},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":103269},[103270,103271,103272,103273,103275],{"id":103086,"depth":60,"text":103089},{"id":103109,"depth":60,"text":103110},{"id":103149,"depth":60,"text":103150},{"id":103179,"depth":60,"text":103274},"final time 不是严格等于 1.0",{"id":103202,"depth":60,"text":103202},{"id":103236,"depth":51,"text":103237},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101268,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103283,"title":103284,"body":103285,"description":29,"extension":724,"meta":104941,"navigation":726,"path":104942,"seo":104943,"stem":104944,"__hash__":104945},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103286,"toc":104917},[103287,103290,103292,103295,103298,103315,103410,103413,103419,103421,103423,103447,103450,103464,103467,103508,103510,103523,103525,103528,103576,103588,103591,103594,103600,103613,103680,103683,103702,103705,103708,103714,103716,103725,103728,103732,103741,103823,103832,103836,103842,103856,103866,103868,104198,104201,104213,104215,104226,104228,104231,104249,104252,104255,104273,104284,104287,104302,104312,104314,104335,104352,104372,104378,104418,104434,104450,104456,104459,104483,104499,104504,104534,104551,104576,104579,104594,104603,104618,104627,104642,104649,104651,104661,104674,104681,104684,104723,104730,104732,104784,104786,104792,104795,104802,104809,104812,104814,104832,104835,104838,104872,104884,104886,104889,104911,104914],[10,103288,103284],{"id":103289},"_2xml-与-mjcf-物理建模基础",[14,103291,101277],{"id":101276},[108,103293,103294],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[108,103296,103297],{},"本章结束后，你应该能看懂一个简单模型里：",[752,103299,103300,103303,103306,103309,103312],{},[755,103301,103302],{},"地面在哪里。",[755,103304,103305],{},"物体初始位置在哪里。",[755,103307,103308],{},"几何体是什么形状。",[755,103310,103311],{},"哪些 body 可以自由运动。",[755,103313,103314],{},"如何用名字在 Python 里找到 XML 中的对象。",[934,103316,103317,103327],{},[937,103318,103319],{},[940,103320,103321,103324],{},[943,103322,103323],{"align":24388},"标签",[943,103325,103326],{"align":24388},"作用",[980,103328,103329,103338,103348,103357,103367,103377,103390,103400],{},[940,103330,103331,103335],{},[985,103332,103333],{"align":24388},[31,103334,103167],{},[985,103336,103337],{"align":24388},"根节点",[940,103339,103340,103345],{},[985,103341,103342],{"align":24388},[31,103343,103344],{},"\u003Coption>",[985,103346,103347],{"align":24388},"仿真参数",[940,103349,103350,103354],{},[985,103351,103352],{"align":24388},[31,103353,103175],{},[985,103355,103356],{"align":24388},"世界中的物体",[940,103358,103359,103364],{},[985,103360,103361],{"align":24388},[31,103362,103363],{},"\u003Cbody>",[985,103365,103366],{"align":24388},"刚体",[940,103368,103369,103374],{},[985,103370,103371],{"align":24388},[31,103372,103373],{},"\u003Cgeom>",[985,103375,103376],{"align":24388},"几何体、碰撞体、可视体",[940,103378,103379,103387],{},[985,103380,103381,25631,103384],{"align":24388},[31,103382,103383],{},"\u003Cjoint>",[31,103385,103386],{},"\u003Cfreejoint>",[985,103388,103389],{"align":24388},"关节",[940,103391,103392,103397],{},[985,103393,103394],{"align":24388},[31,103395,103396],{},"\u003Csite>",[985,103398,103399],{"align":24388},"标记点",[940,103401,103402,103407],{},[985,103403,103404],{"align":24388},[31,103405,103406],{},"\u003Cactuator>",[985,103408,103409],{"align":24388},"控制器",[108,103411,103412],{},"初学时可以先记住：",[24,103414,103417],{"className":103415,"code":103416,"language":5840,"meta":29},[5838],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[31,103418,103416],{"__ignoreMap":29},[14,103420,101400],{"id":101399},[108,103422,101403],{},[24,103424,103426],{"className":24474,"code":103425,"language":24476,"meta":29,"style":29},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[31,103427,103428],{"__ignoreMap":29},[34,103429,103430,103432,103434,103436,103438,103440,103442,103444],{"class":36,"line":37},[34,103431,25229],{"class":149},[34,103433,26967],{"class":156},[34,103435,24486],{"class":156},[34,103437,27052],{"class":63},[34,103439,103131],{"class":156},[34,103441,101444],{"class":156},[34,103443,103136],{"class":156},[34,103445,103446],{"class":156}," glfw-devel\n",[108,103448,103449],{},"pip:",[24,103451,103452],{"className":24474,"code":101549,"language":24476,"meta":29,"style":29},[31,103453,103454],{"__ignoreMap":29},[34,103455,103456,103458,103460,103462],{"class":36,"line":37},[34,103457,24483],{"class":149},[34,103459,24486],{"class":156},[34,103461,101560],{"class":156},[34,103463,101563],{"class":156},[108,103465,103466],{},"conda:",[24,103468,103470],{"className":24474,"code":103469,"language":24476,"meta":29,"style":29},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[31,103471,103472,103489,103498],{"__ignoreMap":29},[34,103473,103474,103476,103478,103480,103483,103485,103487],{"class":36,"line":37},[34,103475,30981],{"class":149},[34,103477,29827],{"class":156},[34,103479,25768],{"class":63},[34,103481,103482],{"class":156}," mujoco-xml",[34,103484,101605],{"class":156},[34,103486,101608],{"class":63},[34,103488,101611],{"class":63},[34,103490,103491,103493,103495],{"class":36,"line":51},[34,103492,30981],{"class":149},[34,103494,101618],{"class":156},[34,103496,103497],{"class":156}," mujoco-xml\n",[34,103499,103500,103502,103504,103506],{"class":36,"line":60},[34,103501,24483],{"class":149},[34,103503,24486],{"class":156},[34,103505,101560],{"class":156},[34,103507,101563],{"class":156},[108,103509,101634],{},[752,103511,103512,103515,103520],{},[755,103513,103514],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[755,103516,103517,103518,29036],{},"本章使用基础标签，适用于 ",[31,103519,101657],{},[755,103521,103522],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103524,101675],{"id":101674},[108,103526,103527],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[24,103529,103531],{"className":53713,"code":103530,"language":53715,"meta":29,"style":29},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[31,103532,103533,103547,103555,103560,103568],{"__ignoreMap":29},[34,103534,103535,103537,103539,103541,103543,103545],{"class":36,"line":37},[34,103536,41],{"class":40},[34,103538,101651],{"class":44},[34,103540,102405],{"class":149},[34,103542,153],{"class":40},[34,103544,63317],{"class":156},[34,103546,48],{"class":40},[34,103548,103549,103551,103553],{"class":36,"line":51},[34,103550,52790],{"class":40},[34,103552,102471],{"class":44},[34,103554,48],{"class":40},[34,103556,103557],{"class":36,"line":60},[34,103558,103559],{"class":40},"    ...\n",[34,103561,103562,103564,103566],{"class":36,"line":76},[34,103563,53063],{"class":40},[34,103565,102471],{"class":44},[34,103567,48],{"class":40},[34,103569,103570,103572,103574],{"class":36,"line":93},[34,103571,102],{"class":40},[34,103573,101651],{"class":44},[34,103575,48],{"class":40},[108,103577,103578,103580,103581,103583,103584,103587],{},[31,103579,52446],{}," 表示刚体。",[31,103582,101750],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[31,103585,103586],{},"joint"," 表示刚体相对父刚体如何运动。",[19,103589,103590],{"id":103590},"层级结构非常重要",[108,103592,103593],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[24,103595,103598],{"className":103596,"code":103597,"language":5840,"meta":29},[5838],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[31,103599,103597],{"__ignoreMap":29},[108,103601,103602,101648,103605,103608,103609,103612],{},[31,103603,103604],{},"red_box_geom",[31,103606,103607],{},"box_center"," 都属于 ",[31,103610,103611],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[24,103614,103616],{"className":53713,"code":103615,"language":53715,"meta":29,"style":29},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[31,103617,103618,103638,103652,103672],{"__ignoreMap":29},[34,103619,103620,103622,103624,103626,103628,103630,103632,103634,103636],{"class":36,"line":37},[34,103621,41],{"class":40},[34,103623,52446],{"class":44},[34,103625,15573],{"class":149},[34,103627,153],{"class":40},[34,103629,54137],{"class":156},[34,103631,101736],{"class":149},[34,103633,153],{"class":40},[34,103635,101741],{"class":156},[34,103637,48],{"class":40},[34,103639,103640,103642,103644,103646,103648,103650],{"class":36,"line":51},[34,103641,52790],{"class":40},[34,103643,102250],{"class":44},[34,103645,15573],{"class":149},[34,103647,153],{"class":40},[34,103649,102591],{"class":156},[34,103651,101774],{"class":40},[34,103653,103654,103656,103658,103660,103662,103664,103666,103668,103670],{"class":36,"line":60},[34,103655,52790],{"class":40},[34,103657,101750],{"class":44},[34,103659,54469],{"class":149},[34,103661,153],{"class":40},[34,103663,54137],{"class":156},[34,103665,101766],{"class":149},[34,103667,153],{"class":40},[34,103669,101771],{"class":156},[34,103671,101774],{"class":40},[34,103673,103674,103676,103678],{"class":36,"line":76},[34,103675,102],{"class":40},[34,103677,52446],{"class":44},[34,103679,48],{"class":40},[108,103681,103682],{},"含义:",[752,103684,103685,103691,103696,103699],{},[755,103686,103687,103688,103690],{},"创建名为 ",[31,103689,54360],{}," 的刚体",[755,103692,103693,103694],{},"初始位置在世界坐标 ",[31,103695,101799],{},[755,103697,103698],{},"它有一个自由关节",[755,103700,103701],{},"它有一个盒子几何体",[19,103703,103704],{"id":103704},"坐标怎么理解",[108,103706,103707],{},"MuJoCo 默认使用三维坐标：",[24,103709,103712],{"className":103710,"code":103711,"language":5840,"meta":29},[5838],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[31,103713,103711],{"__ignoreMap":29},[108,103715,15286],{},[24,103717,103719],{"className":53713,"code":103718,"language":53715,"meta":29,"style":29},"pos=\"0 0 1\"\n",[31,103720,103721],{"__ignoreMap":29},[34,103722,103723],{"class":36,"line":37},[34,103724,103718],{"class":40},[108,103726,103727],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[19,103729,103731],{"id":103730},"geom-的-size-怎么理解","geom 的 size 怎么理解",[108,103733,103734,103735,83160,103738,103740],{},"不同 ",[31,103736,103737],{},"type",[31,103739,32147],{}," 含义不同：",[934,103742,103743,103758],{},[937,103744,103745],{},[940,103746,103747,103751,103756],{},[943,103748,103749],{"align":24388},[31,103750,103737],{},[943,103752,103753,103755],{"align":24388},[31,103754,32147],{}," 示例",[943,103757,101330],{"align":24388},[980,103759,103760,103774,103789,103808],{},[940,103761,103762,103766,103771],{},[985,103763,103764],{"align":24388},[31,103765,54360],{},[985,103767,103768],{"align":24388},[31,103769,103770],{},"size=\"0.1 0.2 0.3\"",[985,103772,103773],{"align":24388},"x\u002Fy\u002Fz 半边长，不是完整长度",[940,103775,103776,103781,103786],{},[985,103777,103778],{"align":24388},[31,103779,103780],{},"sphere",[985,103782,103783],{"align":24388},[31,103784,103785],{},"size=\"0.1\"",[985,103787,103788],{"align":24388},"球半径",[940,103790,103791,103796,103801],{},[985,103792,103793],{"align":24388},[31,103794,103795],{},"capsule",[985,103797,103798],{"align":24388},[31,103799,103800],{},"size=\"0.03\"",[985,103802,103803,103804,103807],{"align":24388},"胶囊半径，长度常用 ",[31,103805,103806],{},"fromto"," 指定",[940,103809,103810,103815,103820],{},[985,103811,103812],{"align":24388},[31,103813,103814],{},"plane",[985,103816,103817],{"align":24388},[31,103818,103819],{},"size=\"3 3 0.1\"",[985,103821,103822],{"align":24388},"可视平面大小，通常当地面",[108,103824,103825,103826,103828,103829,103831],{},"最容易踩坑的是 box：",[31,103827,102654],{}," 表示边长大约是 ",[31,103830,32688],{},"，因为 MuJoCo 用的是半边长。",[19,103833,103835],{"id":103834},"site-是什么","site 是什么",[108,103837,103838,103841],{},[31,103839,103840],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[752,103843,103844,103847,103850,103853],{},[755,103845,103846],{},"标记机械臂末端。",[755,103848,103849],{},"标记目标位置。",[755,103851,103852],{},"放传感器或相机参考点。",[755,103854,103855],{},"在 Python 中读取某个关键点的世界坐标。",[108,103857,103858,103859,101648,103862,103865],{},"在后面的 Reacher 任务中，",[31,103860,103861],{},"tip",[31,103863,103864],{},"target"," 就会用 site 表示。",[14,103867,101883],{"id":101882},[24,103869,103871],{"className":31029,"code":103870,"language":31031,"meta":29,"style":29},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,103872,103873,103879,103889,103893,103897,103905,103910,103914,103918,103922,103927,103931,103936,103941,103946,103951,103955,103959,103963,103967,103971,103975,103987,103999,104007,104011,104026,104041,104045,104058,104073,104086,104099,104103,104119,104123,104127,104138,104150,104162,104174,104178,104182,104194],{"__ignoreMap":29},[34,103874,103875,103877],{"class":36,"line":37},[34,103876,31043],{"class":87},[34,103878,101931],{"class":40},[34,103880,103881,103883,103885,103887],{"class":36,"line":51},[34,103882,31043],{"class":87},[34,103884,32031],{"class":40},[34,103886,32034],{"class":87},[34,103888,32037],{"class":40},[34,103890,103891],{"class":36,"line":60},[34,103892,3053],{"emptyLinePlaceholder":726},[34,103894,103895],{"class":36,"line":76},[34,103896,3053],{"emptyLinePlaceholder":726},[34,103898,103899,103901,103903],{"class":36,"line":93},[34,103900,101944],{"class":63},[34,103902,14217],{"class":87},[34,103904,101949],{"class":156},[34,103906,103907],{"class":36,"line":99},[34,103908,103909],{"class":156},"\u003Cmujoco model=\"xml_basic\">\n",[34,103911,103912],{"class":36,"line":353},[34,103913,101959],{"class":156},[34,103915,103916],{"class":36,"line":359},[34,103917,3053],{"emptyLinePlaceholder":726},[34,103919,103920],{"class":36,"line":579},[34,103921,101968],{"class":156},[34,103923,103924],{"class":36,"line":589},[34,103925,103926],{"class":156},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[34,103928,103929],{"class":36,"line":601},[34,103930,3053],{"emptyLinePlaceholder":726},[34,103932,103933],{"class":36,"line":613},[34,103934,103935],{"class":156},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[34,103937,103938],{"class":36,"line":618},[34,103939,103940],{"class":156},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[34,103942,103943],{"class":36,"line":628},[34,103944,103945],{"class":156},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,103947,103948],{"class":36,"line":640},[34,103949,103950],{"class":156},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,103952,103953],{"class":36,"line":2301},[34,103954,101997],{"class":156},[34,103956,103957],{"class":36,"line":2307},[34,103958,102002],{"class":156},[34,103960,103961],{"class":36,"line":2328},[34,103962,102007],{"class":156},[34,103964,103965],{"class":36,"line":2333},[34,103966,96328],{"class":156},[34,103968,103969],{"class":36,"line":2347},[34,103970,3053],{"emptyLinePlaceholder":726},[34,103972,103973],{"class":36,"line":2352},[34,103974,3053],{"emptyLinePlaceholder":726},[34,103976,103977,103979,103981,103983,103985],{"class":36,"line":2381},[34,103978,32598],{"class":87},[34,103980,2626],{"class":149},[34,103982,102028],{"class":40},[34,103984,96316],{"class":63},[34,103986,4392],{"class":40},[34,103988,103989,103991,103993,103995,103997],{"class":36,"line":2386},[34,103990,102037],{"class":40},[34,103992,153],{"class":87},[34,103994,102042],{"class":40},[34,103996,101944],{"class":63},[34,103998,807],{"class":40},[34,104000,104001,104003,104005],{"class":36,"line":2403},[34,104002,102051],{"class":40},[34,104004,153],{"class":87},[34,104006,102056],{"class":40},[34,104008,104009],{"class":36,"line":2408},[34,104010,3053],{"emptyLinePlaceholder":726},[34,104012,104013,104016,104018,104021,104024],{"class":36,"line":2413},[34,104014,104015],{"class":40},"    box_body_id ",[34,104017,153],{"class":87},[34,104019,104020],{"class":40}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[34,104022,104023],{"class":156},"\"red_box\"",[34,104025,807],{"class":40},[34,104027,104028,104031,104033,104036,104039],{"class":36,"line":2418},[34,104029,104030],{"class":40},"    site_id ",[34,104032,153],{"class":87},[34,104034,104035],{"class":40}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[34,104037,104038],{"class":156},"\"box_center\"",[34,104040,807],{"class":40},[34,104042,104043],{"class":36,"line":2432},[34,104044,3053],{"emptyLinePlaceholder":726},[34,104046,104047,104049,104052,104054,104056],{"class":36,"line":2437},[34,104048,3754],{"class":87},[34,104050,104051],{"class":40}," box_body_id ",[34,104053,41],{"class":87},[34,104055,4746],{"class":63},[34,104057,4392],{"class":40},[34,104059,104060,104063,104066,104068,104071],{"class":36,"line":3230},[34,104061,104062],{"class":87},"        raise",[34,104064,104065],{"class":63}," RuntimeError",[34,104067,801],{"class":40},[34,104069,104070],{"class":156},"\"body red_box not found\"",[34,104072,807],{"class":40},[34,104074,104075,104077,104080,104082,104084],{"class":36,"line":3244},[34,104076,3754],{"class":87},[34,104078,104079],{"class":40}," site_id ",[34,104081,41],{"class":87},[34,104083,4746],{"class":63},[34,104085,4392],{"class":40},[34,104087,104088,104090,104092,104094,104097],{"class":36,"line":3252},[34,104089,104062],{"class":87},[34,104091,104065],{"class":63},[34,104093,801],{"class":40},[34,104095,104096],{"class":156},"\"site box_center not found\"",[34,104098,807],{"class":40},[34,104100,104101],{"class":36,"line":3257},[34,104102,3053],{"emptyLinePlaceholder":726},[34,104104,104105,104107,104109,104111,104113,104115,104117],{"class":36,"line":3263},[34,104106,3854],{"class":87},[34,104108,102131],{"class":40},[34,104110,26695],{"class":87},[34,104112,33094],{"class":63},[34,104114,801],{"class":40},[34,104116,2376],{"class":63},[34,104118,31437],{"class":40},[34,104120,104121],{"class":36,"line":3269},[34,104122,102146],{"class":40},[34,104124,104125],{"class":36,"line":3274},[34,104126,3053],{"emptyLinePlaceholder":726},[34,104128,104129,104131,104133,104136],{"class":36,"line":8601},[34,104130,31950],{"class":63},[34,104132,801],{"class":40},[34,104134,104135],{"class":156},"\"simulation time:\"",[34,104137,102108],{"class":40},[34,104139,104140,104142,104144,104147],{"class":36,"line":8625},[34,104141,31950],{"class":63},[34,104143,801],{"class":40},[34,104145,104146],{"class":156},"\"box body position:\"",[34,104148,104149],{"class":40},", data.xpos[box_body_id].copy())\n",[34,104151,104152,104154,104156,104159],{"class":36,"line":8630},[34,104153,31950],{"class":63},[34,104155,801],{"class":40},[34,104157,104158],{"class":156},"\"site position:\"",[34,104160,104161],{"class":40},", data.site_xpos[site_id].copy())\n",[34,104163,104164,104166,104168,104171],{"class":36,"line":8636},[34,104165,31950],{"class":63},[34,104167,801],{"class":40},[34,104169,104170],{"class":156},"\"box qpos:\"",[34,104172,104173],{"class":40},", np.array(data.qpos))\n",[34,104175,104176],{"class":36,"line":8663},[34,104177,3053],{"emptyLinePlaceholder":726},[34,104179,104180],{"class":36,"line":8668},[34,104181,3053],{"emptyLinePlaceholder":726},[34,104183,104184,104186,104188,104190,104192],{"class":36,"line":8674},[34,104185,2191],{"class":87},[34,104187,31871],{"class":63},[34,104189,102189],{"class":87},[34,104191,102192],{"class":156},[34,104193,4392],{"class":40},[34,104195,104196],{"class":36,"line":8686},[34,104197,102199],{"class":40},[108,104199,104200],{},"保存为：",[24,104202,104204],{"className":24474,"code":104203,"language":24476,"meta":29,"style":29},"touch ch2_xml_basic.py\n",[31,104205,104206],{"__ignoreMap":29},[34,104207,104208,104210],{"class":36,"line":37},[34,104209,101913],{"class":149},[34,104211,104212],{"class":156}," ch2_xml_basic.py\n",[108,104214,102931],{},[24,104216,104218],{"className":24474,"code":104217,"language":24476,"meta":29,"style":29},"python ch2_xml_basic.py\n",[31,104219,104220],{"__ignoreMap":29},[34,104221,104222,104224],{"class":36,"line":37},[34,104223,31031],{"class":149},[34,104225,104212],{"class":156},[19,104227,102202],{"id":102202},[108,104229,104230],{},"用名字查找 body：",[24,104232,104234],{"className":31029,"code":104233,"language":31031,"meta":29,"style":29},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[31,104235,104236],{"__ignoreMap":29},[34,104237,104238,104241,104243,104245,104247],{"class":36,"line":37},[34,104239,104240],{"class":40},"box_body_id ",[34,104242,153],{"class":87},[34,104244,104020],{"class":40},[34,104246,104023],{"class":156},[34,104248,807],{"class":40},[108,104250,104251],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[108,104253,104254],{},"用名字查找 site：",[24,104256,104258],{"className":31029,"code":104257,"language":31031,"meta":29,"style":29},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[31,104259,104260],{"__ignoreMap":29},[34,104261,104262,104265,104267,104269,104271],{"class":36,"line":37},[34,104263,104264],{"class":40},"site_id ",[34,104266,153],{"class":87},[34,104268,104035],{"class":40},[34,104270,104038],{"class":156},[34,104272,807],{"class":40},[108,104274,104275,104276,104279,104280,104283],{},"注意第二个参数是对象类型。查 body 就用 ",[31,104277,104278],{},"mjOBJ_BODY","，查 site 就用 ",[31,104281,104282],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[108,104285,104286],{},"读取世界坐标：",[24,104288,104290],{"className":31029,"code":104289,"language":31031,"meta":29,"style":29},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[31,104291,104292,104297],{"__ignoreMap":29},[34,104293,104294],{"class":36,"line":37},[34,104295,104296],{"class":40},"data.xpos[box_body_id]\n",[34,104298,104299],{"class":36,"line":51},[34,104300,104301],{"class":40},"data.site_xpos[site_id]\n",[108,104303,104304,104307,104308,104311],{},[31,104305,104306],{},"xpos"," 是 body 的世界坐标，",[31,104309,104310],{},"site_xpos"," 是 site 的世界坐标。",[19,104313,102338],{"id":102338},[24,104315,104317],{"className":31029,"code":104316,"language":31031,"meta":29,"style":29},"import mujoco\nimport numpy as np\n",[31,104318,104319,104325],{"__ignoreMap":29},[34,104320,104321,104323],{"class":36,"line":37},[34,104322,31043],{"class":87},[34,104324,101931],{"class":40},[34,104326,104327,104329,104331,104333],{"class":36,"line":51},[34,104328,31043],{"class":87},[34,104330,32031],{"class":40},[34,104332,32034],{"class":87},[34,104334,32037],{"class":40},[108,104336,104337,104338,104341,104342,104345,104346,1008,104349,29036],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[31,104339,104340],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[31,104343,104344],{},"as np"," 是习惯写法，后面就可以写 ",[31,104347,104348],{},"np.array(...)",[31,104350,104351],{},"np.round(...)",[24,104353,104354],{"className":31029,"code":102225,"language":31031,"meta":29,"style":29},[31,104355,104356,104364,104368],{"__ignoreMap":29},[34,104357,104358,104360,104362],{"class":36,"line":37},[34,104359,101944],{"class":63},[34,104361,14217],{"class":87},[34,104363,101949],{"class":156},[34,104365,104366],{"class":36,"line":51},[34,104367,102240],{"class":156},[34,104369,104370],{"class":36,"line":60},[34,104371,96328],{"class":156},[108,104373,104374,104375,29036],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[31,104376,104377],{},"mujoco.MjModel.from_xml_string(XML)",[24,104379,104381],{"className":53713,"code":104380,"language":53715,"meta":29,"style":29},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[31,104382,104383],{"__ignoreMap":29},[34,104384,104385,104387,104389,104391,104393,104395,104397,104399,104402,104404,104406,104409,104411,104413,104416],{"class":36,"line":37},[34,104386,41],{"class":40},[34,104388,103840],{"class":44},[34,104390,15573],{"class":149},[34,104392,153],{"class":40},[34,104394,104038],{"class":156},[34,104396,101736],{"class":149},[34,104398,153],{"class":40},[34,104400,104401],{"class":156},"\"0 0 0\"",[34,104403,101766],{"class":149},[34,104405,153],{"class":40},[34,104407,104408],{"class":156},"\"0.03\"",[34,104410,79397],{"class":149},[34,104412,153],{"class":40},[34,104414,104415],{"class":156},"\"0 1 0 1\"",[34,104417,101774],{"class":40},[108,104419,104420,104422,104423,104426,104427,104429,104430,104433],{},[31,104421,103840],{}," 是标记点。",[31,104424,104425],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[31,104428,103800],{}," 表示显示出来的小球大小。",[31,104431,104432],{},"rgba=\"0 1 0 1\""," 表示绿色。",[24,104435,104436],{"className":31029,"code":104233,"language":31031,"meta":29,"style":29},[31,104437,104438],{"__ignoreMap":29},[34,104439,104440,104442,104444,104446,104448],{"class":36,"line":37},[34,104441,104240],{"class":40},[34,104443,153],{"class":87},[34,104445,104020],{"class":40},[34,104447,104023],{"class":156},[34,104449,807],{"class":40},[108,104451,104452,104453,104455],{},"这行的作用是：根据名字 ",[31,104454,104023],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[108,104457,104458],{},"拆开看：",[752,104460,104461,104467,104472,104478],{},[755,104462,104463,104466],{},[31,104464,104465],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[755,104468,104469,104471],{},[31,104470,102715],{}," 是被查询的模型。",[755,104473,104474,104477],{},[31,104475,104476],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[755,104479,104480,104482],{},[31,104481,104023],{}," 是 XML 里写的名字。",[24,104484,104485],{"className":31029,"code":104257,"language":31031,"meta":29,"style":29},[31,104486,104487],{"__ignoreMap":29},[34,104488,104489,104491,104493,104495,104497],{"class":36,"line":37},[34,104490,104264],{"class":40},[34,104492,153],{"class":87},[34,104494,104035],{"class":40},[34,104496,104038],{"class":156},[34,104498,807],{"class":40},[108,104500,104501,104502,29036],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[31,104503,104038],{},[24,104505,104507],{"className":31029,"code":104506,"language":31031,"meta":29,"style":29},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[31,104508,104509,104521],{"__ignoreMap":29},[34,104510,104511,104513,104515,104517,104519],{"class":36,"line":37},[34,104512,2191],{"class":87},[34,104514,104051],{"class":40},[34,104516,41],{"class":87},[34,104518,4746],{"class":63},[34,104520,4392],{"class":40},[34,104522,104523,104526,104528,104530,104532],{"class":36,"line":51},[34,104524,104525],{"class":87},"    raise",[34,104527,104065],{"class":63},[34,104529,801],{"class":40},[34,104531,104070],{"class":156},[34,104533,807],{"class":40},[108,104535,104536,104538,104539,104542,104543,104546,104547,104550],{},[31,104537,2191],{}," 是条件判断。",[31,104540,104541],{},"mj_name2id"," 找不到对象时会返回 ",[31,104544,104545],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[31,104548,104549],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[24,104552,104554],{"className":31029,"code":104553,"language":31031,"meta":29,"style":29},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[31,104555,104556,104572],{"__ignoreMap":29},[34,104557,104558,104560,104562,104564,104566,104568,104570],{"class":36,"line":37},[34,104559,3678],{"class":87},[34,104561,102131],{"class":40},[34,104563,26695],{"class":87},[34,104565,33094],{"class":63},[34,104567,801],{"class":40},[34,104569,2376],{"class":63},[34,104571,31437],{"class":40},[34,104573,104574],{"class":36,"line":51},[34,104575,102329],{"class":40},[108,104577,104578],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[24,104580,104582],{"className":31029,"code":104581,"language":31031,"meta":29,"style":29},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[31,104583,104584],{"__ignoreMap":29},[34,104585,104586,104588,104590,104592],{"class":36,"line":37},[34,104587,31066],{"class":63},[34,104589,801],{"class":40},[34,104591,104146],{"class":156},[34,104593,104149],{"class":40},[108,104595,104596,104598,104599,104602],{},[31,104597,101709],{}," 保存所有 body 的世界坐标。",[31,104600,104601],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[24,104604,104606],{"className":31029,"code":104605,"language":31031,"meta":29,"style":29},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[31,104607,104608],{"__ignoreMap":29},[34,104609,104610,104612,104614,104616],{"class":36,"line":37},[34,104611,31066],{"class":63},[34,104613,801],{"class":40},[34,104615,104158],{"class":156},[34,104617,104161],{"class":40},[108,104619,104620,104623,104624,104626],{},[31,104621,104622],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[31,104625,103607],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[24,104628,104630],{"className":31029,"code":104629,"language":31031,"meta":29,"style":29},"print(\"box qpos:\", np.array(data.qpos))\n",[31,104631,104632],{"__ignoreMap":29},[34,104633,104634,104636,104638,104640],{"class":36,"line":37},[34,104635,31066],{"class":63},[34,104637,801],{"class":40},[34,104639,104170],{"class":156},[34,104641,104173],{"class":40},[108,104643,104644,104645,104648],{},"这里打印广义位置数组。",[31,104646,104647],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104650,102946],{"id":102945},[108,104652,104653,104654,104657,104658,29036],{},"程序会输出 ",[31,104655,104656],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[31,104659,104660],{},"qpos",[108,104662,104663,104665,104666,104669,104670,104673],{},[31,104664,104601],{}," 是 body 的世界坐标位置。",[31,104667,104668],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[31,104671,104672],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[108,104675,82852,104676,83160,104678,104680],{},[31,104677,103607],{},[31,104679,104425],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[108,104682,104683],{},"如果你把 site 改成：",[24,104685,104687],{"className":53713,"code":104686,"language":53715,"meta":29,"style":29},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[31,104688,104689],{"__ignoreMap":29},[34,104690,104691,104693,104695,104697,104699,104702,104704,104706,104709,104711,104713,104715,104717,104719,104721],{"class":36,"line":37},[34,104692,41],{"class":40},[34,104694,103840],{"class":44},[34,104696,15573],{"class":149},[34,104698,153],{"class":40},[34,104700,104701],{"class":156},"\"box_top\"",[34,104703,101736],{"class":149},[34,104705,153],{"class":40},[34,104707,104708],{"class":156},"\"0 0 0.15\"",[34,104710,101766],{"class":149},[34,104712,153],{"class":40},[34,104714,104408],{"class":156},[34,104716,79397],{"class":149},[34,104718,153],{"class":40},[34,104720,104415],{"class":156},[34,104722,101774],{"class":40},[108,104724,104725,104726,104729],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[31,104727,104728],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104731,102978],{"id":102977},[752,104733,104734,104743,104746,104753,104759,104770],{},[755,104735,103041,104736,104738,104739,103044,104741,29036],{},[31,104737,103611],{}," 的初始高度从 ",[31,104740,1013],{},[31,104742,875],{},[755,104744,104745],{},"重新运行程序。",[755,104747,104748,104749,104752],{},"观察 ",[31,104750,104751],{},"box qpos"," 和最终位置是否变化。",[755,104754,104755,104756,104758],{},"故意把 ",[31,104757,103840],{}," 名称改错，确认程序能报错。",[755,104760,103041,104761,104763,104764,103044,104766,104769],{},[31,104762,101750],{}," 的颜色 ",[31,104765,102662],{},[31,104767,104768],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[755,104771,103041,104772,83160,104774,103044,104777,104780,104781,104783],{},[31,104773,103607],{},[31,104775,104776],{},"pos",[31,104778,104779],{},"0 0 0.2","，观察 ",[31,104782,104728],{}," 如何变化。",[14,104785,103083],{"id":103082},[19,104787,104789],{"id":104788},"xml-error-schema-violation",[31,104790,104791],{},"XML Error: Schema violation",[108,104793,104794],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[19,104796,104798,81920,104800],{"id":104797},"mj_name2id-返回-1",[31,104799,104541],{},[31,104801,104545],{},[108,104803,104804,104805,104808],{},"说明名字没有找到。检查 XML 中 ",[31,104806,104807],{},"name=\"...\"","，并确认对象类型正确。",[19,104810,104811],{"id":104811},"物体不下落",[108,104813,103153],{},[752,104815,104816,104821,104826],{},[755,104817,104818,104819],{},"body 是否有 ",[31,104820,102250],{},[755,104822,104823,104824],{},"gravity 是否为 ",[31,104825,103219],{},[755,104827,104828,104829,104831],{},"body 是否被固定在 ",[31,104830,102471],{}," 中",[19,104833,104834],{"id":104834},"坐标看起来不符合预期",[108,104836,104837],{},"先区分两种坐标：",[934,104839,104840,104849],{},[937,104841,104842],{},[940,104843,104844,104847],{},[943,104845,104846],{"align":24388},"坐标",[943,104848,101330],{"align":24388},[980,104850,104851,104861],{},[940,104852,104853,104858],{},[985,104854,104855,104856],{"align":24388},"XML 里的 ",[31,104857,104776],{},[985,104859,104860],{"align":24388},"相对父 body 的局部坐标",[940,104862,104863,104869],{},[985,104864,104865,25631,104867],{"align":24388},[31,104866,101709],{},[31,104868,104622],{},[985,104870,104871],{"align":24388},"仿真更新后的世界坐标",[108,104873,104874,104875,104877,104878,83169,104881,104883],{},"如果你修改了 ",[31,104876,101700],{},"，但还没调用 ",[31,104879,104880],{},"mj_forward",[31,104882,101845],{},"，世界坐标可能还没有更新。",[14,104885,103237],{"id":103236},[108,104887,104888],{},"MJCF 建模先掌握四件事：",[752,104890,104891,104896,104901,104906],{},[755,104892,104893,104895],{},[31,104894,52446],{}," 表示刚体层级。",[755,104897,104898,104900],{},[31,104899,101750],{}," 表示形状、碰撞和质量。",[755,104902,104903,104905],{},[31,104904,103586],{}," 决定 body 能不能动、怎么动。",[755,104907,104908,104910],{},[31,104909,103840],{}," 用来标记关键点，方便 Python 读取位置。",[108,104912,104913],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[45,104915,104916],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":104918},[104919,104920,104921,104927,104931,104932,104933,104940],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":104922},[104923,104924,104925,104926],{"id":103590,"depth":60,"text":103590},{"id":103704,"depth":60,"text":103704},{"id":103730,"depth":60,"text":103731},{"id":103834,"depth":60,"text":103835},{"id":101882,"depth":51,"text":101883,"children":104928},[104929,104930],{"id":102202,"depth":60,"text":102202},{"id":102338,"depth":60,"text":102338},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":104934},[104935,104936,104938,104939],{"id":104788,"depth":60,"text":104791},{"id":104797,"depth":60,"text":104937},"mj_name2id 返回 -1",{"id":104811,"depth":60,"text":104811},{"id":104834,"depth":60,"text":104834},{"id":103236,"depth":51,"text":103237},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103284,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104947,"title":104948,"body":104949,"description":29,"extension":724,"meta":106444,"navigation":726,"path":106445,"seo":106446,"stem":106447,"__hash__":106448},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104950,"toc":106416},[104951,104954,104956,104959,104962,105000,105003,105009,105012,105014,105016,105043,105045,105059,105061,105102,105104,105128,105130,105133,105142,105151,105154,105163,105171,105180,105183,105193,105196,105248,105255,105261,105269,105317,105320,105339,105342,105350,105354,105363,105396,105398,105746,105748,105760,105762,105773,105775,105778,105799,105805,105808,105833,105843,105846,105854,105857,105860,105881,105892,105894,105914,105917,105938,105947,105966,105972,105997,106000,106014,106021,106045,106048,106056,106065,106081,106093,106101,106110,106112,106115,106139,106144,106147,106169,106171,106210,106212,106219,106221,106229,106232,106235,106247,106288,106295,106306,106313,106316,106365,106368,106371,106377,106379,106384,106410,106413],[10,104952,104948],{"id":104953},"_3python-控制接口读取状态与推进仿真",[14,104955,101277],{"id":101276},[108,104957,104958],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[108,104960,104961],{},"你将学习:",[752,104963,104964,104969,104974,104978,104983,104994],{},[755,104965,104966],{},[31,104967,104968],{},"MjModel.from_xml_string",[755,104970,104971],{},[31,104972,104973],{},"MjData(model)",[755,104975,104976],{},[31,104977,101845],{},[755,104979,104980],{},[31,104981,104982],{},"mj_resetData",[755,104984,104985,104986,1008,104988,1008,104991],{},"读取 ",[31,104987,104660],{},[31,104989,104990],{},"qvel",[31,104992,104993],{},"ctrl",[755,104995,104996,104997],{},"使用 ",[31,104998,104999],{},"model.opt.timestep",[108,105001,105002],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[24,105004,105007],{"className":105005,"code":105006,"language":5840,"meta":29},[5838],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[31,105008,105006],{"__ignoreMap":29},[108,105010,105011],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105013,101400],{"id":101399},[108,105015,101403],{},[24,105017,105019],{"className":24474,"code":105018,"language":24476,"meta":29,"style":29},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[31,105020,105021],{"__ignoreMap":29},[34,105022,105023,105025,105027,105029,105031,105034,105036,105038,105040],{"class":36,"line":37},[34,105024,25229],{"class":149},[34,105026,26967],{"class":156},[34,105028,24486],{"class":156},[34,105030,27052],{"class":63},[34,105032,105033],{"class":156}," python3",[34,105035,101428],{"class":156},[34,105037,103131],{"class":156},[34,105039,101444],{"class":156},[34,105041,105042],{"class":156}," glfw\n",[108,105044,103449],{},[24,105046,105047],{"className":24474,"code":101549,"language":24476,"meta":29,"style":29},[31,105048,105049],{"__ignoreMap":29},[34,105050,105051,105053,105055,105057],{"class":36,"line":37},[34,105052,24483],{"class":149},[34,105054,24486],{"class":156},[34,105056,101560],{"class":156},[34,105058,101563],{"class":156},[108,105060,103466],{},[24,105062,105064],{"className":24474,"code":105063,"language":24476,"meta":29,"style":29},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[31,105065,105066,105083,105092],{"__ignoreMap":29},[34,105067,105068,105070,105072,105074,105077,105079,105081],{"class":36,"line":37},[34,105069,30981],{"class":149},[34,105071,29827],{"class":156},[34,105073,25768],{"class":63},[34,105075,105076],{"class":156}," mujoco-python-api",[34,105078,101605],{"class":156},[34,105080,101608],{"class":63},[34,105082,101611],{"class":63},[34,105084,105085,105087,105089],{"class":36,"line":51},[34,105086,30981],{"class":149},[34,105088,101618],{"class":156},[34,105090,105091],{"class":156}," mujoco-python-api\n",[34,105093,105094,105096,105098,105100],{"class":36,"line":60},[34,105095,24483],{"class":149},[34,105097,24486],{"class":156},[34,105099,101560],{"class":156},[34,105101,101563],{"class":156},[108,105103,101634],{},[752,105105,105106,105113,105122],{},[755,105107,105108,101648,105110,105112],{},[31,105109,101305],{},[31,105111,101310],{}," 是官方 Python bindings 的类名。",[755,105114,105115,105116,105119,105120,29036],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[31,105117,105118],{},"mjModel"," 在 Python 中是 ",[31,105121,101339],{},[755,105123,105124,105125,29036],{},"不要使用 ",[31,105126,105127],{},"sim = mujoco_py.MjSim(...)",[14,105129,101675],{"id":101674},[108,105131,105132],{},"仿真推进核心代码:",[24,105134,105136],{"className":31029,"code":105135,"language":31031,"meta":29,"style":29},"mujoco.mj_step(model, data)\n",[31,105137,105138],{"__ignoreMap":29},[34,105139,105140],{"class":36,"line":37},[34,105141,105135],{"class":40},[108,105143,105144,105145,1008,105147,1008,105149,29036],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[31,105146,101700],{},[31,105148,101703],{},[31,105150,101697],{},[108,105152,105153],{},"重置仿真:",[24,105155,105157],{"className":31029,"code":105156,"language":31031,"meta":29,"style":29},"mujoco.mj_resetData(model, data)\n",[31,105158,105159],{"__ignoreMap":29},[34,105160,105161],{"class":36,"line":37},[34,105162,105156],{"class":40},[108,105164,105165,105166,83169,105168,105170],{},"如果手动修改了 ",[31,105167,101700],{},[31,105169,101703],{},"，通常应调用:",[24,105172,105174],{"className":31029,"code":105173,"language":31031,"meta":29,"style":29},"mujoco.mj_forward(model, data)\n",[31,105175,105176],{"__ignoreMap":29},[34,105177,105178],{"class":36,"line":37},[34,105179,105173],{"class":40},[108,105181,105182],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[19,105184,105186,1008,105188,1008,105190,105192],{"id":105185},"qposqvelctrl-是什么",[31,105187,104660],{},[31,105189,104990],{},[31,105191,104993],{}," 是什么",[108,105194,105195],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[934,105197,105198,105210],{},[937,105199,105200],{},[940,105201,105202,105205,105207],{},[943,105203,105204],{"align":24388},"字段",[943,105206,101330],{"align":24388},[943,105208,105209],{"align":24388},"谁来修改",[980,105211,105212,105224,105236],{},[940,105213,105214,105218,105221],{},[985,105215,105216],{"align":24388},[31,105217,101700],{},[985,105219,105220],{"align":24388},"广义位置，例如小车位置、关节角、自由物体位置姿态",[985,105222,105223],{"align":24388},"MuJoCo 更新，也可以手动设置初始状态",[940,105225,105226,105230,105233],{},[985,105227,105228],{"align":24388},[31,105229,101703],{},[985,105231,105232],{"align":24388},"广义速度，例如小车速度、关节角速度",[985,105234,105235],{"align":24388},"MuJoCo 更新，也可以手动清零",[940,105237,105238,105242,105245],{},[985,105239,105240],{"align":24388},[31,105241,101706],{},[985,105243,105244],{"align":24388},"actuator 的控制输入",[985,105246,105247],{"align":24388},"主要由你的控制代码写入",[108,105249,9678,105250,101648,105252,105254],{},[31,105251,104660],{},[31,105253,104990],{}," 不一定同维。自由刚体就是典型例子：",[24,105256,105259],{"className":105257,"code":105258,"language":5840,"meta":29},[5838],"freejoint: qpos 7 维，qvel 6 维\n",[31,105260,105258],{"__ignoreMap":29},[19,105262,105264,101648,105266,105268],{"id":105263},"mj_step-和-mj_forward-的区别",[31,105265,101845],{},[31,105267,104880],{}," 的区别",[934,105270,105271,105284],{},[937,105272,105273],{},[940,105274,105275,105278,105281],{},[943,105276,105277],{"align":24388},"函数",[943,105279,105280],{"align":24388},"是否推进时间",[943,105282,105283],{"align":24388},"什么时候用",[980,105285,105286,105299],{},[940,105287,105288,105293,105296],{},[985,105289,105290],{"align":24388},[31,105291,105292],{},"mj_step(model, data)",[985,105294,105295],{"align":24388},"是",[985,105297,105298],{"align":24388},"正常仿真循环，每调用一次前进一步",[940,105300,105301,105306,105309],{},[985,105302,105303],{"align":24388},[31,105304,105305],{},"mj_forward(model, data)",[985,105307,105308],{"align":24388},"否",[985,105310,105311,105312,1008,105314,105316],{"align":24388},"手动改了 ",[31,105313,104660],{},[31,105315,104990],{}," 后，刷新派生量",[108,105318,105319],{},"例如你写：",[24,105321,105323],{"className":31029,"code":105322,"language":31031,"meta":29,"style":29},"data.qpos[2] = 2.0\n",[31,105324,105325],{"__ignoreMap":29},[34,105326,105327,105330,105332,105334,105336],{"class":36,"line":37},[34,105328,105329],{"class":40},"data.qpos[",[34,105331,875],{"class":63},[34,105333,5096],{"class":40},[34,105335,153],{"class":87},[34,105337,105338],{"class":63}," 2.0\n",[108,105340,105341],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[24,105343,105344],{"className":31029,"code":105173,"language":31031,"meta":29,"style":29},[31,105345,105346],{"__ignoreMap":29},[34,105347,105348],{"class":36,"line":37},[34,105349,105173],{"class":40},[19,105351,105353],{"id":105352},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[108,105355,105356,105359,105360,105362],{},[31,105357,105358],{},"mujoco.mj_resetData(model, data)"," 会把 ",[31,105361,34052],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[24,105364,105366],{"className":31029,"code":105365,"language":31031,"meta":29,"style":29},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[31,105367,105368,105372,105382,105392],{"__ignoreMap":29},[34,105369,105370],{"class":36,"line":37},[34,105371,105156],{"class":40},[34,105373,105374,105377,105379],{"class":36,"line":51},[34,105375,105376],{"class":40},"data.qpos[:] ",[34,105378,153],{"class":87},[34,105380,105381],{"class":40}," random_qpos\n",[34,105383,105384,105387,105389],{"class":36,"line":60},[34,105385,105386],{"class":40},"data.qvel[:] ",[34,105388,153],{"class":87},[34,105390,105391],{"class":63}," 0.0\n",[34,105393,105394],{"class":36,"line":76},[34,105395,105173],{"class":40},[14,105397,101883],{"id":101882},[24,105399,105401],{"className":31029,"code":105400,"language":31031,"meta":29,"style":29},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,105402,105403,105409,105419,105423,105427,105435,105440,105444,105448,105452,105457,105461,105466,105471,105476,105480,105484,105488,105492,105496,105500,105519,105526,105538,105549,105565,105581,105585,105589,105601,105613,105621,105625,105636,105640,105656,105660,105664,105673,105677,105682,105691,105695,105708,105713,105722,105726,105730,105742],{"__ignoreMap":29},[34,105404,105405,105407],{"class":36,"line":37},[34,105406,31043],{"class":87},[34,105408,101931],{"class":40},[34,105410,105411,105413,105415,105417],{"class":36,"line":51},[34,105412,31043],{"class":87},[34,105414,32031],{"class":40},[34,105416,32034],{"class":87},[34,105418,32037],{"class":40},[34,105420,105421],{"class":36,"line":60},[34,105422,3053],{"emptyLinePlaceholder":726},[34,105424,105425],{"class":36,"line":76},[34,105426,3053],{"emptyLinePlaceholder":726},[34,105428,105429,105431,105433],{"class":36,"line":93},[34,105430,101944],{"class":63},[34,105432,14217],{"class":87},[34,105434,101949],{"class":156},[34,105436,105437],{"class":36,"line":99},[34,105438,105439],{"class":156},"\u003Cmujoco model=\"state_api\">\n",[34,105441,105442],{"class":36,"line":353},[34,105443,101959],{"class":156},[34,105445,105446],{"class":36,"line":359},[34,105447,3053],{"emptyLinePlaceholder":726},[34,105449,105450],{"class":36,"line":579},[34,105451,101968],{"class":156},[34,105453,105454],{"class":36,"line":589},[34,105455,105456],{"class":156},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[34,105458,105459],{"class":36,"line":601},[34,105460,3053],{"emptyLinePlaceholder":726},[34,105462,105463],{"class":36,"line":613},[34,105464,105465],{"class":156},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[34,105467,105468],{"class":36,"line":618},[34,105469,105470],{"class":156},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[34,105472,105473],{"class":36,"line":628},[34,105474,105475],{"class":156},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[34,105477,105478],{"class":36,"line":640},[34,105479,101997],{"class":156},[34,105481,105482],{"class":36,"line":2301},[34,105483,102002],{"class":156},[34,105485,105486],{"class":36,"line":2307},[34,105487,102007],{"class":156},[34,105489,105490],{"class":36,"line":2328},[34,105491,96328],{"class":156},[34,105493,105494],{"class":36,"line":2333},[34,105495,3053],{"emptyLinePlaceholder":726},[34,105497,105498],{"class":36,"line":2347},[34,105499,3053],{"emptyLinePlaceholder":726},[34,105501,105502,105504,105507,105510,105512,105515,105517],{"class":36,"line":2352},[34,105503,32598],{"class":87},[34,105505,105506],{"class":149}," print_state",[34,105508,105509],{"class":40},"(prefix: ",[34,105511,1962],{"class":63},[34,105513,105514],{"class":40},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[34,105516,96316],{"class":63},[34,105518,4392],{"class":40},[34,105520,105521,105523],{"class":36,"line":2381},[34,105522,31950],{"class":63},[34,105524,105525],{"class":40},"(prefix)\n",[34,105527,105528,105530,105532,105535],{"class":36,"line":2386},[34,105529,31950],{"class":63},[34,105531,801],{"class":40},[34,105533,105534],{"class":156},"\"  timestep:\"",[34,105536,105537],{"class":40},", model.opt.timestep)\n",[34,105539,105540,105542,105544,105547],{"class":36,"line":2403},[34,105541,31950],{"class":63},[34,105543,801],{"class":40},[34,105545,105546],{"class":156},"\"  time:\"",[34,105548,102108],{"class":40},[34,105550,105551,105553,105555,105558,105561,105563],{"class":36,"line":2408},[34,105552,31950],{"class":63},[34,105554,801],{"class":40},[34,105556,105557],{"class":156},"\"  qpos:\"",[34,105559,105560],{"class":40},", np.round(data.qpos.copy(), ",[34,105562,1088],{"class":63},[34,105564,31148],{"class":40},[34,105566,105567,105569,105571,105574,105577,105579],{"class":36,"line":2413},[34,105568,31950],{"class":63},[34,105570,801],{"class":40},[34,105572,105573],{"class":156},"\"  qvel:\"",[34,105575,105576],{"class":40},", np.round(data.qvel.copy(), ",[34,105578,1088],{"class":63},[34,105580,31148],{"class":40},[34,105582,105583],{"class":36,"line":2418},[34,105584,3053],{"emptyLinePlaceholder":726},[34,105586,105587],{"class":36,"line":2432},[34,105588,3053],{"emptyLinePlaceholder":726},[34,105590,105591,105593,105595,105597,105599],{"class":36,"line":2437},[34,105592,32598],{"class":87},[34,105594,2626],{"class":149},[34,105596,102028],{"class":40},[34,105598,96316],{"class":63},[34,105600,4392],{"class":40},[34,105602,105603,105605,105607,105609,105611],{"class":36,"line":3230},[34,105604,102037],{"class":40},[34,105606,153],{"class":87},[34,105608,102042],{"class":40},[34,105610,101944],{"class":63},[34,105612,807],{"class":40},[34,105614,105615,105617,105619],{"class":36,"line":3244},[34,105616,102051],{"class":40},[34,105618,153],{"class":87},[34,105620,102056],{"class":40},[34,105622,105623],{"class":36,"line":3252},[34,105624,3053],{"emptyLinePlaceholder":726},[34,105626,105627,105630,105633],{"class":36,"line":3257},[34,105628,105629],{"class":40},"    print_state(",[34,105631,105632],{"class":156},"\"initial\"",[34,105634,105635],{"class":40},", model, data)\n",[34,105637,105638],{"class":36,"line":3263},[34,105639,3053],{"emptyLinePlaceholder":726},[34,105641,105642,105644,105646,105648,105650,105652,105654],{"class":36,"line":3269},[34,105643,3854],{"class":87},[34,105645,102131],{"class":40},[34,105647,26695],{"class":87},[34,105649,33094],{"class":63},[34,105651,801],{"class":40},[34,105653,1451],{"class":63},[34,105655,31437],{"class":40},[34,105657,105658],{"class":36,"line":3274},[34,105659,102146],{"class":40},[34,105661,105662],{"class":36,"line":8601},[34,105663,3053],{"emptyLinePlaceholder":726},[34,105665,105666,105668,105671],{"class":36,"line":8625},[34,105667,105629],{"class":40},[34,105669,105670],{"class":156},"\"after 50 steps\"",[34,105672,105635],{"class":40},[34,105674,105675],{"class":36,"line":8630},[34,105676,3053],{"emptyLinePlaceholder":726},[34,105678,105679],{"class":36,"line":8636},[34,105680,105681],{"class":40},"    mujoco.mj_resetData(model, data)\n",[34,105683,105684,105686,105689],{"class":36,"line":8663},[34,105685,105629],{"class":40},[34,105687,105688],{"class":156},"\"after reset\"",[34,105690,105635],{"class":40},[34,105692,105693],{"class":36,"line":8668},[34,105694,3053],{"emptyLinePlaceholder":726},[34,105696,105697,105700,105702,105704,105706],{"class":36,"line":8674},[34,105698,105699],{"class":40},"    data.qpos[",[34,105701,875],{"class":63},[34,105703,5096],{"class":40},[34,105705,153],{"class":87},[34,105707,105338],{"class":63},[34,105709,105710],{"class":36,"line":8686},[34,105711,105712],{"class":40},"    mujoco.mj_forward(model, data)\n",[34,105714,105715,105717,105720],{"class":36,"line":8698},[34,105716,105629],{"class":40},[34,105718,105719],{"class":156},"\"after manual qpos edit\"",[34,105721,105635],{"class":40},[34,105723,105724],{"class":36,"line":8710},[34,105725,3053],{"emptyLinePlaceholder":726},[34,105727,105728],{"class":36,"line":10369},[34,105729,3053],{"emptyLinePlaceholder":726},[34,105731,105732,105734,105736,105738,105740],{"class":36,"line":10394},[34,105733,2191],{"class":87},[34,105735,31871],{"class":63},[34,105737,102189],{"class":87},[34,105739,102192],{"class":156},[34,105741,4392],{"class":40},[34,105743,105744],{"class":36,"line":10417},[34,105745,102199],{"class":40},[108,105747,104200],{},[24,105749,105751],{"className":24474,"code":105750,"language":24476,"meta":29,"style":29},"touch ch3_python_state.py\n",[31,105752,105753],{"__ignoreMap":29},[34,105754,105755,105757],{"class":36,"line":37},[34,105756,101913],{"class":149},[34,105758,105759],{"class":156}," ch3_python_state.py\n",[108,105761,102931],{},[24,105763,105765],{"className":24474,"code":105764,"language":24476,"meta":29,"style":29},"python ch3_python_state.py\n",[31,105766,105767],{"__ignoreMap":29},[34,105768,105769,105771],{"class":36,"line":37},[34,105770,31031],{"class":149},[34,105772,105759],{"class":156},[19,105774,102202],{"id":102202},[108,105776,105777],{},"打印状态的函数：",[24,105779,105781],{"className":31029,"code":105780,"language":31031,"meta":29,"style":29},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[31,105782,105783],{"__ignoreMap":29},[34,105784,105785,105787,105789,105791,105793,105795,105797],{"class":36,"line":37},[34,105786,32598],{"class":87},[34,105788,105506],{"class":149},[34,105790,105509],{"class":40},[34,105792,1962],{"class":63},[34,105794,105514],{"class":40},[34,105796,96316],{"class":63},[34,105798,4392],{"class":40},[108,105800,105801,105802,105804],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[31,105803,34052],{}," 里发生了什么。",[108,105806,105807],{},"推进 50 步：",[24,105809,105811],{"className":31029,"code":105810,"language":31031,"meta":29,"style":29},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[31,105812,105813,105829],{"__ignoreMap":29},[34,105814,105815,105817,105819,105821,105823,105825,105827],{"class":36,"line":37},[34,105816,3678],{"class":87},[34,105818,102131],{"class":40},[34,105820,26695],{"class":87},[34,105822,33094],{"class":63},[34,105824,801],{"class":40},[34,105826,1451],{"class":63},[34,105828,31437],{"class":40},[34,105830,105831],{"class":36,"line":51},[34,105832,102329],{"class":40},[108,105834,105835,105836,105839,105840,105842],{},"由于 ",[31,105837,105838],{},"timestep=0.01","，所以 50 步后时间约为 ",[31,105841,35980],{}," 秒。",[108,105844,105845],{},"重置：",[24,105847,105848],{"className":31029,"code":105156,"language":31031,"meta":29,"style":29},[31,105849,105850],{"__ignoreMap":29},[34,105851,105852],{"class":36,"line":37},[34,105853,105156],{"class":40},[108,105855,105856],{},"这会把时间、位置、速度恢复到初始状态。",[108,105858,105859],{},"手动改高度：",[24,105861,105863],{"className":31029,"code":105862,"language":31031,"meta":29,"style":29},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[31,105864,105865,105877],{"__ignoreMap":29},[34,105866,105867,105869,105871,105873,105875],{"class":36,"line":37},[34,105868,105329],{"class":40},[34,105870,875],{"class":63},[34,105872,5096],{"class":40},[34,105874,153],{"class":87},[34,105876,105338],{"class":63},[34,105878,105879],{"class":36,"line":51},[34,105880,105173],{"class":40},[108,105882,105883,105884,105887,105888,105891],{},"这个例子里 ",[31,105885,105886],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[31,105889,105890],{},"2.0"," 表示把小球放到更高的位置。",[19,105893,102338],{"id":102338},[24,105895,105896],{"className":31029,"code":105780,"language":31031,"meta":29,"style":29},[31,105897,105898],{"__ignoreMap":29},[34,105899,105900,105902,105904,105906,105908,105910,105912],{"class":36,"line":37},[34,105901,32598],{"class":87},[34,105903,105506],{"class":149},[34,105905,105509],{"class":40},[34,105907,1962],{"class":63},[34,105909,105514],{"class":40},[34,105911,96316],{"class":63},[34,105913,4392],{"class":40},[108,105915,105916],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[752,105918,105919,105928,105933],{},[755,105920,105921,105924,105925,105927],{},[31,105922,105923],{},"prefix","：一段文字，比如 ",[31,105926,105632],{},"，用来说明现在打印的是哪个阶段。",[755,105929,105930,105932],{},[31,105931,102715],{},"：MuJoCo 模型。",[755,105934,105935,105937],{},[31,105936,34052],{},"：MuJoCo 当前状态。",[108,105939,105940,1008,105943,105946],{},[31,105941,105942],{},"prefix: str",[31,105944,105945],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[24,105948,105950],{"className":31029,"code":105949,"language":31031,"meta":29,"style":29},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[31,105951,105952],{"__ignoreMap":29},[34,105953,105954,105956,105958,105960,105962,105964],{"class":36,"line":37},[34,105955,31066],{"class":63},[34,105957,801],{"class":40},[34,105959,105557],{"class":156},[34,105961,105560],{"class":40},[34,105963,1088],{"class":63},[34,105965,31148],{"class":40},[108,105967,105968,105971],{},[31,105969,105970],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[24,105973,105975],{"className":31029,"code":105974,"language":31031,"meta":29,"style":29},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[31,105976,105977,105989],{"__ignoreMap":29},[34,105978,105979,105981,105983,105985,105987],{"class":36,"line":37},[34,105980,102264],{"class":40},[34,105982,153],{"class":87},[34,105984,102042],{"class":40},[34,105986,101944],{"class":63},[34,105988,807],{"class":40},[34,105990,105991,105993,105995],{"class":36,"line":51},[34,105992,102288],{"class":40},[34,105994,153],{"class":87},[34,105996,102056],{"class":40},[108,105998,105999],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[24,106001,106003],{"className":31029,"code":106002,"language":31031,"meta":29,"style":29},"print_state(\"initial\", model, data)\n",[31,106004,106005],{"__ignoreMap":29},[34,106006,106007,106010,106012],{"class":36,"line":37},[34,106008,106009],{"class":40},"print_state(",[34,106011,105632],{"class":156},[34,106013,105635],{"class":40},[108,106015,106016,106017,106020],{},"调用刚才定义的 ",[31,106018,106019],{},"print_state"," 函数，打印初始状态。",[24,106022,106023],{"className":31029,"code":105810,"language":31031,"meta":29,"style":29},[31,106024,106025,106041],{"__ignoreMap":29},[34,106026,106027,106029,106031,106033,106035,106037,106039],{"class":36,"line":37},[34,106028,3678],{"class":87},[34,106030,102131],{"class":40},[34,106032,26695],{"class":87},[34,106034,33094],{"class":63},[34,106036,801],{"class":40},[34,106038,1451],{"class":63},[34,106040,31437],{"class":40},[34,106042,106043],{"class":36,"line":51},[34,106044,102329],{"class":40},[108,106046,106047],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[24,106049,106050],{"className":31029,"code":105156,"language":31031,"meta":29,"style":29},[31,106051,106052],{"__ignoreMap":29},[34,106053,106054],{"class":36,"line":37},[34,106055,105156],{"class":40},[108,106057,106058,106059,106061,106062,106064],{},"重置 ",[31,106060,34052],{},"。注意它不会重新创建 ",[31,106063,102715],{},"，因为模型结构没有变，只是状态回到初始值。",[24,106066,106067],{"className":31029,"code":105322,"language":31031,"meta":29,"style":29},[31,106068,106069],{"__ignoreMap":29},[34,106070,106071,106073,106075,106077,106079],{"class":36,"line":37},[34,106072,105329],{"class":40},[34,106074,875],{"class":63},[34,106076,5096],{"class":40},[34,106078,153],{"class":87},[34,106080,105338],{"class":63},[108,106082,106083,106084,1008,106087,1008,106090,106092],{},"这行是“手动改状态”。在 freejoint 中，",[31,106085,106086],{},"qpos[0]",[31,106088,106089],{},"qpos[1]",[31,106091,105886],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[24,106094,106095],{"className":31029,"code":105173,"language":31031,"meta":29,"style":29},[31,106096,106097],{"__ignoreMap":29},[34,106098,106099],{"class":36,"line":37},[34,106100,105173],{"class":40},[108,106102,106103,106104,106106,106107,106109],{},"手动改完 ",[31,106105,104660],{}," 后，调用 ",[31,106108,104880],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106111,102946],{"id":102945},[108,106113,106114],{},"你会看到:",[752,106116,106117,106122,106127,106130],{},[755,106118,106119,106120],{},"初始时间为 ",[31,106121,987],{},[755,106123,106124,106125],{},"50 步后时间约为 ",[31,106126,35980],{},[755,106128,106129],{},"reset 后状态恢复",[755,106131,106132,106133,106136,106137],{},"手动修改 ",[31,106134,106135],{},"data.qpos[2]"," 后，小球高度变为 ",[31,106138,105890],{},[108,106140,106141,106143],{},[31,106142,105886],{}," 在这个例子中表示自由刚体的 z 坐标。",[108,106145,106146],{},"输出里可以重点看三件事：",[752,106148,106149,106157,106162],{},[755,106150,106151,106153,106154,106156],{},[31,106152,3040],{}," 是否随着 ",[31,106155,101845],{}," 增加。",[755,106158,106159,106161],{},[31,106160,104660],{}," 的 z 坐标是否因为下落而变化。",[755,106163,106164,106166,106167,29036],{},[31,106165,104982],{}," 后时间是否回到 ",[31,106168,987],{},[14,106170,102978],{"id":102977},[752,106172,106173,106179,106185,106191,106194,106203],{},[755,106174,106175,106176,29036],{},"修改 timestep 为 ",[31,106177,106178],{},"0.005",[755,106180,106181,106182,29036],{},"重新运行，检查 50 步后时间是否约为 ",[31,106183,106184],{},"0.25",[755,106186,106187,106188,29036],{},"修改重力为 ",[31,106189,106190],{},"0 0 -1.0",[755,106192,106193],{},"观察小球下降速度是否变慢。",[755,106195,103041,106196,103044,106199,106202],{},[31,106197,106198],{},"data.qpos[2] = 2.0",[31,106200,106201],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[755,106204,106205,106206,106209],{},"注释掉 ",[31,106207,106208],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106211,103083],{"id":103082},[19,106213,106215,106216,106218],{"id":106214},"修改-dataqpos-后位置没有更新","修改 ",[31,106217,101700],{}," 后位置没有更新",[108,106220,103092],{},[24,106222,106223],{"className":31029,"code":105173,"language":31031,"meta":29,"style":29},[31,106224,106225],{"__ignoreMap":29},[34,106226,106227],{"class":36,"line":37},[34,106228,105173],{"class":40},[19,106230,106231],{"id":106231},"数组维度看不懂",[108,106233,106234],{},"打印模型维度:",[24,106236,106238],{"className":31029,"code":106237,"language":31031,"meta":29,"style":29},"print(model.nq, model.nv, model.nu)\n",[31,106239,106240],{"__ignoreMap":29},[34,106241,106242,106244],{"class":36,"line":37},[34,106243,31066],{"class":63},[34,106245,106246],{"class":40},"(model.nq, model.nv, model.nu)\n",[934,106248,106249,106257],{},[937,106250,106251],{},[940,106252,106253,106255],{},[943,106254,105204],{"align":24388},[943,106256,101330],{"align":24388},[980,106258,106259,106269,106279],{},[940,106260,106261,106266],{},[985,106262,106263],{"align":24388},[31,106264,106265],{},"nq",[985,106267,106268],{"align":24388},"位置变量数量",[940,106270,106271,106276],{},[985,106272,106273],{"align":24388},[31,106274,106275],{},"nv",[985,106277,106278],{"align":24388},"速度变量数量",[940,106280,106281,106285],{},[985,106282,106283],{"align":24388},[31,106284,102792],{},[985,106286,106287],{"align":24388},"控制输入数量",[19,106289,106291,106292,106294],{"id":106290},"误以为-qpos-一定等于关节数","误以为 ",[31,106293,104660],{}," 一定等于关节数",[108,106296,106297,106298,83160,106300,106302,106303,106305],{},"不是。例如 ",[31,106299,102250],{},[31,106301,104660],{}," 是 7 维，但 ",[31,106304,104990],{}," 是 6 维。",[19,106307,106309,106310,106312],{"id":106308},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[31,106311,104660],{}," 的第几位",[108,106314,106315],{},"初学时可以先打印：",[24,106317,106319],{"className":31029,"code":106318,"language":31031,"meta":29,"style":29},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[31,106320,106321,106331,106341,106353],{"__ignoreMap":29},[34,106322,106323,106325,106327,106329],{"class":36,"line":37},[34,106324,31066],{"class":63},[34,106326,801],{"class":40},[34,106328,102069],{"class":156},[34,106330,102072],{"class":40},[34,106332,106333,106335,106337,106339],{"class":36,"line":51},[34,106334,31066],{"class":63},[34,106336,801],{"class":40},[34,106338,102081],{"class":156},[34,106340,102084],{"class":40},[34,106342,106343,106345,106347,106350],{"class":36,"line":60},[34,106344,31066],{"class":63},[34,106346,801],{"class":40},[34,106348,106349],{"class":156},"\"qpos:\"",[34,106351,106352],{"class":40},", data.qpos)\n",[34,106354,106355,106357,106359,106362],{"class":36,"line":76},[34,106356,31066],{"class":63},[34,106358,801],{"class":40},[34,106360,106361],{"class":156},"\"qvel:\"",[34,106363,106364],{"class":40},", data.qvel)\n",[108,106366,106367],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[19,106369,106370],{"id":106370},"仿真结果每次都一样",[108,106372,106373,106374,106376],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[31,106375,104660],{},"、目标点或控制输入。",[14,106378,103237],{"id":103236},[108,106380,106381,106382,25271],{},"Python 控制 MuJoCo 的核心就是读写 ",[31,106383,34052],{},[752,106385,106386,106394,106399,106404],{},[755,106387,106388,106389,101648,106391,106393],{},"用 ",[31,106390,101700],{},[31,106392,101703],{}," 读取状态。",[755,106395,106388,106396,106398],{},[31,106397,101706],{}," 写入控制。",[755,106400,106388,106401,106403],{},[31,106402,101845],{}," 推进时间。",[755,106405,106406,106407,106409],{},"手动改状态后用 ",[31,106408,104880],{}," 刷新派生量。",[108,106411,106412],{},"理解这一章后，就可以进入关节和 actuator 控制。",[45,106414,106415],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":106417},[106418,106419,106420,106427,106431,106432,106433,106443],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":106421},[106422,106424,106426],{"id":105185,"depth":60,"text":106423},"qpos、qvel、ctrl 是什么",{"id":105263,"depth":60,"text":106425},"mj_step 和 mj_forward 的区别",{"id":105352,"depth":60,"text":105353},{"id":101882,"depth":51,"text":101883,"children":106428},[106429,106430],{"id":102202,"depth":60,"text":102202},{"id":102338,"depth":60,"text":102338},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":106434},[106435,106437,106438,106440,106442],{"id":106214,"depth":60,"text":106436},"修改 data.qpos 后位置没有更新",{"id":106231,"depth":60,"text":106231},{"id":106290,"depth":60,"text":106439},"误以为 qpos 一定等于关节数",{"id":106308,"depth":60,"text":106441},"不知道某个元素在 qpos 的第几位",{"id":106370,"depth":60,"text":106370},{"id":103236,"depth":51,"text":103237},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104948,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106450,"title":106451,"body":106452,"description":29,"extension":724,"meta":108142,"navigation":726,"path":108143,"seo":108144,"stem":108145,"__hash__":108146},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106453,"toc":108118},[106454,106457,106459,106462,106464,106489,106492,106511,106514,106516,106518,106542,106544,106558,106560,106601,106603,106627,106629,106632,106666,106668,106681,106684,106752,106761,106765,106768,106802,106808,106811,106815,106854,106857,106877,106881,106924,106926,106955,106958,106964,106967,106969,107363,107365,107377,107379,107390,107392,107395,107424,107432,107435,107470,107473,107475,107483,107486,107488,107499,107509,107529,107532,107568,107580,107628,107647,107689,107702,107730,107735,107756,107766,107784,107787,107821,107824,107844,107847,107866,107872,107874,107877,107883,107889,107899,107902,107908,107917,107919,107965,107967,107973,107979,107982,107985,108005,108008,108014,108020,108022,108045,108048,108051,108060,108063,108101,108103,108106,108112,108115],[10,106455,106451],{"id":106456},"_4关节actuator-与力控制",[14,106458,101277],{"id":101276},[108,106460,106461],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[108,106463,104961],{},[752,106465,106466,106472,106477,106481,106486],{},[755,106467,106468,106471],{},[31,106469,106470],{},"hinge"," 关节",[755,106473,106474],{},[31,106475,106476],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[755,106478,106479],{},[31,106480,101706],{},[755,106482,106483],{},[31,106484,106485],{},"ctrlrange",[755,106487,106488],{},"读取关节角和角速度",[108,106490,106491],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[24,106493,106495],{"className":31029,"code":106494,"language":31031,"meta":29,"style":29},"data.ctrl[0] = ...\n",[31,106496,106497],{"__ignoreMap":29},[34,106498,106499,106502,106504,106506,106508],{"class":36,"line":37},[34,106500,106501],{"class":40},"data.ctrl[",[34,106503,987],{"class":63},[34,106505,5096],{"class":40},[34,106507,153],{"class":87},[34,106509,106510],{"class":63}," ...\n",[108,106512,106513],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106515,101400],{"id":101399},[108,106517,101403],{},[24,106519,106520],{"className":24474,"code":105018,"language":24476,"meta":29,"style":29},[31,106521,106522],{"__ignoreMap":29},[34,106523,106524,106526,106528,106530,106532,106534,106536,106538,106540],{"class":36,"line":37},[34,106525,25229],{"class":149},[34,106527,26967],{"class":156},[34,106529,24486],{"class":156},[34,106531,27052],{"class":63},[34,106533,105033],{"class":156},[34,106535,101428],{"class":156},[34,106537,103131],{"class":156},[34,106539,101444],{"class":156},[34,106541,105042],{"class":156},[108,106543,103449],{},[24,106545,106546],{"className":24474,"code":101549,"language":24476,"meta":29,"style":29},[31,106547,106548],{"__ignoreMap":29},[34,106549,106550,106552,106554,106556],{"class":36,"line":37},[34,106551,24483],{"class":149},[34,106553,24486],{"class":156},[34,106555,101560],{"class":156},[34,106557,101563],{"class":156},[108,106559,103466],{},[24,106561,106563],{"className":24474,"code":106562,"language":24476,"meta":29,"style":29},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[31,106564,106565,106582,106591],{"__ignoreMap":29},[34,106566,106567,106569,106571,106573,106576,106578,106580],{"class":36,"line":37},[34,106568,30981],{"class":149},[34,106570,29827],{"class":156},[34,106572,25768],{"class":63},[34,106574,106575],{"class":156}," mujoco-control",[34,106577,101605],{"class":156},[34,106579,101608],{"class":63},[34,106581,101611],{"class":63},[34,106583,106584,106586,106588],{"class":36,"line":51},[34,106585,30981],{"class":149},[34,106587,101618],{"class":156},[34,106589,106590],{"class":156}," mujoco-control\n",[34,106592,106593,106595,106597,106599],{"class":36,"line":60},[34,106594,24483],{"class":149},[34,106596,24486],{"class":156},[34,106598,101560],{"class":156},[34,106600,101563],{"class":156},[108,106602,101634],{},[752,106604,106605,106611,106618,106624],{},[755,106606,106607,106610],{},[31,106608,106609],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[755,106612,106613,106615,106616,29036],{},[31,106614,101706],{}," 长度等于 ",[31,106617,102788],{},[755,106619,82852,106620,106623],{},[31,106621,106622],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[755,106625,106626],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106628,101675],{"id":101674},[108,106630,106631],{},"关节决定 body 如何运动:",[24,106633,106635],{"className":53713,"code":106634,"language":53715,"meta":29,"style":29},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[31,106636,106637],{"__ignoreMap":29},[34,106638,106639,106641,106643,106645,106647,106650,106652,106654,106656,106659,106661,106664],{"class":36,"line":37},[34,106640,41],{"class":40},[34,106642,103586],{"class":44},[34,106644,15573],{"class":149},[34,106646,153],{"class":40},[34,106648,106649],{"class":156},"\"hinge\"",[34,106651,54469],{"class":149},[34,106653,153],{"class":40},[34,106655,106649],{"class":156},[34,106657,106658],{"class":149}," axis",[34,106660,153],{"class":40},[34,106662,106663],{"class":156},"\"0 1 0\"",[34,106665,101774],{"class":40},[108,106667,103682],{},[752,106669,106670,106675,106678],{},[755,106671,106672,106673],{},"名字是 ",[31,106674,106470],{},[755,106676,106677],{},"类型是旋转关节",[755,106679,106680],{},"绕 y 轴旋转",[108,106682,106683],{},"actuator 决定如何施加控制:",[24,106685,106687],{"className":53713,"code":106686,"language":53715,"meta":29,"style":29},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[31,106688,106689,106698,106744],{"__ignoreMap":29},[34,106690,106691,106693,106696],{"class":36,"line":37},[34,106692,41],{"class":40},[34,106694,106695],{"class":44},"actuator",[34,106697,48],{"class":40},[34,106699,106700,106702,106705,106707,106709,106712,106715,106717,106719,106722,106724,106726,106729,106731,106734,106737,106739,106742],{"class":36,"line":51},[34,106701,52790],{"class":40},[34,106703,106704],{"class":44},"motor",[34,106706,15573],{"class":149},[34,106708,153],{"class":40},[34,106710,106711],{"class":156},"\"hinge_motor\"",[34,106713,106714],{"class":149}," joint",[34,106716,153],{"class":40},[34,106718,106649],{"class":156},[34,106720,106721],{"class":149}," gear",[34,106723,153],{"class":40},[34,106725,4331],{"class":156},[34,106727,106728],{"class":149}," ctrlrange",[34,106730,153],{"class":40},[34,106732,106733],{"class":156},"\"-2 2\"",[34,106735,106736],{"class":149}," ctrllimited",[34,106738,153],{"class":40},[34,106740,106741],{"class":156},"\"true\"",[34,106743,101774],{"class":40},[34,106745,106746,106748,106750],{"class":36,"line":60},[34,106747,102],{"class":40},[34,106749,106695],{"class":44},[34,106751,48],{"class":40},[108,106753,106754,106757,106758,29036],{},[31,106755,106756],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[31,106759,106760],{},"[-2, 2]",[19,106762,106764],{"id":106763},"joint-和-actuator-的关系","joint 和 actuator 的关系",[108,106766,106767],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[934,106769,106770,106780],{},[937,106771,106772],{},[940,106773,106774,106776,106778],{},[943,106775,26405],{"align":24388},[943,106777,103326],{"align":24388},[943,106779,101364],{"align":24388},[980,106781,106782,106792],{},[940,106783,106784,106786,106789],{},[985,106785,103586],{"align":24388},[985,106787,106788],{"align":24388},"定义能怎么动",[985,106790,106791],{"align":24388},"门轴允许门旋转",[940,106793,106794,106796,106799],{},[985,106795,106695],{"align":24388},[985,106797,106798],{"align":24388},"定义怎么施力或控制",[985,106800,106801],{"align":24388},"人推门、马达带动门",[108,106803,106804,106805,106807],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[31,106806,101706],{}," 主动控制它。",[108,106809,106810],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[19,106812,106814],{"id":106813},"hinge-joint","hinge joint",[24,106816,106818],{"className":53713,"code":106817,"language":53715,"meta":29,"style":29},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[31,106819,106820],{"__ignoreMap":29},[34,106821,106822,106824,106826,106828,106830,106832,106834,106836,106838,106840,106842,106844,106847,106849,106852],{"class":36,"line":37},[34,106823,41],{"class":40},[34,106825,103586],{"class":44},[34,106827,15573],{"class":149},[34,106829,153],{"class":40},[34,106831,106649],{"class":156},[34,106833,54469],{"class":149},[34,106835,153],{"class":40},[34,106837,106649],{"class":156},[34,106839,106658],{"class":149},[34,106841,153],{"class":40},[34,106843,106663],{"class":156},[34,106845,106846],{"class":149}," damping",[34,106848,153],{"class":40},[34,106850,106851],{"class":156},"\"0.1\"",[34,106853,101774],{"class":40},[108,106855,106856],{},"含义：",[752,106858,106859,106865,106871],{},[755,106860,106861,106864],{},[31,106862,106863],{},"type=\"hinge\"","：只能绕一个轴旋转。",[755,106866,106867,106870],{},[31,106868,106869],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[755,106872,106873,106876],{},[31,106874,106875],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[19,106878,106880],{"id":106879},"motor-actuator","motor actuator",[24,106882,106884],{"className":53713,"code":106883,"language":53715,"meta":29,"style":29},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[31,106885,106886],{"__ignoreMap":29},[34,106887,106888,106890,106892,106894,106896,106898,106900,106902,106904,106906,106908,106910,106912,106914,106916,106918,106920,106922],{"class":36,"line":37},[34,106889,41],{"class":40},[34,106891,106704],{"class":44},[34,106893,15573],{"class":149},[34,106895,153],{"class":40},[34,106897,106711],{"class":156},[34,106899,106714],{"class":149},[34,106901,153],{"class":40},[34,106903,106649],{"class":156},[34,106905,106721],{"class":149},[34,106907,153],{"class":40},[34,106909,4331],{"class":156},[34,106911,106728],{"class":149},[34,106913,153],{"class":40},[34,106915,106733],{"class":156},[34,106917,106736],{"class":149},[34,106919,153],{"class":40},[34,106921,106741],{"class":156},[34,106923,101774],{"class":40},[108,106925,106856],{},[752,106927,106928,106937,106943,106949],{},[755,106929,106930,106933,106934,106936],{},[31,106931,106932],{},"joint=\"hinge\"","：这个电机作用在名为 ",[31,106935,106470],{}," 的关节上。",[755,106938,106939,106942],{},[31,106940,106941],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[755,106944,106945,106948],{},[31,106946,106947],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[755,106950,106951,106954],{},[31,106952,106953],{},"ctrllimited=\"true\"","：启用控制范围限制。",[108,106956,106957],{},"简单理解：",[24,106959,106962],{"className":106960,"code":106961,"language":5840,"meta":29},[5838],"实际施加效果 ≈ data.ctrl[0] * gear\n",[31,106963,106961],{"__ignoreMap":29},[108,106965,106966],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106968,101883],{"id":101882},[24,106970,106972],{"className":31029,"code":106971,"language":31031,"meta":29,"style":29},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,106973,106974,106981,106985,106991,107001,107005,107009,107017,107022,107027,107031,107035,107040,107045,107049,107054,107059,107064,107069,107073,107077,107081,107086,107091,107096,107100,107104,107108,107112,107124,107136,107144,107148,107158,107168,107178,107182,107195,107208,107212,107229,107243,107278,107282,107286,107297,107312,107327,107339,107343,107347,107359],{"__ignoreMap":29},[34,106975,106976,106978],{"class":36,"line":37},[34,106977,31043],{"class":87},[34,106979,106980],{"class":40}," math\n",[34,106982,106983],{"class":36,"line":51},[34,106984,3053],{"emptyLinePlaceholder":726},[34,106986,106987,106989],{"class":36,"line":60},[34,106988,31043],{"class":87},[34,106990,101931],{"class":40},[34,106992,106993,106995,106997,106999],{"class":36,"line":76},[34,106994,31043],{"class":87},[34,106996,32031],{"class":40},[34,106998,32034],{"class":87},[34,107000,32037],{"class":40},[34,107002,107003],{"class":36,"line":93},[34,107004,3053],{"emptyLinePlaceholder":726},[34,107006,107007],{"class":36,"line":99},[34,107008,3053],{"emptyLinePlaceholder":726},[34,107010,107011,107013,107015],{"class":36,"line":353},[34,107012,101944],{"class":63},[34,107014,14217],{"class":87},[34,107016,101949],{"class":156},[34,107018,107019],{"class":36,"line":359},[34,107020,107021],{"class":156},"\u003Cmujoco model=\"one_link_motor\">\n",[34,107023,107024],{"class":36,"line":579},[34,107025,107026],{"class":156},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[34,107028,107029],{"class":36,"line":589},[34,107030,3053],{"emptyLinePlaceholder":726},[34,107032,107033],{"class":36,"line":601},[34,107034,101968],{"class":156},[34,107036,107037],{"class":36,"line":613},[34,107038,107039],{"class":156},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[34,107041,107042],{"class":36,"line":618},[34,107043,107044],{"class":156},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[34,107046,107047],{"class":36,"line":628},[34,107048,3053],{"emptyLinePlaceholder":726},[34,107050,107051],{"class":36,"line":640},[34,107052,107053],{"class":156},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[34,107055,107056],{"class":36,"line":2301},[34,107057,107058],{"class":156},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,107060,107061],{"class":36,"line":2307},[34,107062,107063],{"class":156},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[34,107065,107066],{"class":36,"line":2328},[34,107067,107068],{"class":156},"      \u003C\u002Fbody>\n",[34,107070,107071],{"class":36,"line":2333},[34,107072,101997],{"class":156},[34,107074,107075],{"class":36,"line":2347},[34,107076,102002],{"class":156},[34,107078,107079],{"class":36,"line":2352},[34,107080,3053],{"emptyLinePlaceholder":726},[34,107082,107083],{"class":36,"line":2381},[34,107084,107085],{"class":156},"  \u003Cactuator>\n",[34,107087,107088],{"class":36,"line":2386},[34,107089,107090],{"class":156},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[34,107092,107093],{"class":36,"line":2403},[34,107094,107095],{"class":156},"  \u003C\u002Factuator>\n",[34,107097,107098],{"class":36,"line":2408},[34,107099,102007],{"class":156},[34,107101,107102],{"class":36,"line":2413},[34,107103,96328],{"class":156},[34,107105,107106],{"class":36,"line":2418},[34,107107,3053],{"emptyLinePlaceholder":726},[34,107109,107110],{"class":36,"line":2432},[34,107111,3053],{"emptyLinePlaceholder":726},[34,107113,107114,107116,107118,107120,107122],{"class":36,"line":2437},[34,107115,32598],{"class":87},[34,107117,2626],{"class":149},[34,107119,102028],{"class":40},[34,107121,96316],{"class":63},[34,107123,4392],{"class":40},[34,107125,107126,107128,107130,107132,107134],{"class":36,"line":3230},[34,107127,102037],{"class":40},[34,107129,153],{"class":87},[34,107131,102042],{"class":40},[34,107133,101944],{"class":63},[34,107135,807],{"class":40},[34,107137,107138,107140,107142],{"class":36,"line":3244},[34,107139,102051],{"class":40},[34,107141,153],{"class":87},[34,107143,102056],{"class":40},[34,107145,107146],{"class":36,"line":3252},[34,107147,3053],{"emptyLinePlaceholder":726},[34,107149,107150,107152,107154,107156],{"class":36,"line":3257},[34,107151,31950],{"class":63},[34,107153,801],{"class":40},[34,107155,102069],{"class":156},[34,107157,102072],{"class":40},[34,107159,107160,107162,107164,107166],{"class":36,"line":3263},[34,107161,31950],{"class":63},[34,107163,801],{"class":40},[34,107165,102081],{"class":156},[34,107167,102084],{"class":40},[34,107169,107170,107172,107174,107176],{"class":36,"line":3269},[34,107171,31950],{"class":63},[34,107173,801],{"class":40},[34,107175,102093],{"class":156},[34,107177,102096],{"class":40},[34,107179,107180],{"class":36,"line":3274},[34,107181,3053],{"emptyLinePlaceholder":726},[34,107183,107184,107186,107189,107191,107193],{"class":36,"line":8601},[34,107185,3754],{"class":87},[34,107187,107188],{"class":40}," model.nu ",[34,107190,21600],{"class":87},[34,107192,25771],{"class":63},[34,107194,4392],{"class":40},[34,107196,107197,107199,107201,107203,107206],{"class":36,"line":8625},[34,107198,104062],{"class":87},[34,107200,104065],{"class":63},[34,107202,801],{"class":40},[34,107204,107205],{"class":156},"\"expected exactly one actuator\"",[34,107207,807],{"class":40},[34,107209,107210],{"class":36,"line":8630},[34,107211,3053],{"emptyLinePlaceholder":726},[34,107213,107214,107216,107218,107220,107222,107224,107227],{"class":36,"line":8636},[34,107215,3854],{"class":87},[34,107217,32267],{"class":40},[34,107219,26695],{"class":87},[34,107221,33094],{"class":63},[34,107223,801],{"class":40},[34,107225,107226],{"class":63},"2000",[34,107228,31437],{"class":40},[34,107230,107231,107234,107236,107238,107240],{"class":36,"line":8663},[34,107232,107233],{"class":40},"        t ",[34,107235,153],{"class":87},[34,107237,32267],{"class":40},[34,107239,1250],{"class":87},[34,107241,107242],{"class":40}," model.opt.timestep\n",[34,107244,107245,107248,107250,107252,107254,107257,107259,107262,107264,107266,107269,107271,107273,107275],{"class":36,"line":8668},[34,107246,107247],{"class":40},"        data.ctrl[",[34,107249,987],{"class":63},[34,107251,5096],{"class":40},[34,107253,153],{"class":87},[34,107255,107256],{"class":63}," 1.5",[34,107258,7171],{"class":87},[34,107260,107261],{"class":40}," math.sin(",[34,107263,105890],{"class":63},[34,107265,7171],{"class":87},[34,107267,107268],{"class":40}," math.pi ",[34,107270,1250],{"class":87},[34,107272,62508],{"class":63},[34,107274,7171],{"class":87},[34,107276,107277],{"class":40}," t)\n",[34,107279,107280],{"class":36,"line":8674},[34,107281,102146],{"class":40},[34,107283,107284],{"class":36,"line":8686},[34,107285,3053],{"emptyLinePlaceholder":726},[34,107287,107288,107290,107292,107295],{"class":36,"line":8698},[34,107289,31950],{"class":63},[34,107291,801],{"class":40},[34,107293,107294],{"class":156},"\"time:\"",[34,107296,102108],{"class":40},[34,107298,107299,107301,107303,107306,107308,107310],{"class":36,"line":8710},[34,107300,31950],{"class":63},[34,107302,801],{"class":40},[34,107304,107305],{"class":156},"\"joint qpos:\"",[34,107307,105560],{"class":40},[34,107309,1088],{"class":63},[34,107311,31148],{"class":40},[34,107313,107314,107316,107318,107321,107323,107325],{"class":36,"line":10369},[34,107315,31950],{"class":63},[34,107317,801],{"class":40},[34,107319,107320],{"class":156},"\"joint qvel:\"",[34,107322,105576],{"class":40},[34,107324,1088],{"class":63},[34,107326,31148],{"class":40},[34,107328,107329,107331,107333,107336],{"class":36,"line":10394},[34,107330,31950],{"class":63},[34,107332,801],{"class":40},[34,107334,107335],{"class":156},"\"last ctrl:\"",[34,107337,107338],{"class":40},", data.ctrl.copy())\n",[34,107340,107341],{"class":36,"line":10417},[34,107342,3053],{"emptyLinePlaceholder":726},[34,107344,107345],{"class":36,"line":10441},[34,107346,3053],{"emptyLinePlaceholder":726},[34,107348,107349,107351,107353,107355,107357],{"class":36,"line":10446},[34,107350,2191],{"class":87},[34,107352,31871],{"class":63},[34,107354,102189],{"class":87},[34,107356,102192],{"class":156},[34,107358,4392],{"class":40},[34,107360,107361],{"class":36,"line":10451},[34,107362,102199],{"class":40},[108,107364,104200],{},[24,107366,107368],{"className":24474,"code":107367,"language":24476,"meta":29,"style":29},"touch ch4_joint_motor.py\n",[31,107369,107370],{"__ignoreMap":29},[34,107371,107372,107374],{"class":36,"line":37},[34,107373,101913],{"class":149},[34,107375,107376],{"class":156}," ch4_joint_motor.py\n",[108,107378,102931],{},[24,107380,107382],{"className":24474,"code":107381,"language":24476,"meta":29,"style":29},"python ch4_joint_motor.py\n",[31,107383,107384],{"__ignoreMap":29},[34,107385,107386,107388],{"class":36,"line":37},[34,107387,31031],{"class":149},[34,107389,107376],{"class":156},[19,107391,102202],{"id":102202},[108,107393,107394],{},"检查 actuator 数量：",[24,107396,107398],{"className":31029,"code":107397,"language":31031,"meta":29,"style":29},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[31,107399,107400,107412],{"__ignoreMap":29},[34,107401,107402,107404,107406,107408,107410],{"class":36,"line":37},[34,107403,2191],{"class":87},[34,107405,107188],{"class":40},[34,107407,21600],{"class":87},[34,107409,25771],{"class":63},[34,107411,4392],{"class":40},[34,107413,107414,107416,107418,107420,107422],{"class":36,"line":51},[34,107415,104525],{"class":87},[34,107417,104065],{"class":63},[34,107419,801],{"class":40},[34,107421,107205],{"class":156},[34,107423,807],{"class":40},[108,107425,107426,107428,107429,107431],{},[31,107427,102788],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[31,107430,101706],{}," 长度应该是 1。",[108,107433,107434],{},"产生正弦控制信号：",[24,107436,107438],{"className":31029,"code":107437,"language":31031,"meta":29,"style":29},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[31,107439,107440],{"__ignoreMap":29},[34,107441,107442,107444,107446,107448,107450,107452,107454,107456,107458,107460,107462,107464,107466,107468],{"class":36,"line":37},[34,107443,106501],{"class":40},[34,107445,987],{"class":63},[34,107447,5096],{"class":40},[34,107449,153],{"class":87},[34,107451,107256],{"class":63},[34,107453,7171],{"class":87},[34,107455,107261],{"class":40},[34,107457,105890],{"class":63},[34,107459,7171],{"class":87},[34,107461,107268],{"class":40},[34,107463,1250],{"class":87},[34,107465,62508],{"class":63},[34,107467,7171],{"class":87},[34,107469,107277],{"class":40},[108,107471,107472],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[108,107474,102303],{},[24,107476,107477],{"className":31029,"code":105135,"language":31031,"meta":29,"style":29},[31,107478,107479],{"__ignoreMap":29},[34,107480,107481],{"class":36,"line":37},[34,107482,105135],{"class":40},[108,107484,107485],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[19,107487,102338],{"id":102338},[24,107489,107491],{"className":31029,"code":107490,"language":31031,"meta":29,"style":29},"import math\n",[31,107492,107493],{"__ignoreMap":29},[34,107494,107495,107497],{"class":36,"line":37},[34,107496,31043],{"class":87},[34,107498,106980],{"class":40},[108,107500,107501,107502,101648,107505,107508],{},"导入 Python 标准库里的数学模块。后面要用 ",[31,107503,107504],{},"math.sin",[31,107506,107507],{},"math.pi"," 生成周期变化的控制信号。",[24,107510,107511],{"className":31029,"code":104316,"language":31031,"meta":29,"style":29},[31,107512,107513,107519],{"__ignoreMap":29},[34,107514,107515,107517],{"class":36,"line":37},[34,107516,31043],{"class":87},[34,107518,101931],{"class":40},[34,107520,107521,107523,107525,107527],{"class":36,"line":51},[34,107522,31043],{"class":87},[34,107524,32031],{"class":40},[34,107526,32034],{"class":87},[34,107528,32037],{"class":40},[108,107530,107531],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[24,107533,107534],{"className":53713,"code":106817,"language":53715,"meta":29,"style":29},[31,107535,107536],{"__ignoreMap":29},[34,107537,107538,107540,107542,107544,107546,107548,107550,107552,107554,107556,107558,107560,107562,107564,107566],{"class":36,"line":37},[34,107539,41],{"class":40},[34,107541,103586],{"class":44},[34,107543,15573],{"class":149},[34,107545,153],{"class":40},[34,107547,106649],{"class":156},[34,107549,54469],{"class":149},[34,107551,153],{"class":40},[34,107553,106649],{"class":156},[34,107555,106658],{"class":149},[34,107557,153],{"class":40},[34,107559,106663],{"class":156},[34,107561,106846],{"class":149},[34,107563,153],{"class":40},[34,107565,106851],{"class":156},[34,107567,101774],{"class":40},[108,107569,107570,107571,107573,107574,107576,107577,107579],{},"这行定义关节。",[31,107572,106470],{}," 表示旋转关节。",[31,107575,106869],{}," 表示绕 y 轴旋转。",[31,107578,106875],{}," 表示有一点阻尼，运动不会完全无损耗。",[24,107581,107583],{"className":53713,"code":107582,"language":53715,"meta":29,"style":29},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[31,107584,107585],{"__ignoreMap":29},[34,107586,107587,107589,107591,107593,107595,107598,107600,107602,107605,107608,107610,107613,107615,107617,107619,107621,107623,107626],{"class":36,"line":37},[34,107588,41],{"class":40},[34,107590,101750],{"class":44},[34,107592,15573],{"class":149},[34,107594,153],{"class":40},[34,107596,107597],{"class":156},"\"link_geom\"",[34,107599,54469],{"class":149},[34,107601,153],{"class":40},[34,107603,107604],{"class":156},"\"capsule\"",[34,107606,107607],{"class":149}," fromto",[34,107609,153],{"class":40},[34,107611,107612],{"class":156},"\"0 0 0 0 0 0.5\"",[34,107614,101766],{"class":149},[34,107616,153],{"class":40},[34,107618,104408],{"class":156},[34,107620,102631],{"class":149},[34,107622,153],{"class":40},[34,107624,107625],{"class":156},"\"0.5\"",[34,107627,101774],{"class":40},[108,107629,107630,107631,107633,107634,107636,107637,107640,107641,29036,107644,107646],{},"这行定义摆杆的形状。",[31,107632,103795],{}," 是胶囊体，适合表示杆子。",[31,107635,103806],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[31,107638,107639],{},"(0,0,0)"," 延伸到 ",[31,107642,107643],{},"(0,0,0.5)",[31,107645,103800],{}," 是半径。",[24,107648,107649],{"className":53713,"code":106883,"language":53715,"meta":29,"style":29},[31,107650,107651],{"__ignoreMap":29},[34,107652,107653,107655,107657,107659,107661,107663,107665,107667,107669,107671,107673,107675,107677,107679,107681,107683,107685,107687],{"class":36,"line":37},[34,107654,41],{"class":40},[34,107656,106704],{"class":44},[34,107658,15573],{"class":149},[34,107660,153],{"class":40},[34,107662,106711],{"class":156},[34,107664,106714],{"class":149},[34,107666,153],{"class":40},[34,107668,106649],{"class":156},[34,107670,106721],{"class":149},[34,107672,153],{"class":40},[34,107674,4331],{"class":156},[34,107676,106728],{"class":149},[34,107678,153],{"class":40},[34,107680,106733],{"class":156},[34,107682,106736],{"class":149},[34,107684,153],{"class":40},[34,107686,106741],{"class":156},[34,107688,101774],{"class":40},[108,107690,107691,107692,107694,107695,107698,107699,107701],{},"这行定义电机。它作用在 ",[31,107693,106470],{}," 关节上。",[31,107696,107697],{},"gear"," 可以理解成放大倍数。",[31,107700,106485],{}," 限制控制输入范围。",[24,107703,107704],{"className":31029,"code":107397,"language":31031,"meta":29,"style":29},[31,107705,107706,107718],{"__ignoreMap":29},[34,107707,107708,107710,107712,107714,107716],{"class":36,"line":37},[34,107709,2191],{"class":87},[34,107711,107188],{"class":40},[34,107713,21600],{"class":87},[34,107715,25771],{"class":63},[34,107717,4392],{"class":40},[34,107719,107720,107722,107724,107726,107728],{"class":36,"line":51},[34,107721,104525],{"class":87},[34,107723,104065],{"class":63},[34,107725,801],{"class":40},[34,107727,107205],{"class":156},[34,107729,807],{"class":40},[108,107731,107732,107734],{},[31,107733,102788],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[24,107736,107738],{"className":31029,"code":107737,"language":31031,"meta":29,"style":29},"for step in range(2000):\n",[31,107739,107740],{"__ignoreMap":29},[34,107741,107742,107744,107746,107748,107750,107752,107754],{"class":36,"line":37},[34,107743,3678],{"class":87},[34,107745,32267],{"class":40},[34,107747,26695],{"class":87},[34,107749,33094],{"class":63},[34,107751,801],{"class":40},[34,107753,107226],{"class":63},[34,107755,31437],{"class":40},[108,107757,107758,107759,107761,107762,107765],{},"循环 2000 步。这里没有用 ",[31,107760,1785],{},"，而是用 ",[31,107763,107764],{},"step","，因为后面要用当前步数计算时间。",[24,107767,107769],{"className":31029,"code":107768,"language":31031,"meta":29,"style":29},"t = step * model.opt.timestep\n",[31,107770,107771],{"__ignoreMap":29},[34,107772,107773,107776,107778,107780,107782],{"class":36,"line":37},[34,107774,107775],{"class":40},"t ",[34,107777,153],{"class":87},[34,107779,32267],{"class":40},[34,107781,1250],{"class":87},[34,107783,107242],{"class":40},[108,107785,107786],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[24,107788,107789],{"className":31029,"code":107437,"language":31031,"meta":29,"style":29},[31,107790,107791],{"__ignoreMap":29},[34,107792,107793,107795,107797,107799,107801,107803,107805,107807,107809,107811,107813,107815,107817,107819],{"class":36,"line":37},[34,107794,106501],{"class":40},[34,107796,987],{"class":63},[34,107798,5096],{"class":40},[34,107800,153],{"class":87},[34,107802,107256],{"class":63},[34,107804,7171],{"class":87},[34,107806,107261],{"class":40},[34,107808,105890],{"class":63},[34,107810,7171],{"class":87},[34,107812,107268],{"class":40},[34,107814,1250],{"class":87},[34,107816,62508],{"class":63},[34,107818,7171],{"class":87},[34,107820,107277],{"class":40},[108,107822,107823],{},"这行给电机输入一个正弦波。拆开看：",[752,107825,107826,107832,107838],{},[755,107827,107828,107831],{},[31,107829,107830],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[755,107833,107834,107837],{},[31,107835,107836],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[755,107839,107840,107843],{},[31,107841,107842],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[108,107845,107846],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[24,107848,107850],{"className":31029,"code":107849,"language":31031,"meta":29,"style":29},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[31,107851,107852],{"__ignoreMap":29},[34,107853,107854,107856,107858,107860,107862,107864],{"class":36,"line":37},[34,107855,31066],{"class":63},[34,107857,801],{"class":40},[34,107859,107305],{"class":156},[34,107861,105560],{"class":40},[34,107863,1088],{"class":63},[34,107865,31148],{"class":40},[108,107867,107868,107869,107871],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[31,107870,101700],{}," 只有一个数。",[14,107873,102946],{"id":102945},[108,107875,107876],{},"输出类似:",[24,107878,107881],{"className":107879,"code":107880,"language":5840,"meta":29},[5838],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[31,107882,107880],{"__ignoreMap":29},[108,107884,107885,107886,107888],{},"这里 ",[31,107887,106756],{}," 是电机输入。",[108,107890,107891,107894,107895,107898],{},[31,107892,107893],{},"joint qpos"," 是关节角度，单位通常是弧度。",[31,107896,107897],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[108,107900,107901],{},"角度单位提示：",[24,107903,107906],{"className":107904,"code":107905,"language":5840,"meta":29},[5838],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[31,107907,107905],{"__ignoreMap":29},[108,107909,107910,107911,107913,107914,107916],{},"如果你看到 ",[31,107912,104660],{}," 是 ",[31,107915,35980],{},"，大约就是 28.6 度。",[14,107918,102978],{"id":102977},[752,107920,107921,107928,107931,107938,107941,107949,107957],{},[755,107922,103041,107923,103044,107925,29036],{},[31,107924,106941],{},[31,107926,107927],{},"gear=\"5\"",[755,107929,107930],{},"重新运行，观察关节运动是否更剧烈。",[755,107932,103041,107933,103044,107935,29036],{},[31,107934,106485],{},[31,107936,107937],{},"-0.2 0.2",[755,107939,107940],{},"重新运行，观察控制能力是否变弱。",[755,107942,107943,107944,107946,107947,29036],{},"去掉 actuator，确认 ",[31,107945,102788],{}," 变成 ",[31,107948,987],{},[755,107950,103041,107951,103044,107953,107956],{},[31,107952,106875],{},[31,107954,107955],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[755,107958,103041,107959,103044,107961,107964],{},[31,107960,106869],{},[31,107962,107963],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107966,103083],{"id":103082},[19,107968,107970],{"id":107969},"indexerror-index-0-is-out-of-bounds",[31,107971,107972],{},"IndexError: index 0 is out of bounds",[108,107974,107975,107976,107978],{},"原因是 ",[31,107977,106622],{},"，没有 actuator。",[19,107980,107981],{"id":107981},"关节几乎不动",[108,107983,107984],{},"可能原因:",[752,107986,107987,107992,107996,108002],{},[755,107988,107989,107991],{},[31,107990,107697],{}," 太小",[755,107993,107994,107991],{},[31,107995,106485],{},[755,107997,107998,108001],{},[31,107999,108000],{},"damping"," 太大",[755,108003,108004],{},"重力方向导致运动不明显",[19,108006,108007],{"id":108007},"模型编译失败",[108,108009,108010,108011,108013],{},"检查 actuator 引用的 ",[31,108012,106932],{}," 是否存在，joint 名称是否拼写一致。",[19,108015,108017,108019],{"id":108016},"datactrl0-写了但没有效果",[31,108018,106756],{}," 写了但没有效果",[108,108021,103205],{},[752,108023,108024,108029,108032,108037,108042],{},[755,108025,108026,108028],{},[31,108027,102788],{}," 是否大于 0。",[755,108030,108031],{},"motor 是否引用了正确 joint。",[755,108033,108034,108036],{},[31,108035,107697],{}," 是否太小。",[755,108038,108039,108041],{},[31,108040,106485],{}," 是否把输入限制得太小。",[755,108043,108044],{},"body 是否真的有可动 joint。",[19,108046,108047],{"id":108047},"控制输入超过范围会怎样",[108,108049,108050],{},"如果设置了：",[24,108052,108054],{"className":53713,"code":108053,"language":53715,"meta":29,"style":29},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[31,108055,108056],{"__ignoreMap":29},[34,108057,108058],{"class":36,"line":37},[34,108059,108053],{"class":40},[108,108061,108062],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[24,108064,108066],{"className":31029,"code":108065,"language":31031,"meta":29,"style":29},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[31,108067,108068,108088],{"__ignoreMap":29},[34,108069,108070,108073,108075,108078,108080,108082,108084,108086],{"class":36,"line":37},[34,108071,108072],{"class":40},"action ",[34,108074,153],{"class":87},[34,108076,108077],{"class":40}," np.clip(action, ",[34,108079,1327],{"class":87},[34,108081,105890],{"class":63},[34,108083,13088],{"class":40},[34,108085,105890],{"class":63},[34,108087,807],{"class":40},[34,108089,108090,108092,108094,108096,108098],{"class":36,"line":51},[34,108091,106501],{"class":40},[34,108093,987],{"class":63},[34,108095,5096],{"class":40},[34,108097,153],{"class":87},[34,108099,108100],{"class":40}," action\n",[14,108102,103237],{"id":103236},[108,108104,108105],{},"这一章建立了控制任务的基本形式：",[24,108107,108110],{"className":108108,"code":108109,"language":5840,"meta":29},[5838],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[31,108111,108109],{"__ignoreMap":29},[108,108113,108114],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[45,108116,108117],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":29,"searchDepth":51,"depth":51,"links":108119},[108120,108121,108122,108127,108131,108132,108133,108141],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":108123},[108124,108125,108126],{"id":106763,"depth":60,"text":106764},{"id":106813,"depth":60,"text":106814},{"id":106879,"depth":60,"text":106880},{"id":101882,"depth":51,"text":101883,"children":108128},[108129,108130],{"id":102202,"depth":60,"text":102202},{"id":102338,"depth":60,"text":102338},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":108134},[108135,108136,108137,108138,108140],{"id":107969,"depth":60,"text":107972},{"id":107981,"depth":60,"text":107981},{"id":108007,"depth":60,"text":108007},{"id":108016,"depth":60,"text":108139},"data.ctrl[0] 写了但没有效果",{"id":108047,"depth":60,"text":108047},{"id":103236,"depth":51,"text":103237},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106451,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108148,"title":108149,"body":108150,"description":29,"extension":724,"meta":110059,"navigation":726,"path":110060,"seo":110061,"stem":110062,"__hash__":110063},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108151,"toc":110035},[108152,108155,108157,108160,108168,108171,108188,108191,108216,108219,108265,108267,108269,108324,108326,108345,108347,108390,108393,108410,108413,108429,108439,108446,108448,108451,108454,108488,108491,108539,108543,108546,108560,108569,108573,108576,108601,108604,108608,108621,108624,108630,108633,108648,108650,108653,108913,108915,108927,108930,109242,109244,109256,109258,109261,109276,109281,109284,109306,109309,109312,109346,109349,109353,109364,109367,109384,109387,109401,109408,109428,109435,109449,109452,109464,109479,109499,109502,109524,109527,109531,109546,109557,109572,109575,109605,109621,109650,109658,109682,109685,109703,109713,109725,109732,109741,109747,109756,109759,109761,109770,109773,109788,109790,109793,109804,109807,109818,109821,109839,109841,109858,109861,109889,109891,109895,109898,109928,109934,109937,109941,109949,109952,109954,109975,109978,109981,109997,110000,110016,110018,110021,110032],[10,108153,108149],{"id":108154},"_5viewer-可视化与-renderer-离屏渲染",[14,108156,101277],{"id":101276},[108,108158,108159],{},"本章掌握两类可视化方式:",[752,108161,108162,108165],{},[755,108163,108164],{},"交互式 viewer: 适合人工观察仿真",[755,108166,108167],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[108,108169,108170],{},"使用官方接口:",[24,108172,108174],{"className":31029,"code":108173,"language":31031,"meta":29,"style":29},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[31,108175,108176,108183],{"__ignoreMap":29},[34,108177,108178,108180],{"class":36,"line":37},[34,108179,31043],{"class":87},[34,108181,108182],{"class":40}," mujoco.viewer\n",[34,108184,108185],{"class":36,"line":51},[34,108186,108187],{"class":40},"mujoco.viewer.launch_passive(model, data)\n",[108,108189,108190],{},"以及:",[24,108192,108194],{"className":31029,"code":108193,"language":31031,"meta":29,"style":29},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[31,108195,108196,108206],{"__ignoreMap":29},[34,108197,108198,108201,108203],{"class":36,"line":37},[34,108199,108200],{"class":40},"renderer ",[34,108202,153],{"class":87},[34,108204,108205],{"class":40}," mujoco.Renderer(model)\n",[34,108207,108208,108211,108213],{"class":36,"line":51},[34,108209,108210],{"class":40},"image ",[34,108212,153],{"class":87},[34,108214,108215],{"class":40}," renderer.render()\n",[108,108217,108218],{},"新手建议先理解二者区别：",[934,108220,108221,108237],{},[937,108222,108223],{},[940,108224,108225,108228,108231,108234],{},[943,108226,108227],{"align":24388},"工具",[943,108229,108230],{"align":24388},"用途",[943,108232,108233],{"align":24388},"是否打开窗口",[943,108235,108236],{"align":24388},"常见场景",[980,108238,108239,108252],{},[940,108240,108241,108244,108247,108249],{},[985,108242,108243],{"align":24388},"Viewer",[985,108245,108246],{"align":24388},"人眼实时观察仿真",[985,108248,105295],{"align":24388},[985,108250,108251],{"align":24388},"调试模型、看控制效果",[940,108253,108254,108257,108260,108262],{},[985,108255,108256],{"align":24388},"Renderer",[985,108258,108259],{"align":24388},"生成图像数组",[985,108261,105308],{"align":24388},[985,108263,108264],{"align":24388},"保存图片、训练视觉策略、服务器批量采集",[14,108266,101400],{"id":101399},[108,108268,101403],{},[24,108270,108272],{"className":24474,"code":108271,"language":24476,"meta":29,"style":29},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[31,108273,108274,108286,108296,108304,108312],{"__ignoreMap":29},[34,108275,108276,108278,108280,108282,108284],{"class":36,"line":37},[34,108277,25229],{"class":149},[34,108279,26967],{"class":156},[34,108281,24486],{"class":156},[34,108283,27052],{"class":63},[34,108285,25331],{"class":63},[34,108287,108288,108290,108292,108294],{"class":36,"line":51},[34,108289,101438],{"class":156},[34,108291,101441],{"class":156},[34,108293,101444],{"class":156},[34,108295,25331],{"class":63},[34,108297,108298,108300,108302],{"class":36,"line":60},[34,108299,101451],{"class":156},[34,108301,101454],{"class":156},[34,108303,25331],{"class":63},[34,108305,108306,108308,108310],{"class":36,"line":76},[34,108307,101461],{"class":156},[34,108309,101464],{"class":156},[34,108311,25331],{"class":63},[34,108313,108314,108316,108318,108320,108322],{"class":36,"line":93},[34,108315,101471],{"class":156},[34,108317,101474],{"class":156},[34,108319,101477],{"class":156},[34,108321,101480],{"class":156},[34,108323,103146],{"class":156},[108,108325,103449],{},[24,108327,108329],{"className":24474,"code":108328,"language":24476,"meta":29,"style":29},"pip install \"mujoco>=2.3\" numpy pillow\n",[31,108330,108331],{"__ignoreMap":29},[34,108332,108333,108335,108337,108339,108342],{"class":36,"line":37},[34,108334,24483],{"class":149},[34,108336,24486],{"class":156},[34,108338,101560],{"class":156},[34,108340,108341],{"class":156}," numpy",[34,108343,108344],{"class":156}," pillow\n",[108,108346,103466],{},[24,108348,108350],{"className":24474,"code":108349,"language":24476,"meta":29,"style":29},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[31,108351,108352,108369,108378],{"__ignoreMap":29},[34,108353,108354,108356,108358,108360,108363,108365,108367],{"class":36,"line":37},[34,108355,30981],{"class":149},[34,108357,29827],{"class":156},[34,108359,25768],{"class":63},[34,108361,108362],{"class":156}," mujoco-render",[34,108364,101605],{"class":156},[34,108366,101608],{"class":63},[34,108368,101611],{"class":63},[34,108370,108371,108373,108375],{"class":36,"line":51},[34,108372,30981],{"class":149},[34,108374,101618],{"class":156},[34,108376,108377],{"class":156}," mujoco-render\n",[34,108379,108380,108382,108384,108386,108388],{"class":36,"line":60},[34,108381,24483],{"class":149},[34,108383,24486],{"class":156},[34,108385,101560],{"class":156},[34,108387,108341],{"class":156},[34,108389,108344],{"class":156},[108,108391,108392],{},"离屏渲染后端:",[24,108394,108396],{"className":24474,"code":108395,"language":24476,"meta":29,"style":29},"export MUJOCO_GL=egl\n",[31,108397,108398],{"__ignoreMap":29},[34,108399,108400,108402,108405,108407],{"class":36,"line":37},[34,108401,25695],{"class":87},[34,108403,108404],{"class":40}," MUJOCO_GL",[34,108406,153],{"class":87},[34,108408,108409],{"class":40},"egl\n",[108,108411,108412],{},"或:",[24,108414,108416],{"className":24474,"code":108415,"language":24476,"meta":29,"style":29},"export MUJOCO_GL=osmesa\n",[31,108417,108418],{"__ignoreMap":29},[34,108419,108420,108422,108424,108426],{"class":36,"line":37},[34,108421,25695],{"class":87},[34,108423,108404],{"class":40},[34,108425,153],{"class":87},[34,108427,108428],{"class":40},"osmesa\n",[108,108430,108431,108432,108435,108436,29036],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[31,108433,108434],{},"egl"," 失败，再尝试 ",[31,108437,108438],{},"osmesa",[108,108440,108441,108442,108445],{},"如果你在本机桌面环境运行，通常先不要设置 ",[31,108443,108444],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108447,101675],{"id":101674},[108,108449,108450],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[108,108452,108453],{},"典型 viewer 流程:",[24,108455,108457],{"className":31029,"code":108456,"language":31031,"meta":29,"style":29},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[31,108458,108459,108472,108479,108483],{"__ignoreMap":29},[34,108460,108461,108464,108467,108469],{"class":36,"line":37},[34,108462,108463],{"class":87},"with",[34,108465,108466],{"class":40}," mujoco.viewer.launch_passive(model, data) ",[34,108468,32034],{"class":87},[34,108470,108471],{"class":40}," viewer:\n",[34,108473,108474,108476],{"class":36,"line":51},[34,108475,2904],{"class":87},[34,108477,108478],{"class":40}," viewer.is_running():\n",[34,108480,108481],{"class":36,"line":60},[34,108482,102146],{"class":40},[34,108484,108485],{"class":36,"line":76},[34,108486,108487],{"class":40},"        viewer.sync()\n",[108,108489,108490],{},"典型 renderer 流程:",[24,108492,108494],{"className":31029,"code":108493,"language":31031,"meta":29,"style":29},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[31,108495,108496,108522,108526,108531],{"__ignoreMap":29},[34,108497,108498,108500,108502,108505,108507,108509,108511,108513,108515,108517,108520],{"class":36,"line":37},[34,108499,108200],{"class":40},[34,108501,153],{"class":87},[34,108503,108504],{"class":40}," mujoco.Renderer(model, ",[34,108506,25634],{"class":5869},[34,108508,153],{"class":87},[34,108510,42993],{"class":63},[34,108512,13088],{"class":40},[34,108514,25630],{"class":5869},[34,108516,153],{"class":87},[34,108518,108519],{"class":63},"640",[34,108521,807],{"class":40},[34,108523,108524],{"class":36,"line":51},[34,108525,105135],{"class":40},[34,108527,108528],{"class":36,"line":60},[34,108529,108530],{"class":40},"renderer.update_scene(data)\n",[34,108532,108533,108535,108537],{"class":36,"line":76},[34,108534,108210],{"class":40},[34,108536,153],{"class":87},[34,108538,108215],{"class":40},[19,108540,108542],{"id":108541},"viewer-的同步逻辑","viewer 的同步逻辑",[108,108544,108545],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[24,108547,108549],{"className":31029,"code":108548,"language":31031,"meta":29,"style":29},"mujoco.mj_step(model, data)\nviewer.sync()\n",[31,108550,108551,108555],{"__ignoreMap":29},[34,108552,108553],{"class":36,"line":37},[34,108554,105135],{"class":40},[34,108556,108557],{"class":36,"line":51},[34,108558,108559],{"class":40},"viewer.sync()\n",[108,108561,108562,108564,108565,108568],{},[31,108563,101845],{}," 负责算物理，",[31,108566,108567],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[19,108570,108572],{"id":108571},"为什么要-sleep","为什么要 sleep",[108,108574,108575],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[24,108577,108579],{"className":31029,"code":108578,"language":31031,"meta":29,"style":29},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[31,108580,108581],{"__ignoreMap":29},[34,108582,108583,108586,108588,108591,108593,108596,108598],{"class":36,"line":37},[34,108584,108585],{"class":40},"sleep_time ",[34,108587,153],{"class":87},[34,108589,108590],{"class":40}," model.opt.timestep ",[34,108592,1327],{"class":87},[34,108594,108595],{"class":40}," (time.time() ",[34,108597,1327],{"class":87},[34,108599,108600],{"class":40}," step_start)\n",[108,108602,108603],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[19,108605,108607],{"id":108606},"renderer-输出是什么","renderer 输出是什么",[24,108609,108611],{"className":31029,"code":108610,"language":31031,"meta":29,"style":29},"image = renderer.render()\n",[31,108612,108613],{"__ignoreMap":29},[34,108614,108615,108617,108619],{"class":36,"line":37},[34,108616,108210],{"class":40},[34,108618,153],{"class":87},[34,108620,108215],{"class":40},[108,108622,108623],{},"得到的是 NumPy 数组，形状通常是：",[24,108625,108628],{"className":108626,"code":108627,"language":5840,"meta":29},[5838],"(height, width, 3)\n",[31,108629,108627],{"__ignoreMap":29},[108,108631,108632],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[24,108634,108636],{"className":31029,"code":108635,"language":31031,"meta":29,"style":29},"Image.fromarray(image).save(\"render_output.png\")\n",[31,108637,108638],{"__ignoreMap":29},[34,108639,108640,108643,108646],{"class":36,"line":37},[34,108641,108642],{"class":40},"Image.fromarray(image).save(",[34,108644,108645],{"class":156},"\"render_output.png\"",[34,108647,807],{"class":40},[14,108649,101883],{"id":101882},[108,108651,108652],{},"交互式 Viewer:",[24,108654,108656],{"className":31029,"code":108655,"language":31031,"meta":29,"style":29},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,108657,108658,108664,108668,108674,108680,108684,108688,108696,108701,108705,108709,108713,108718,108723,108727,108731,108735,108740,108744,108748,108752,108756,108760,108764,108776,108788,108796,108800,108810,108830,108840,108845,108850,108854,108871,108884,108889,108893,108897,108909],{"__ignoreMap":29},[34,108659,108660,108662],{"class":36,"line":37},[34,108661,31043],{"class":87},[34,108663,32480],{"class":40},[34,108665,108666],{"class":36,"line":51},[34,108667,3053],{"emptyLinePlaceholder":726},[34,108669,108670,108672],{"class":36,"line":60},[34,108671,31043],{"class":87},[34,108673,101931],{"class":40},[34,108675,108676,108678],{"class":36,"line":76},[34,108677,31043],{"class":87},[34,108679,108182],{"class":40},[34,108681,108682],{"class":36,"line":93},[34,108683,3053],{"emptyLinePlaceholder":726},[34,108685,108686],{"class":36,"line":99},[34,108687,3053],{"emptyLinePlaceholder":726},[34,108689,108690,108692,108694],{"class":36,"line":353},[34,108691,101944],{"class":63},[34,108693,14217],{"class":87},[34,108695,101949],{"class":156},[34,108697,108698],{"class":36,"line":359},[34,108699,108700],{"class":156},"\u003Cmujoco model=\"viewer_demo\">\n",[34,108702,108703],{"class":36,"line":579},[34,108704,101959],{"class":156},[34,108706,108707],{"class":36,"line":589},[34,108708,3053],{"emptyLinePlaceholder":726},[34,108710,108711],{"class":36,"line":601},[34,108712,101968],{"class":156},[34,108714,108715],{"class":36,"line":613},[34,108716,108717],{"class":156},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[34,108719,108720],{"class":36,"line":618},[34,108721,108722],{"class":156},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,108724,108725],{"class":36,"line":628},[34,108726,3053],{"emptyLinePlaceholder":726},[34,108728,108729],{"class":36,"line":640},[34,108730,101982],{"class":156},[34,108732,108733],{"class":36,"line":2301},[34,108734,101987],{"class":156},[34,108736,108737],{"class":36,"line":2307},[34,108738,108739],{"class":156},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,108741,108742],{"class":36,"line":2328},[34,108743,101997],{"class":156},[34,108745,108746],{"class":36,"line":2333},[34,108747,102002],{"class":156},[34,108749,108750],{"class":36,"line":2347},[34,108751,102007],{"class":156},[34,108753,108754],{"class":36,"line":2352},[34,108755,96328],{"class":156},[34,108757,108758],{"class":36,"line":2381},[34,108759,3053],{"emptyLinePlaceholder":726},[34,108761,108762],{"class":36,"line":2386},[34,108763,3053],{"emptyLinePlaceholder":726},[34,108765,108766,108768,108770,108772,108774],{"class":36,"line":2403},[34,108767,32598],{"class":87},[34,108769,2626],{"class":149},[34,108771,102028],{"class":40},[34,108773,96316],{"class":63},[34,108775,4392],{"class":40},[34,108777,108778,108780,108782,108784,108786],{"class":36,"line":2408},[34,108779,102037],{"class":40},[34,108781,153],{"class":87},[34,108783,102042],{"class":40},[34,108785,101944],{"class":63},[34,108787,807],{"class":40},[34,108789,108790,108792,108794],{"class":36,"line":2413},[34,108791,102051],{"class":40},[34,108793,153],{"class":87},[34,108795,102056],{"class":40},[34,108797,108798],{"class":36,"line":2418},[34,108799,3053],{"emptyLinePlaceholder":726},[34,108801,108802,108804,108806,108808],{"class":36,"line":2432},[34,108803,34829],{"class":87},[34,108805,108466],{"class":40},[34,108807,32034],{"class":87},[34,108809,108471],{"class":40},[34,108811,108812,108815,108818,108820,108823,108825,108828],{"class":36,"line":2437},[34,108813,108814],{"class":87},"        while",[34,108816,108817],{"class":40}," viewer.is_running() ",[34,108819,31113],{"class":87},[34,108821,108822],{"class":40}," data.time ",[34,108824,41],{"class":87},[34,108826,108827],{"class":63}," 5.0",[34,108829,4392],{"class":40},[34,108831,108832,108835,108837],{"class":36,"line":3230},[34,108833,108834],{"class":40},"            step_start ",[34,108836,153],{"class":87},[34,108838,108839],{"class":40}," time.time()\n",[34,108841,108842],{"class":36,"line":3244},[34,108843,108844],{"class":40},"            mujoco.mj_step(model, data)\n",[34,108846,108847],{"class":36,"line":3252},[34,108848,108849],{"class":40},"            viewer.sync()\n",[34,108851,108852],{"class":36,"line":3257},[34,108853,3053],{"emptyLinePlaceholder":726},[34,108855,108856,108859,108861,108863,108865,108867,108869],{"class":36,"line":3263},[34,108857,108858],{"class":40},"            sleep_time ",[34,108860,153],{"class":87},[34,108862,108590],{"class":40},[34,108864,1327],{"class":87},[34,108866,108595],{"class":40},[34,108868,1327],{"class":87},[34,108870,108600],{"class":40},[34,108872,108873,108875,108878,108880,108882],{"class":36,"line":3269},[34,108874,5295],{"class":87},[34,108876,108877],{"class":40}," sleep_time ",[34,108879,1753],{"class":87},[34,108881,4746],{"class":63},[34,108883,4392],{"class":40},[34,108885,108886],{"class":36,"line":3274},[34,108887,108888],{"class":40},"                time.sleep(sleep_time)\n",[34,108890,108891],{"class":36,"line":8601},[34,108892,3053],{"emptyLinePlaceholder":726},[34,108894,108895],{"class":36,"line":8625},[34,108896,3053],{"emptyLinePlaceholder":726},[34,108898,108899,108901,108903,108905,108907],{"class":36,"line":8630},[34,108900,2191],{"class":87},[34,108902,31871],{"class":63},[34,108904,102189],{"class":87},[34,108906,102192],{"class":156},[34,108908,4392],{"class":40},[34,108910,108911],{"class":36,"line":8636},[34,108912,102199],{"class":40},[108,108914,104200],{},[24,108916,108918],{"className":24474,"code":108917,"language":24476,"meta":29,"style":29},"touch ch5_viewer.py\n",[31,108919,108920],{"__ignoreMap":29},[34,108921,108922,108924],{"class":36,"line":37},[34,108923,101913],{"class":149},[34,108925,108926],{"class":156}," ch5_viewer.py\n",[108,108928,108929],{},"离屏 Renderer 保存图片:",[24,108931,108933],{"className":31029,"code":108932,"language":31031,"meta":29,"style":29},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,108934,108935,108947,108951,108957,108967,108971,108975,108983,108988,108992,108996,109000,109004,109009,109013,109017,109021,109025,109029,109033,109037,109041,109045,109049,109053,109065,109077,109085,109110,109114,109130,109134,109138,109153,109162,109166,109180,109185,109190,109194,109206,109218,109222,109226,109238],{"__ignoreMap":29},[34,108936,108937,108939,108942,108944],{"class":36,"line":37},[34,108938,31388],{"class":87},[34,108940,108941],{"class":40}," pathlib ",[34,108943,31043],{"class":87},[34,108945,108946],{"class":40}," Path\n",[34,108948,108949],{"class":36,"line":51},[34,108950,3053],{"emptyLinePlaceholder":726},[34,108952,108953,108955],{"class":36,"line":60},[34,108954,31043],{"class":87},[34,108956,101931],{"class":40},[34,108958,108959,108961,108963,108965],{"class":36,"line":76},[34,108960,31388],{"class":87},[34,108962,47914],{"class":63},[34,108964,47917],{"class":87},[34,108966,47920],{"class":40},[34,108968,108969],{"class":36,"line":93},[34,108970,3053],{"emptyLinePlaceholder":726},[34,108972,108973],{"class":36,"line":99},[34,108974,3053],{"emptyLinePlaceholder":726},[34,108976,108977,108979,108981],{"class":36,"line":353},[34,108978,101944],{"class":63},[34,108980,14217],{"class":87},[34,108982,101949],{"class":156},[34,108984,108985],{"class":36,"line":359},[34,108986,108987],{"class":156},"\u003Cmujoco model=\"renderer_demo\">\n",[34,108989,108990],{"class":36,"line":579},[34,108991,101959],{"class":156},[34,108993,108994],{"class":36,"line":589},[34,108995,3053],{"emptyLinePlaceholder":726},[34,108997,108998],{"class":36,"line":601},[34,108999,101968],{"class":156},[34,109001,109002],{"class":36,"line":613},[34,109003,108717],{"class":156},[34,109005,109006],{"class":36,"line":618},[34,109007,109008],{"class":156},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[34,109010,109011],{"class":36,"line":628},[34,109012,108722],{"class":156},[34,109014,109015],{"class":36,"line":640},[34,109016,3053],{"emptyLinePlaceholder":726},[34,109018,109019],{"class":36,"line":2301},[34,109020,101982],{"class":156},[34,109022,109023],{"class":36,"line":2307},[34,109024,101987],{"class":156},[34,109026,109027],{"class":36,"line":2328},[34,109028,108739],{"class":156},[34,109030,109031],{"class":36,"line":2333},[34,109032,101997],{"class":156},[34,109034,109035],{"class":36,"line":2347},[34,109036,102002],{"class":156},[34,109038,109039],{"class":36,"line":2352},[34,109040,102007],{"class":156},[34,109042,109043],{"class":36,"line":2381},[34,109044,96328],{"class":156},[34,109046,109047],{"class":36,"line":2386},[34,109048,3053],{"emptyLinePlaceholder":726},[34,109050,109051],{"class":36,"line":2403},[34,109052,3053],{"emptyLinePlaceholder":726},[34,109054,109055,109057,109059,109061,109063],{"class":36,"line":2408},[34,109056,32598],{"class":87},[34,109058,2626],{"class":149},[34,109060,102028],{"class":40},[34,109062,96316],{"class":63},[34,109064,4392],{"class":40},[34,109066,109067,109069,109071,109073,109075],{"class":36,"line":2413},[34,109068,102037],{"class":40},[34,109070,153],{"class":87},[34,109072,102042],{"class":40},[34,109074,101944],{"class":63},[34,109076,807],{"class":40},[34,109078,109079,109081,109083],{"class":36,"line":2418},[34,109080,102051],{"class":40},[34,109082,153],{"class":87},[34,109084,102056],{"class":40},[34,109086,109087,109090,109092,109094,109096,109098,109100,109102,109104,109106,109108],{"class":36,"line":2432},[34,109088,109089],{"class":40},"    renderer ",[34,109091,153],{"class":87},[34,109093,108504],{"class":40},[34,109095,25634],{"class":5869},[34,109097,153],{"class":87},[34,109099,42993],{"class":63},[34,109101,13088],{"class":40},[34,109103,25630],{"class":5869},[34,109105,153],{"class":87},[34,109107,108519],{"class":63},[34,109109,807],{"class":40},[34,109111,109112],{"class":36,"line":2437},[34,109113,3053],{"emptyLinePlaceholder":726},[34,109115,109116,109118,109120,109122,109124,109126,109128],{"class":36,"line":3230},[34,109117,3854],{"class":87},[34,109119,102131],{"class":40},[34,109121,26695],{"class":87},[34,109123,33094],{"class":63},[34,109125,801],{"class":40},[34,109127,1106],{"class":63},[34,109129,31437],{"class":40},[34,109131,109132],{"class":36,"line":3244},[34,109133,102146],{"class":40},[34,109135,109136],{"class":36,"line":3252},[34,109137,3053],{"emptyLinePlaceholder":726},[34,109139,109140,109143,109146,109148,109151],{"class":36,"line":3257},[34,109141,109142],{"class":40},"    renderer.update_scene(data, ",[34,109144,109145],{"class":5869},"camera",[34,109147,153],{"class":87},[34,109149,109150],{"class":156},"\"fixed_camera\"",[34,109152,807],{"class":40},[34,109154,109155,109158,109160],{"class":36,"line":3263},[34,109156,109157],{"class":40},"    image ",[34,109159,153],{"class":87},[34,109161,108215],{"class":40},[34,109163,109164],{"class":36,"line":3269},[34,109165,3053],{"emptyLinePlaceholder":726},[34,109167,109168,109171,109173,109176,109178],{"class":36,"line":3274},[34,109169,109170],{"class":40},"    output_path ",[34,109172,153],{"class":87},[34,109174,109175],{"class":40}," Path(",[34,109177,108645],{"class":156},[34,109179,807],{"class":40},[34,109181,109182],{"class":36,"line":8601},[34,109183,109184],{"class":40},"    Image.fromarray(image).save(output_path)\n",[34,109186,109187],{"class":36,"line":8625},[34,109188,109189],{"class":40},"    renderer.close()\n",[34,109191,109192],{"class":36,"line":8630},[34,109193,3053],{"emptyLinePlaceholder":726},[34,109195,109196,109198,109200,109203],{"class":36,"line":8636},[34,109197,31950],{"class":63},[34,109199,801],{"class":40},[34,109201,109202],{"class":156},"\"saved:\"",[34,109204,109205],{"class":40},", output_path.resolve())\n",[34,109207,109208,109210,109212,109215],{"class":36,"line":8663},[34,109209,31950],{"class":63},[34,109211,801],{"class":40},[34,109213,109214],{"class":156},"\"image shape:\"",[34,109216,109217],{"class":40},", image.shape)\n",[34,109219,109220],{"class":36,"line":8668},[34,109221,3053],{"emptyLinePlaceholder":726},[34,109223,109224],{"class":36,"line":8674},[34,109225,3053],{"emptyLinePlaceholder":726},[34,109227,109228,109230,109232,109234,109236],{"class":36,"line":8686},[34,109229,2191],{"class":87},[34,109231,31871],{"class":63},[34,109233,102189],{"class":87},[34,109235,102192],{"class":156},[34,109237,4392],{"class":40},[34,109239,109240],{"class":36,"line":8698},[34,109241,102199],{"class":40},[108,109243,104200],{},[24,109245,109247],{"className":24474,"code":109246,"language":24476,"meta":29,"style":29},"touch ch5_renderer.py\n",[31,109248,109249],{"__ignoreMap":29},[34,109250,109251,109253],{"class":36,"line":37},[34,109252,101913],{"class":149},[34,109254,109255],{"class":156}," ch5_renderer.py\n",[19,109257,102202],{"id":102202},[108,109259,109260],{},"viewer 上下文：",[24,109262,109264],{"className":31029,"code":109263,"language":31031,"meta":29,"style":29},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[31,109265,109266],{"__ignoreMap":29},[34,109267,109268,109270,109272,109274],{"class":36,"line":37},[34,109269,108463],{"class":87},[34,109271,108466],{"class":40},[34,109273,32034],{"class":87},[34,109275,108471],{"class":40},[108,109277,109278,109280],{},[31,109279,108463],{}," 语句会创建窗口，并在退出时自动清理资源。",[108,109282,109283],{},"窗口循环：",[24,109285,109287],{"className":31029,"code":109286,"language":31031,"meta":29,"style":29},"while viewer.is_running() and data.time \u003C 5.0:\n",[31,109288,109289],{"__ignoreMap":29},[34,109290,109291,109294,109296,109298,109300,109302,109304],{"class":36,"line":37},[34,109292,109293],{"class":87},"while",[34,109295,108817],{"class":40},[34,109297,31113],{"class":87},[34,109299,108822],{"class":40},[34,109301,41],{"class":87},[34,109303,108827],{"class":63},[34,109305,4392],{"class":40},[108,109307,109308],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[108,109310,109311],{},"固定相机：",[24,109313,109315],{"className":53713,"code":109314,"language":53715,"meta":29,"style":29},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[31,109316,109317],{"__ignoreMap":29},[34,109318,109319,109321,109323,109325,109327,109329,109331,109333,109336,109339,109341,109344],{"class":36,"line":37},[34,109320,41],{"class":40},[34,109322,109145],{"class":44},[34,109324,15573],{"class":149},[34,109326,153],{"class":40},[34,109328,109150],{"class":156},[34,109330,101736],{"class":149},[34,109332,153],{"class":40},[34,109334,109335],{"class":156},"\"1.5 -2.0 1.2\"",[34,109337,109338],{"class":149}," xyaxes",[34,109340,153],{"class":40},[34,109342,109343],{"class":156},"\"1 0.75 0 0 0 1\"",[34,109345,101774],{"class":40},[108,109347,109348],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[19,109350,109352],{"id":109351},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[24,109354,109356],{"className":31029,"code":109355,"language":31031,"meta":29,"style":29},"import time\n",[31,109357,109358],{"__ignoreMap":29},[34,109359,109360,109362],{"class":36,"line":37},[34,109361,31043],{"class":87},[34,109363,32480],{"class":40},[108,109365,109366],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[24,109368,109370],{"className":31029,"code":109369,"language":31031,"meta":29,"style":29},"import mujoco\nimport mujoco.viewer\n",[31,109371,109372,109378],{"__ignoreMap":29},[34,109373,109374,109376],{"class":36,"line":37},[34,109375,31043],{"class":87},[34,109377,101931],{"class":40},[34,109379,109380,109382],{"class":36,"line":51},[34,109381,31043],{"class":87},[34,109383,108182],{"class":40},[108,109385,109386],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[24,109388,109389],{"className":31029,"code":109263,"language":31031,"meta":29,"style":29},[31,109390,109391],{"__ignoreMap":29},[34,109392,109393,109395,109397,109399],{"class":36,"line":37},[34,109394,108463],{"class":87},[34,109396,108466],{"class":40},[34,109398,32034],{"class":87},[34,109400,108471],{"class":40},[108,109402,109403,109404,109407],{},"打开一个 viewer 窗口。",[31,109405,109406],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[24,109409,109410],{"className":31029,"code":109286,"language":31031,"meta":29,"style":29},[31,109411,109412],{"__ignoreMap":29},[34,109413,109414,109416,109418,109420,109422,109424,109426],{"class":36,"line":37},[34,109415,109293],{"class":87},[34,109417,108817],{"class":40},[34,109419,31113],{"class":87},[34,109421,108822],{"class":40},[34,109423,41],{"class":87},[34,109425,108827],{"class":63},[34,109427,4392],{"class":40},[108,109429,109430,109431,109434],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[31,109432,109433],{},"viewer.is_running()"," 会变成 false，循环结束。",[24,109436,109438],{"className":31029,"code":109437,"language":31031,"meta":29,"style":29},"step_start = time.time()\n",[31,109439,109440],{"__ignoreMap":29},[34,109441,109442,109445,109447],{"class":36,"line":37},[34,109443,109444],{"class":40},"step_start ",[34,109446,153],{"class":87},[34,109448,108839],{"class":40},[108,109450,109451],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[24,109453,109454],{"className":31029,"code":108548,"language":31031,"meta":29,"style":29},[31,109455,109456,109460],{"__ignoreMap":29},[34,109457,109458],{"class":36,"line":37},[34,109459,105135],{"class":40},[34,109461,109462],{"class":36,"line":51},[34,109463,108559],{"class":40},[108,109465,109466,109468,109469,109471,109472,109474,109475,109478],{},[31,109467,101845],{}," 推进物理仿真。",[31,109470,108567],{}," 把最新的 ",[31,109473,34052],{}," 同步到窗口里显示。没有 ",[31,109476,109477],{},"sync()","，窗口可能看不到最新状态。",[24,109480,109481],{"className":31029,"code":108578,"language":31031,"meta":29,"style":29},[31,109482,109483],{"__ignoreMap":29},[34,109484,109485,109487,109489,109491,109493,109495,109497],{"class":36,"line":37},[34,109486,108585],{"class":40},[34,109488,153],{"class":87},[34,109490,108590],{"class":40},[34,109492,1327],{"class":87},[34,109494,108595],{"class":40},[34,109496,1327],{"class":87},[34,109498,108600],{"class":40},[108,109500,109501],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[24,109503,109505],{"className":31029,"code":109504,"language":31031,"meta":29,"style":29},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[31,109506,109507,109519],{"__ignoreMap":29},[34,109508,109509,109511,109513,109515,109517],{"class":36,"line":37},[34,109510,2191],{"class":87},[34,109512,108877],{"class":40},[34,109514,1753],{"class":87},[34,109516,4746],{"class":63},[34,109518,4392],{"class":40},[34,109520,109521],{"class":36,"line":51},[34,109522,109523],{"class":40},"    time.sleep(sleep_time)\n",[108,109525,109526],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[19,109528,109530],{"id":109529},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[24,109532,109534],{"className":31029,"code":109533,"language":31031,"meta":29,"style":29},"from pathlib import Path\n",[31,109535,109536],{"__ignoreMap":29},[34,109537,109538,109540,109542,109544],{"class":36,"line":37},[34,109539,31388],{"class":87},[34,109541,108941],{"class":40},[34,109543,31043],{"class":87},[34,109545,108946],{"class":40},[108,109547,109548,109549,109552,109553,109556],{},"导入 ",[31,109550,109551],{},"Path","，用来处理文件路径。相比直接写字符串，",[31,109554,109555],{},"Path(\"render_output.png\")"," 更清晰。",[24,109558,109560],{"className":31029,"code":109559,"language":31031,"meta":29,"style":29},"from PIL import Image\n",[31,109561,109562],{"__ignoreMap":29},[34,109563,109564,109566,109568,109570],{"class":36,"line":37},[34,109565,31388],{"class":87},[34,109567,47914],{"class":63},[34,109569,47917],{"class":87},[34,109571,47920],{"class":40},[108,109573,109574],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[24,109576,109577],{"className":53713,"code":109314,"language":53715,"meta":29,"style":29},[31,109578,109579],{"__ignoreMap":29},[34,109580,109581,109583,109585,109587,109589,109591,109593,109595,109597,109599,109601,109603],{"class":36,"line":37},[34,109582,41],{"class":40},[34,109584,109145],{"class":44},[34,109586,15573],{"class":149},[34,109588,153],{"class":40},[34,109590,109150],{"class":156},[34,109592,101736],{"class":149},[34,109594,153],{"class":40},[34,109596,109335],{"class":156},[34,109598,109338],{"class":149},[34,109600,153],{"class":40},[34,109602,109343],{"class":156},[34,109604,101774],{"class":40},[108,109606,109607,109608,109610,109611,109613,109614,109617,109618,109620],{},"定义一个相机。",[31,109609,80440],{}," 是相机名字。",[31,109612,104776],{}," 是相机在世界里的位置。",[31,109615,109616],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[31,109619,104776],{}," 来调视角。",[24,109622,109624],{"className":31029,"code":109623,"language":31031,"meta":29,"style":29},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[31,109625,109626],{"__ignoreMap":29},[34,109627,109628,109630,109632,109634,109636,109638,109640,109642,109644,109646,109648],{"class":36,"line":37},[34,109629,108200],{"class":40},[34,109631,153],{"class":87},[34,109633,108504],{"class":40},[34,109635,25634],{"class":5869},[34,109637,153],{"class":87},[34,109639,42993],{"class":63},[34,109641,13088],{"class":40},[34,109643,25630],{"class":5869},[34,109645,153],{"class":87},[34,109647,108519],{"class":63},[34,109649,807],{"class":40},[108,109651,109652,109653,101648,109655,109657],{},"创建离屏渲染器。",[31,109654,25634],{},[31,109656,25630],{}," 决定输出图片大小。",[24,109659,109660],{"className":31029,"code":102306,"language":31031,"meta":29,"style":29},[31,109661,109662,109678],{"__ignoreMap":29},[34,109663,109664,109666,109668,109670,109672,109674,109676],{"class":36,"line":37},[34,109665,3678],{"class":87},[34,109667,102131],{"class":40},[34,109669,26695],{"class":87},[34,109671,33094],{"class":63},[34,109673,801],{"class":40},[34,109675,1106],{"class":63},[34,109677,31437],{"class":40},[34,109679,109680],{"class":36,"line":51},[34,109681,102329],{"class":40},[108,109683,109684],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[24,109686,109688],{"className":31029,"code":109687,"language":31031,"meta":29,"style":29},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[31,109689,109690],{"__ignoreMap":29},[34,109691,109692,109695,109697,109699,109701],{"class":36,"line":37},[34,109693,109694],{"class":40},"renderer.update_scene(data, ",[34,109696,109145],{"class":5869},[34,109698,153],{"class":87},[34,109700,109150],{"class":156},[34,109702,807],{"class":40},[108,109704,109705,109706,109708,109709,109712],{},"告诉 renderer：用当前 ",[31,109707,34052],{}," 的状态更新画面，并使用名为 ",[31,109710,109711],{},"fixed_camera"," 的相机视角。",[24,109714,109715],{"className":31029,"code":108610,"language":31031,"meta":29,"style":29},[31,109716,109717],{"__ignoreMap":29},[34,109718,109719,109721,109723],{"class":36,"line":37},[34,109720,108210],{"class":40},[34,109722,153],{"class":87},[34,109724,108215],{"class":40},[108,109726,109727,109728,109731],{},"真正渲染出图像。",[31,109729,109730],{},"image"," 是一个 NumPy 数组，不是文件。",[24,109733,109735],{"className":31029,"code":109734,"language":31031,"meta":29,"style":29},"Image.fromarray(image).save(output_path)\n",[31,109736,109737],{"__ignoreMap":29},[34,109738,109739],{"class":36,"line":37},[34,109740,109734],{"class":40},[108,109742,109743,109744,29036],{},"把数组转换成图片，并保存到 ",[31,109745,109746],{},"render_output.png",[24,109748,109750],{"className":31029,"code":109749,"language":31031,"meta":29,"style":29},"renderer.close()\n",[31,109751,109752],{"__ignoreMap":29},[34,109753,109754],{"class":36,"line":37},[34,109755,109749],{"class":40},[108,109757,109758],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109760,102946],{"id":102945},[108,109762,109763,109764,109766,109767,29036],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[31,109765,109746],{},"，并输出图像数组形状，例如 ",[31,109768,109769],{},"(480, 640, 3)",[108,109771,109772],{},"如果图片里看不到方块，先检查：",[752,109774,109775,109778,109781],{},[755,109776,109777],{},"方块是否掉到相机视野外。",[755,109779,109780],{},"camera 位置是否合理。",[755,109782,109783,109784,109787],{},"是否在 ",[31,109785,109786],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109789,102978],{"id":102977},[108,109791,109792],{},"运行 viewer:",[24,109794,109796],{"className":24474,"code":109795,"language":24476,"meta":29,"style":29},"python ch5_viewer.py\n",[31,109797,109798],{"__ignoreMap":29},[34,109799,109800,109802],{"class":36,"line":37},[34,109801,31031],{"class":149},[34,109803,108926],{"class":156},[108,109805,109806],{},"运行 renderer:",[24,109808,109810],{"className":24474,"code":109809,"language":24476,"meta":29,"style":29},"python ch5_renderer.py\n",[31,109811,109812],{"__ignoreMap":29},[34,109813,109814,109816],{"class":36,"line":37},[34,109815,31031],{"class":149},[34,109817,109255],{"class":156},[108,109819,109820],{},"如果在服务器上运行:",[24,109822,109824],{"className":24474,"code":109823,"language":24476,"meta":29,"style":29},"MUJOCO_GL=egl python ch5_renderer.py\n",[31,109825,109826],{"__ignoreMap":29},[34,109827,109828,109830,109832,109834,109837],{"class":36,"line":37},[34,109829,108444],{"class":40},[34,109831,153],{"class":87},[34,109833,108434],{"class":156},[34,109835,109836],{"class":149}," python",[34,109838,109255],{"class":156},[108,109840,108412],{},[24,109842,109844],{"className":24474,"code":109843,"language":24476,"meta":29,"style":29},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[31,109845,109846],{"__ignoreMap":29},[34,109847,109848,109850,109852,109854,109856],{"class":36,"line":37},[34,109849,108444],{"class":40},[34,109851,153],{"class":87},[34,109853,108438],{"class":156},[34,109855,109836],{"class":149},[34,109857,109255],{"class":156},[108,109859,109860],{},"再做几个练习：",[752,109862,109863,109870,109873,109879],{},[755,109864,109865,109866,109869],{},"把 renderer 分辨率改成 ",[31,109867,109868],{},"height=240, width=320","，观察输出 shape。",[755,109871,109872],{},"把方块颜色改成蓝色，重新保存图片。",[755,109874,109875,109876,109878],{},"把相机 ",[31,109877,104776],{}," 改远一点，观察画面中物体是否变小。",[755,109880,109881,109882,103044,109885,109888],{},"把 viewer 示例中的 ",[31,109883,109884],{},"data.time \u003C 5.0",[31,109886,109887],{},"data.time \u003C 20.0","，观察更长时间。",[14,109890,103083],{"id":103082},[19,109892,109894],{"id":109893},"viewer-窗口打不开","viewer 窗口打不开",[108,109896,109897],{},"安装:",[24,109899,109901],{"className":24474,"code":109900,"language":24476,"meta":29,"style":29},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[31,109902,109903],{"__ignoreMap":29},[34,109904,109905,109907,109909,109911,109913,109915,109917,109919,109921,109923,109925],{"class":36,"line":37},[34,109906,25229],{"class":149},[34,109908,26967],{"class":156},[34,109910,24486],{"class":156},[34,109912,27052],{"class":63},[34,109914,103136],{"class":156},[34,109916,101464],{"class":156},[34,109918,103141],{"class":156},[34,109920,101477],{"class":156},[34,109922,101483],{"class":156},[34,109924,101474],{"class":156},[34,109926,109927],{"class":156}," libXinerama\n",[19,109929,109931],{"id":109930},"glfwerror",[31,109932,109933],{},"GLFWError",[108,109935,109936],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[19,109938,109940],{"id":109939},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[108,109942,109943,109944,83169,109946,109948],{},"尝试 ",[31,109945,101667],{},[31,109947,101670],{},"。可能存在版本差异。",[19,109950,109951],{"id":109951},"保存图片是黑的",[108,109953,103205],{},[752,109955,109956,109959,109962,109972],{},[755,109957,109958],{},"XML 里是否有 light。",[755,109960,109961],{},"相机是否对着模型。",[755,109963,109964,109965,109968,109969,29036],{},"是否先 ",[31,109966,109967],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[31,109970,109971],{},"renderer.render()",[755,109973,109974],{},"物体是否已经掉出视野。",[19,109976,109977],{"id":109977},"远程服务器没有显示器",[108,109979,109980],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[24,109982,109983],{"className":24474,"code":109823,"language":24476,"meta":29,"style":29},[31,109984,109985],{"__ignoreMap":29},[34,109986,109987,109989,109991,109993,109995],{"class":36,"line":37},[34,109988,108444],{"class":40},[34,109990,153],{"class":87},[34,109992,108434],{"class":156},[34,109994,109836],{"class":149},[34,109996,109255],{"class":156},[108,109998,109999],{},"如果 EGL 不可用，再尝试：",[24,110001,110002],{"className":24474,"code":109843,"language":24476,"meta":29,"style":29},[31,110003,110004],{"__ignoreMap":29},[34,110005,110006,110008,110010,110012,110014],{"class":36,"line":37},[34,110007,108444],{"class":40},[34,110009,153],{"class":87},[34,110011,108438],{"class":156},[34,110013,109836],{"class":149},[34,110015,109255],{"class":156},[14,110017,103237],{"id":103236},[108,110019,110020],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[752,110022,110023,110026,110029],{},[755,110024,110025],{},"先用 viewer 看模型和控制是否正常。",[755,110027,110028],{},"再用 renderer 保存图片或构造视觉观测。",[755,110030,110031],{},"最后把状态、动作、图像、奖励组织成训练数据。",[45,110033,110034],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":29,"searchDepth":51,"depth":51,"links":110036},[110037,110038,110039,110044,110049,110050,110051,110058],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":110040},[110041,110042,110043],{"id":108541,"depth":60,"text":108542},{"id":108571,"depth":60,"text":108572},{"id":108606,"depth":60,"text":108607},{"id":101882,"depth":51,"text":101883,"children":110045},[110046,110047,110048],{"id":102202,"depth":60,"text":102202},{"id":109351,"depth":60,"text":109352},{"id":109529,"depth":60,"text":109530},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":110052},[110053,110054,110055,110056,110057],{"id":109893,"depth":60,"text":109894},{"id":109930,"depth":60,"text":109933},{"id":109939,"depth":60,"text":109940},{"id":109951,"depth":60,"text":109951},{"id":109977,"depth":60,"text":109977},{"id":103236,"depth":51,"text":103237},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108149,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110065,"title":110066,"body":110067,"description":29,"extension":724,"meta":111978,"navigation":726,"path":111979,"seo":111980,"stem":111981,"__hash__":111982},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110068,"toc":111954},[110069,110072,110074,110077,110079,110098,110101,110107,110110,110112,110114,110138,110140,110154,110156,110197,110199,110210,110212,110215,110221,110224,110258,110261,110293,110296,110328,110332,110335,110375,110378,110384,110387,110393,110397,110400,110406,110409,110413,110416,110456,110458,110471,110474,110476,111058,111060,111072,111075,111086,111088,111091,111110,111122,111125,111146,111149,111152,111195,111198,111201,111221,111228,111230,111248,111263,111266,111272,111275,111281,111298,111305,111336,111347,111381,111392,111409,111418,111426,111431,111445,111448,111469,111475,111489,111494,111524,111534,111559,111567,111590,111593,111609,111612,111620,111626,111648,111661,111682,111691,111730,111741,111743,111746,111752,111755,111758,111764,111767,111787,111790,111792,111831,111833,111836,111844,111847,111850,111877,111880,111890,111896,111899,111905,111907,111913,111917,111920,111922,111925,111949,111952],[10,110070,110066],{"id":110071},"_6控制任务cartpole",[14,110073,101277],{"id":101276},[108,110075,110076],{},"本章搭建一个最小 Cartpole 控制任务。",[108,110078,104961],{},[752,110080,110081,110084,110086,110089,110092,110095],{},[755,110082,110083],{},"slide joint",[755,110085,106814],{},[755,110087,110088],{},"cart force actuator",[755,110090,110091],{},"状态观测",[755,110093,110094],{},"简单控制循环",[755,110096,110097],{},"reward 设计雏形",[108,110099,110100],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[24,110102,110105],{"className":110103,"code":110104,"language":5840,"meta":29},[5838],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[31,110106,110104],{"__ignoreMap":29},[108,110108,110109],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110111,101400],{"id":101399},[108,110113,101403],{},[24,110115,110116],{"className":24474,"code":105018,"language":24476,"meta":29,"style":29},[31,110117,110118],{"__ignoreMap":29},[34,110119,110120,110122,110124,110126,110128,110130,110132,110134,110136],{"class":36,"line":37},[34,110121,25229],{"class":149},[34,110123,26967],{"class":156},[34,110125,24486],{"class":156},[34,110127,27052],{"class":63},[34,110129,105033],{"class":156},[34,110131,101428],{"class":156},[34,110133,103131],{"class":156},[34,110135,101444],{"class":156},[34,110137,105042],{"class":156},[108,110139,103449],{},[24,110141,110142],{"className":24474,"code":101549,"language":24476,"meta":29,"style":29},[31,110143,110144],{"__ignoreMap":29},[34,110145,110146,110148,110150,110152],{"class":36,"line":37},[34,110147,24483],{"class":149},[34,110149,24486],{"class":156},[34,110151,101560],{"class":156},[34,110153,101563],{"class":156},[108,110155,103466],{},[24,110157,110159],{"className":24474,"code":110158,"language":24476,"meta":29,"style":29},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[31,110160,110161,110178,110187],{"__ignoreMap":29},[34,110162,110163,110165,110167,110169,110172,110174,110176],{"class":36,"line":37},[34,110164,30981],{"class":149},[34,110166,29827],{"class":156},[34,110168,25768],{"class":63},[34,110170,110171],{"class":156}," mujoco-cartpole",[34,110173,101605],{"class":156},[34,110175,101608],{"class":63},[34,110177,101611],{"class":63},[34,110179,110180,110182,110184],{"class":36,"line":51},[34,110181,30981],{"class":149},[34,110183,101618],{"class":156},[34,110185,110186],{"class":156}," mujoco-cartpole\n",[34,110188,110189,110191,110193,110195],{"class":36,"line":60},[34,110190,24483],{"class":149},[34,110192,24486],{"class":156},[34,110194,101560],{"class":156},[34,110196,101563],{"class":156},[108,110198,101634],{},[752,110200,110201,110204,110207],{},[755,110202,110203],{},"本章不依赖 Gymnasium。",[755,110205,110206],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[755,110208,110209],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110211,101675],{"id":101674},[108,110213,110214],{},"Cartpole 的模型结构:",[24,110216,110219],{"className":110217,"code":110218,"language":5840,"meta":29},[5838],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[31,110220,110218],{"__ignoreMap":29},[108,110222,110223],{},"小车通过 slide joint 左右移动:",[24,110225,110227],{"className":53713,"code":110226,"language":53715,"meta":29,"style":29},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[31,110228,110229],{"__ignoreMap":29},[34,110230,110231,110233,110235,110237,110239,110242,110244,110246,110249,110251,110253,110256],{"class":36,"line":37},[34,110232,41],{"class":40},[34,110234,103586],{"class":44},[34,110236,15573],{"class":149},[34,110238,153],{"class":40},[34,110240,110241],{"class":156},"\"cart_x\"",[34,110243,54469],{"class":149},[34,110245,153],{"class":40},[34,110247,110248],{"class":156},"\"slide\"",[34,110250,106658],{"class":149},[34,110252,153],{"class":40},[34,110254,110255],{"class":156},"\"1 0 0\"",[34,110257,101774],{"class":40},[108,110259,110260],{},"杆子通过 hinge joint 旋转:",[24,110262,110264],{"className":53713,"code":110263,"language":53715,"meta":29,"style":29},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[31,110265,110266],{"__ignoreMap":29},[34,110267,110268,110270,110272,110274,110276,110279,110281,110283,110285,110287,110289,110291],{"class":36,"line":37},[34,110269,41],{"class":40},[34,110271,103586],{"class":44},[34,110273,15573],{"class":149},[34,110275,153],{"class":40},[34,110277,110278],{"class":156},"\"pole_hinge\"",[34,110280,54469],{"class":149},[34,110282,153],{"class":40},[34,110284,106649],{"class":156},[34,110286,106658],{"class":149},[34,110288,153],{"class":40},[34,110290,106663],{"class":156},[34,110292,101774],{"class":40},[108,110294,110295],{},"控制力作用在小车 slide joint 上:",[24,110297,110299],{"className":53713,"code":110298,"language":53715,"meta":29,"style":29},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[31,110300,110301],{"__ignoreMap":29},[34,110302,110303,110305,110307,110309,110311,110314,110316,110318,110320,110322,110324,110326],{"class":36,"line":37},[34,110304,41],{"class":40},[34,110306,106704],{"class":44},[34,110308,15573],{"class":149},[34,110310,153],{"class":40},[34,110312,110313],{"class":156},"\"cart_motor\"",[34,110315,106714],{"class":149},[34,110317,153],{"class":40},[34,110319,110241],{"class":156},[34,110321,106721],{"class":149},[34,110323,153],{"class":40},[34,110325,54961],{"class":156},[34,110327,101774],{"class":40},[19,110329,110331],{"id":110330},"cartpole-的状态是什么","Cartpole 的状态是什么",[108,110333,110334],{},"这个简化模型有两个关节：",[934,110336,110337,110348],{},[937,110338,110339],{},[940,110340,110341,110343,110345],{},[943,110342,103389],{"align":24388},[943,110344,24389],{"align":24388},[943,110346,110347],{"align":24388},"对应状态",[980,110349,110350,110363],{},[940,110351,110352,110357,110360],{},[985,110353,110354],{"align":24388},[31,110355,110356],{},"cart_x",[985,110358,110359],{"align":24388},"slide",[985,110361,110362],{"align":24388},"小车 x 位置",[940,110364,110365,110370,110372],{},[985,110366,110367],{"align":24388},[31,110368,110369],{},"pole_hinge",[985,110371,106470],{"align":24388},[985,110373,110374],{"align":24388},"杆子角度",[108,110376,110377],{},"所以：",[24,110379,110382],{"className":110380,"code":110381,"language":5840,"meta":29},[5838],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[31,110383,110381],{"__ignoreMap":29},[108,110385,110386],{},"把它们拼起来就是观测：",[24,110388,110391],{"className":110389,"code":110390,"language":5840,"meta":29},[5838],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[31,110392,110390],{"__ignoreMap":29},[19,110394,110396],{"id":110395},"action-是什么","action 是什么",[108,110398,110399],{},"本章只有一个 actuator：",[24,110401,110404],{"className":110402,"code":110403,"language":5840,"meta":29},[5838],"data.ctrl[0] = action\n",[31,110405,110403],{"__ignoreMap":29},[108,110407,110408],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[19,110410,110412],{"id":110411},"reward-是什么","reward 是什么",[108,110414,110415],{},"奖励函数：",[24,110417,110419],{"className":31029,"code":110418,"language":31031,"meta":29,"style":29},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[31,110420,110421],{"__ignoreMap":29},[34,110422,110423,110425,110428,110430,110432,110434,110437,110439,110442,110444,110446,110448,110451,110453],{"class":36,"line":37},[34,110424,17698],{"class":87},[34,110426,110427],{"class":63}," float",[34,110429,801],{"class":40},[34,110431,103033],{"class":63},[34,110433,52917],{"class":87},[34,110435,110436],{"class":63}," 0.1",[34,110438,7171],{"class":87},[34,110440,110441],{"class":40}," cart_x ",[34,110443,1250],{"class":87},[34,110445,110441],{"class":40},[34,110447,1327],{"class":87},[34,110449,110450],{"class":40}," pole_angle ",[34,110452,1250],{"class":87},[34,110454,110455],{"class":40}," pole_angle)\n",[108,110457,106856],{},[752,110459,110460,110465,110468],{},[755,110461,110462,110463,29036],{},"基础奖励是 ",[31,110464,103033],{},[755,110466,110467],{},"小车离中心越远，扣分越多。",[755,110469,110470],{},"杆子角度越大，扣分越多。",[108,110472,110473],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110475,101883],{"id":101882},[24,110477,110479],{"className":31029,"code":110478,"language":31031,"meta":29,"style":29},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,110480,110481,110487,110497,110501,110505,110513,110518,110522,110526,110530,110535,110539,110544,110549,110554,110558,110563,110568,110573,110577,110581,110585,110589,110593,110598,110602,110606,110610,110614,110618,110628,110635,110639,110643,110657,110671,110684,110714,110718,110722,110734,110746,110754,110758,110771,110775,110779,110788,110792,110808,110818,110831,110844,110848,110871,110889,110893,110905,110909,110913,110923,110933,110937,110953,110994,110998,111018,111034,111038,111042,111054],{"__ignoreMap":29},[34,110482,110483,110485],{"class":36,"line":37},[34,110484,31043],{"class":87},[34,110486,101931],{"class":40},[34,110488,110489,110491,110493,110495],{"class":36,"line":51},[34,110490,31043],{"class":87},[34,110492,32031],{"class":40},[34,110494,32034],{"class":87},[34,110496,32037],{"class":40},[34,110498,110499],{"class":36,"line":60},[34,110500,3053],{"emptyLinePlaceholder":726},[34,110502,110503],{"class":36,"line":76},[34,110504,3053],{"emptyLinePlaceholder":726},[34,110506,110507,110509,110511],{"class":36,"line":93},[34,110508,101944],{"class":63},[34,110510,14217],{"class":87},[34,110512,101949],{"class":156},[34,110514,110515],{"class":36,"line":99},[34,110516,110517],{"class":156},"\u003Cmujoco model=\"cartpole\">\n",[34,110519,110520],{"class":36,"line":353},[34,110521,101959],{"class":156},[34,110523,110524],{"class":36,"line":359},[34,110525,3053],{"emptyLinePlaceholder":726},[34,110527,110528],{"class":36,"line":579},[34,110529,101968],{"class":156},[34,110531,110532],{"class":36,"line":589},[34,110533,110534],{"class":156},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,110536,110537],{"class":36,"line":601},[34,110538,3053],{"emptyLinePlaceholder":726},[34,110540,110541],{"class":36,"line":613},[34,110542,110543],{"class":156},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[34,110545,110546],{"class":36,"line":618},[34,110547,110548],{"class":156},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[34,110550,110551],{"class":36,"line":628},[34,110552,110553],{"class":156},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[34,110555,110556],{"class":36,"line":640},[34,110557,3053],{"emptyLinePlaceholder":726},[34,110559,110560],{"class":36,"line":2301},[34,110561,110562],{"class":156},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[34,110564,110565],{"class":36,"line":2307},[34,110566,110567],{"class":156},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[34,110569,110570],{"class":36,"line":2328},[34,110571,110572],{"class":156},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[34,110574,110575],{"class":36,"line":2333},[34,110576,107068],{"class":156},[34,110578,110579],{"class":36,"line":2347},[34,110580,101997],{"class":156},[34,110582,110583],{"class":36,"line":2352},[34,110584,102002],{"class":156},[34,110586,110587],{"class":36,"line":2381},[34,110588,3053],{"emptyLinePlaceholder":726},[34,110590,110591],{"class":36,"line":2386},[34,110592,107085],{"class":156},[34,110594,110595],{"class":36,"line":2403},[34,110596,110597],{"class":156},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,110599,110600],{"class":36,"line":2408},[34,110601,107095],{"class":156},[34,110603,110604],{"class":36,"line":2413},[34,110605,102007],{"class":156},[34,110607,110608],{"class":36,"line":2418},[34,110609,96328],{"class":156},[34,110611,110612],{"class":36,"line":2432},[34,110613,3053],{"emptyLinePlaceholder":726},[34,110615,110616],{"class":36,"line":2437},[34,110617,3053],{"emptyLinePlaceholder":726},[34,110619,110620,110622,110625],{"class":36,"line":3230},[34,110621,32598],{"class":87},[34,110623,110624],{"class":149}," get_observation",[34,110626,110627],{"class":40},"(data: mujoco.MjData) -> np.ndarray:\n",[34,110629,110630,110632],{"class":36,"line":3244},[34,110631,4743],{"class":87},[34,110633,110634],{"class":40}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[34,110636,110637],{"class":36,"line":3252},[34,110638,3053],{"emptyLinePlaceholder":726},[34,110640,110641],{"class":36,"line":3257},[34,110642,3053],{"emptyLinePlaceholder":726},[34,110644,110645,110647,110650,110653,110655],{"class":36,"line":3263},[34,110646,32598],{"class":87},[34,110648,110649],{"class":149}," compute_reward",[34,110651,110652],{"class":40},"(obs: np.ndarray) -> ",[34,110654,840],{"class":63},[34,110656,4392],{"class":40},[34,110658,110659,110662,110664,110667,110669],{"class":36,"line":3269},[34,110660,110661],{"class":40},"    cart_x ",[34,110663,153],{"class":87},[34,110665,110666],{"class":40}," obs[",[34,110668,987],{"class":63},[34,110670,33897],{"class":40},[34,110672,110673,110676,110678,110680,110682],{"class":36,"line":3274},[34,110674,110675],{"class":40},"    pole_angle ",[34,110677,153],{"class":87},[34,110679,110666],{"class":40},[34,110681,1013],{"class":63},[34,110683,33897],{"class":40},[34,110685,110686,110688,110690,110692,110694,110696,110698,110700,110702,110704,110706,110708,110710,110712],{"class":36,"line":8601},[34,110687,4743],{"class":87},[34,110689,110427],{"class":63},[34,110691,801],{"class":40},[34,110693,103033],{"class":63},[34,110695,52917],{"class":87},[34,110697,110436],{"class":63},[34,110699,7171],{"class":87},[34,110701,110441],{"class":40},[34,110703,1250],{"class":87},[34,110705,110441],{"class":40},[34,110707,1327],{"class":87},[34,110709,110450],{"class":40},[34,110711,1250],{"class":87},[34,110713,110455],{"class":40},[34,110715,110716],{"class":36,"line":8625},[34,110717,3053],{"emptyLinePlaceholder":726},[34,110719,110720],{"class":36,"line":8630},[34,110721,3053],{"emptyLinePlaceholder":726},[34,110723,110724,110726,110728,110730,110732],{"class":36,"line":8636},[34,110725,32598],{"class":87},[34,110727,2626],{"class":149},[34,110729,102028],{"class":40},[34,110731,96316],{"class":63},[34,110733,4392],{"class":40},[34,110735,110736,110738,110740,110742,110744],{"class":36,"line":8663},[34,110737,102037],{"class":40},[34,110739,153],{"class":87},[34,110741,102042],{"class":40},[34,110743,101944],{"class":63},[34,110745,807],{"class":40},[34,110747,110748,110750,110752],{"class":36,"line":8668},[34,110749,102051],{"class":40},[34,110751,153],{"class":87},[34,110753,102056],{"class":40},[34,110755,110756],{"class":36,"line":8674},[34,110757,3053],{"emptyLinePlaceholder":726},[34,110759,110760,110762,110764,110766,110768],{"class":36,"line":8686},[34,110761,105699],{"class":40},[34,110763,1013],{"class":63},[34,110765,5096],{"class":40},[34,110767,153],{"class":87},[34,110769,110770],{"class":63}," 0.1\n",[34,110772,110773],{"class":36,"line":8698},[34,110774,105712],{"class":40},[34,110776,110777],{"class":36,"line":8710},[34,110778,3053],{"emptyLinePlaceholder":726},[34,110780,110781,110784,110786],{"class":36,"line":10369},[34,110782,110783],{"class":40},"    total_reward ",[34,110785,153],{"class":87},[34,110787,105391],{"class":63},[34,110789,110790],{"class":36,"line":10394},[34,110791,3053],{"emptyLinePlaceholder":726},[34,110793,110794,110796,110798,110800,110802,110804,110806],{"class":36,"line":10417},[34,110795,3854],{"class":87},[34,110797,32267],{"class":40},[34,110799,26695],{"class":87},[34,110801,33094],{"class":63},[34,110803,801],{"class":40},[34,110805,7063],{"class":63},[34,110807,31437],{"class":40},[34,110809,110810,110813,110815],{"class":36,"line":10441},[34,110811,110812],{"class":40},"        obs ",[34,110814,153],{"class":87},[34,110816,110817],{"class":40}," get_observation(data)\n",[34,110819,110820,110823,110825,110827,110829],{"class":36,"line":10446},[34,110821,110822],{"class":40},"        pole_angle ",[34,110824,153],{"class":87},[34,110826,110666],{"class":40},[34,110828,1013],{"class":63},[34,110830,33897],{"class":40},[34,110832,110833,110836,110838,110840,110842],{"class":36,"line":10451},[34,110834,110835],{"class":40},"        pole_angular_velocity ",[34,110837,153],{"class":87},[34,110839,110666],{"class":40},[34,110841,869],{"class":63},[34,110843,33897],{"class":40},[34,110845,110846],{"class":36,"line":10456},[34,110847,3053],{"emptyLinePlaceholder":726},[34,110849,110850,110853,110855,110858,110860,110862,110864,110866,110868],{"class":36,"line":10465},[34,110851,110852],{"class":40},"        action ",[34,110854,153],{"class":87},[34,110856,110857],{"class":63}," 2.0",[34,110859,7171],{"class":87},[34,110861,110450],{"class":40},[34,110863,1276],{"class":87},[34,110865,62508],{"class":63},[34,110867,7171],{"class":87},[34,110869,110870],{"class":40}," pole_angular_velocity\n",[34,110872,110873,110875,110877,110879,110881,110883,110885,110887],{"class":36,"line":10470},[34,110874,110852],{"class":40},[34,110876,153],{"class":87},[34,110878,108077],{"class":40},[34,110880,1327],{"class":87},[34,110882,103033],{"class":63},[34,110884,13088],{"class":40},[34,110886,103033],{"class":63},[34,110888,807],{"class":40},[34,110890,110891],{"class":36,"line":10476},[34,110892,3053],{"emptyLinePlaceholder":726},[34,110894,110895,110897,110899,110901,110903],{"class":36,"line":10497},[34,110896,107247],{"class":40},[34,110898,987],{"class":63},[34,110900,5096],{"class":40},[34,110902,153],{"class":87},[34,110904,108100],{"class":40},[34,110906,110907],{"class":36,"line":10503},[34,110908,102146],{"class":40},[34,110910,110911],{"class":36,"line":10517},[34,110912,3053],{"emptyLinePlaceholder":726},[34,110914,110915,110918,110920],{"class":36,"line":10523},[34,110916,110917],{"class":40},"        reward ",[34,110919,153],{"class":87},[34,110921,110922],{"class":40}," compute_reward(get_observation(data))\n",[34,110924,110925,110928,110930],{"class":36,"line":10550},[34,110926,110927],{"class":40},"        total_reward ",[34,110929,10130],{"class":87},[34,110931,110932],{"class":40}," reward\n",[34,110934,110935],{"class":36,"line":10559},[34,110936,3053],{"emptyLinePlaceholder":726},[34,110938,110939,110941,110943,110945,110947,110949,110951],{"class":36,"line":10565},[34,110940,3150],{"class":87},[34,110942,32267],{"class":40},[34,110944,1123],{"class":87},[34,110946,6407],{"class":63},[34,110948,102189],{"class":87},[34,110950,4746],{"class":63},[34,110952,4392],{"class":40},[34,110954,110955,110957,110959,110962,110965,110968,110971,110973,110976,110979,110981,110983,110985,110987,110990,110992],{"class":36,"line":10573},[34,110956,35301],{"class":63},[34,110958,801],{"class":40},[34,110960,110961],{"class":156},"\"step:\"",[34,110963,110964],{"class":40},", step, ",[34,110966,110967],{"class":156},"\"obs:\"",[34,110969,110970],{"class":40},", np.round(obs, ",[34,110972,869],{"class":63},[34,110974,110975],{"class":40},"), ",[34,110977,110978],{"class":156},"\"action:\"",[34,110980,13088],{"class":40},[34,110982,32669],{"class":63},[34,110984,801],{"class":40},[34,110986,840],{"class":63},[34,110988,110989],{"class":40},"(action), ",[34,110991,869],{"class":63},[34,110993,31148],{"class":40},[34,110995,110996],{"class":36,"line":10578},[34,110997,3053],{"emptyLinePlaceholder":726},[34,110999,111000,111002,111004,111007,111009,111011,111014,111016],{"class":36,"line":17256},[34,111001,31950],{"class":63},[34,111003,801],{"class":40},[34,111005,111006],{"class":156},"\"total_reward:\"",[34,111008,13088],{"class":40},[34,111010,32669],{"class":63},[34,111012,111013],{"class":40},"(total_reward, ",[34,111015,869],{"class":63},[34,111017,31148],{"class":40},[34,111019,111020,111022,111024,111027,111030,111032],{"class":36,"line":17262},[34,111021,31950],{"class":63},[34,111023,801],{"class":40},[34,111025,111026],{"class":156},"\"final obs:\"",[34,111028,111029],{"class":40},", np.round(get_observation(data), ",[34,111031,869],{"class":63},[34,111033,31148],{"class":40},[34,111035,111036],{"class":36,"line":17285},[34,111037,3053],{"emptyLinePlaceholder":726},[34,111039,111040],{"class":36,"line":17291},[34,111041,3053],{"emptyLinePlaceholder":726},[34,111043,111044,111046,111048,111050,111052],{"class":36,"line":17314},[34,111045,2191],{"class":87},[34,111047,31871],{"class":63},[34,111049,102189],{"class":87},[34,111051,102192],{"class":156},[34,111053,4392],{"class":40},[34,111055,111056],{"class":36,"line":17328},[34,111057,102199],{"class":40},[108,111059,104200],{},[24,111061,111063],{"className":24474,"code":111062,"language":24476,"meta":29,"style":29},"touch ch6_cartpole.py\n",[31,111064,111065],{"__ignoreMap":29},[34,111066,111067,111069],{"class":36,"line":37},[34,111068,101913],{"class":149},[34,111070,111071],{"class":156}," ch6_cartpole.py\n",[108,111073,111074],{},"运行：",[24,111076,111078],{"className":24474,"code":111077,"language":24476,"meta":29,"style":29},"python ch6_cartpole.py\n",[31,111079,111080],{"__ignoreMap":29},[34,111081,111082,111084],{"class":36,"line":37},[34,111083,31031],{"class":149},[34,111085,111071],{"class":156},[19,111087,102202],{"id":102202},[108,111089,111090],{},"构造观测：",[24,111092,111094],{"className":31029,"code":111093,"language":31031,"meta":29,"style":29},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[31,111095,111096,111104],{"__ignoreMap":29},[34,111097,111098,111100,111102],{"class":36,"line":37},[34,111099,32598],{"class":87},[34,111101,110624],{"class":149},[34,111103,110627],{"class":40},[34,111105,111106,111108],{"class":36,"line":51},[34,111107,4743],{"class":87},[34,111109,110634],{"class":40},[108,111111,111112,111115,111116,111118,111119,111121],{},[31,111113,111114],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[31,111117,104660],{}," 2 维，",[31,111120,104990],{}," 2 维，所以 obs 是 4 维。",[108,111123,111124],{},"设置初始角度：",[24,111126,111128],{"className":31029,"code":111127,"language":31031,"meta":29,"style":29},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[31,111129,111130,111142],{"__ignoreMap":29},[34,111131,111132,111134,111136,111138,111140],{"class":36,"line":37},[34,111133,105329],{"class":40},[34,111135,1013],{"class":63},[34,111137,5096],{"class":40},[34,111139,153],{"class":87},[34,111141,110770],{"class":63},[34,111143,111144],{"class":36,"line":51},[34,111145,105173],{"class":40},[108,111147,111148],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[108,111150,111151],{},"简单反馈控制：",[24,111153,111155],{"className":31029,"code":111154,"language":31031,"meta":29,"style":29},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[31,111156,111157,111177],{"__ignoreMap":29},[34,111158,111159,111161,111163,111165,111167,111169,111171,111173,111175],{"class":36,"line":37},[34,111160,108072],{"class":40},[34,111162,153],{"class":87},[34,111164,110857],{"class":63},[34,111166,7171],{"class":87},[34,111168,110450],{"class":40},[34,111170,1276],{"class":87},[34,111172,62508],{"class":63},[34,111174,7171],{"class":87},[34,111176,110870],{"class":40},[34,111178,111179,111181,111183,111185,111187,111189,111191,111193],{"class":36,"line":51},[34,111180,108072],{"class":40},[34,111182,153],{"class":87},[34,111184,108077],{"class":40},[34,111186,1327],{"class":87},[34,111188,103033],{"class":63},[34,111190,13088],{"class":40},[34,111192,103033],{"class":63},[34,111194,807],{"class":40},[108,111196,111197],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[108,111199,111200],{},"限制动作：",[24,111202,111204],{"className":31029,"code":111203,"language":31031,"meta":29,"style":29},"np.clip(action, -1.0, 1.0)\n",[31,111205,111206],{"__ignoreMap":29},[34,111207,111208,111211,111213,111215,111217,111219],{"class":36,"line":37},[34,111209,111210],{"class":40},"np.clip(action, ",[34,111212,1327],{"class":87},[34,111214,103033],{"class":63},[34,111216,13088],{"class":40},[34,111218,103033],{"class":63},[34,111220,807],{"class":40},[108,111222,111223,111224,111227],{},"因为 XML 里 ",[31,111225,111226],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[19,111229,102338],{"id":102338},[24,111231,111232],{"className":31029,"code":111093,"language":31031,"meta":29,"style":29},[31,111233,111234,111242],{"__ignoreMap":29},[34,111235,111236,111238,111240],{"class":36,"line":37},[34,111237,32598],{"class":87},[34,111239,110624],{"class":149},[34,111241,110627],{"class":40},[34,111243,111244,111246],{"class":36,"line":51},[34,111245,4743],{"class":87},[34,111247,110634],{"class":40},[108,111249,111250,111251,111254,111255,111258,111259,111262],{},"这段定义了一个函数，用来获取当前观测。",[31,111252,111253],{},"data.qpos.copy()"," 是位置数组副本，",[31,111256,111257],{},"data.qvel.copy()"," 是速度数组副本。",[31,111260,111261],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[108,111264,111265],{},"在本章模型里：",[24,111267,111270],{"className":111268,"code":111269,"language":5840,"meta":29},[5838],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[31,111271,111269],{"__ignoreMap":29},[108,111273,111274],{},"所以返回的 obs 是：",[24,111276,111279],{"className":111277,"code":111278,"language":5840,"meta":29},[5838],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[31,111280,111278],{"__ignoreMap":29},[24,111282,111284],{"className":31029,"code":111283,"language":31031,"meta":29,"style":29},"def compute_reward(obs: np.ndarray) -> float:\n",[31,111285,111286],{"__ignoreMap":29},[34,111287,111288,111290,111292,111294,111296],{"class":36,"line":37},[34,111289,32598],{"class":87},[34,111291,110649],{"class":149},[34,111293,110652],{"class":40},[34,111295,840],{"class":63},[34,111297,4392],{"class":40},[108,111299,111300,111301,111304],{},"这行定义奖励函数。输入是观测 ",[31,111302,111303],{},"obs","，输出是一个浮点数奖励。",[24,111306,111308],{"className":31029,"code":111307,"language":31031,"meta":29,"style":29},"cart_x = obs[0]\npole_angle = obs[1]\n",[31,111309,111310,111323],{"__ignoreMap":29},[34,111311,111312,111315,111317,111319,111321],{"class":36,"line":37},[34,111313,111314],{"class":40},"cart_x ",[34,111316,153],{"class":87},[34,111318,110666],{"class":40},[34,111320,987],{"class":63},[34,111322,33897],{"class":40},[34,111324,111325,111328,111330,111332,111334],{"class":36,"line":51},[34,111326,111327],{"class":40},"pole_angle ",[34,111329,153],{"class":87},[34,111331,110666],{"class":40},[34,111333,1013],{"class":63},[34,111335,33897],{"class":40},[108,111337,111338,111339,111342,111343,111346],{},"数组索引从 0 开始。",[31,111340,111341],{},"obs[0]"," 是第一个元素，也就是小车位置。",[31,111344,111345],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[24,111348,111349],{"className":31029,"code":110418,"language":31031,"meta":29,"style":29},[31,111350,111351],{"__ignoreMap":29},[34,111352,111353,111355,111357,111359,111361,111363,111365,111367,111369,111371,111373,111375,111377,111379],{"class":36,"line":37},[34,111354,17698],{"class":87},[34,111356,110427],{"class":63},[34,111358,801],{"class":40},[34,111360,103033],{"class":63},[34,111362,52917],{"class":87},[34,111364,110436],{"class":63},[34,111366,7171],{"class":87},[34,111368,110441],{"class":40},[34,111370,1250],{"class":87},[34,111372,110441],{"class":40},[34,111374,1327],{"class":87},[34,111376,110450],{"class":40},[34,111378,1250],{"class":87},[34,111380,110455],{"class":40},[108,111382,111383,111384,111387,111388,111391],{},"这行计算奖励。",[31,111385,111386],{},"cart_x * cart_x"," 是小车位置的平方，",[31,111389,111390],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[24,111393,111395],{"className":31029,"code":111394,"language":31031,"meta":29,"style":29},"data.qpos[1] = 0.1\n",[31,111396,111397],{"__ignoreMap":29},[34,111398,111399,111401,111403,111405,111407],{"class":36,"line":37},[34,111400,105329],{"class":40},[34,111402,1013],{"class":63},[34,111404,5096],{"class":40},[34,111406,153],{"class":87},[34,111408,110770],{"class":63},[108,111410,111411,111412,111414,111415,111417],{},"手动设置杆子的初始角度。因为 ",[31,111413,106086],{}," 是小车位置，",[31,111416,106089],{}," 是杆子角度，所以这里改的是杆子。",[24,111419,111420],{"className":31029,"code":105173,"language":31031,"meta":29,"style":29},[31,111421,111422],{"__ignoreMap":29},[34,111423,111424],{"class":36,"line":37},[34,111425,105173],{"class":40},[108,111427,106132,111428,111430],{},[31,111429,104660],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[24,111432,111434],{"className":31029,"code":111433,"language":31031,"meta":29,"style":29},"total_reward = 0.0\n",[31,111435,111436],{"__ignoreMap":29},[34,111437,111438,111441,111443],{"class":36,"line":37},[34,111439,111440],{"class":40},"total_reward ",[34,111442,153],{"class":87},[34,111444,105391],{"class":63},[108,111446,111447],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[24,111449,111451],{"className":31029,"code":111450,"language":31031,"meta":29,"style":29},"for step in range(1000):\n",[31,111452,111453],{"__ignoreMap":29},[34,111454,111455,111457,111459,111461,111463,111465,111467],{"class":36,"line":37},[34,111456,3678],{"class":87},[34,111458,32267],{"class":40},[34,111460,26695],{"class":87},[34,111462,33094],{"class":63},[34,111464,801],{"class":40},[34,111466,7063],{"class":63},[34,111468,31437],{"class":40},[108,111470,111471,111472,111474],{},"循环 1000 步。",[31,111473,107764],{}," 是当前步数，从 0 到 999。",[24,111476,111478],{"className":31029,"code":111477,"language":31031,"meta":29,"style":29},"obs = get_observation(data)\n",[31,111479,111480],{"__ignoreMap":29},[34,111481,111482,111485,111487],{"class":36,"line":37},[34,111483,111484],{"class":40},"obs ",[34,111486,153],{"class":87},[34,111488,110817],{"class":40},[108,111490,111491,111492,29036],{},"读取当前状态，保存到 ",[31,111493,111303],{},[24,111495,111497],{"className":31029,"code":111496,"language":31031,"meta":29,"style":29},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[31,111498,111499,111511],{"__ignoreMap":29},[34,111500,111501,111503,111505,111507,111509],{"class":36,"line":37},[34,111502,111327],{"class":40},[34,111504,153],{"class":87},[34,111506,110666],{"class":40},[34,111508,1013],{"class":63},[34,111510,33897],{"class":40},[34,111512,111513,111516,111518,111520,111522],{"class":36,"line":51},[34,111514,111515],{"class":40},"pole_angular_velocity ",[34,111517,153],{"class":87},[34,111519,110666],{"class":40},[34,111521,869],{"class":63},[34,111523,33897],{"class":40},[108,111525,111526,111527,111530,111531,29036],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[31,111528,111529],{},"obs[3]","？因为 obs 的顺序是 ",[31,111532,111533],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[24,111535,111537],{"className":31029,"code":111536,"language":31031,"meta":29,"style":29},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[31,111538,111539],{"__ignoreMap":29},[34,111540,111541,111543,111545,111547,111549,111551,111553,111555,111557],{"class":36,"line":37},[34,111542,108072],{"class":40},[34,111544,153],{"class":87},[34,111546,110857],{"class":63},[34,111548,7171],{"class":87},[34,111550,110450],{"class":40},[34,111552,1276],{"class":87},[34,111554,62508],{"class":63},[34,111556,7171],{"class":87},[34,111558,110870],{"class":40},[108,111560,111561,111562,101648,111564,111566],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[31,111563,105890],{},[31,111565,35980],{}," 是人为设置的系数，不是固定公式。",[24,111568,111570],{"className":31029,"code":111569,"language":31031,"meta":29,"style":29},"action = np.clip(action, -1.0, 1.0)\n",[31,111571,111572],{"__ignoreMap":29},[34,111573,111574,111576,111578,111580,111582,111584,111586,111588],{"class":36,"line":37},[34,111575,108072],{"class":40},[34,111577,153],{"class":87},[34,111579,108077],{"class":40},[34,111581,1327],{"class":87},[34,111583,103033],{"class":63},[34,111585,13088],{"class":40},[34,111587,103033],{"class":63},[34,111589,807],{"class":40},[108,111591,111592],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[24,111594,111595],{"className":31029,"code":110403,"language":31031,"meta":29,"style":29},[31,111596,111597],{"__ignoreMap":29},[34,111598,111599,111601,111603,111605,111607],{"class":36,"line":37},[34,111600,106501],{"class":40},[34,111602,987],{"class":63},[34,111604,5096],{"class":40},[34,111606,153],{"class":87},[34,111608,108100],{"class":40},[108,111610,111611],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[24,111613,111614],{"className":31029,"code":105135,"language":31031,"meta":29,"style":29},[31,111615,111616],{"__ignoreMap":29},[34,111617,111618],{"class":36,"line":37},[34,111619,105135],{"class":40},[108,111621,111622,111623,111625],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[31,111624,106756],{}," 计算小车和杆子的下一刻状态。",[24,111627,111629],{"className":31029,"code":111628,"language":31031,"meta":29,"style":29},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[31,111630,111631,111640],{"__ignoreMap":29},[34,111632,111633,111636,111638],{"class":36,"line":37},[34,111634,111635],{"class":40},"reward ",[34,111637,153],{"class":87},[34,111639,110922],{"class":40},[34,111641,111642,111644,111646],{"class":36,"line":51},[34,111643,111440],{"class":40},[34,111645,10130],{"class":87},[34,111647,110932],{"class":40},[108,111649,111650,111651,111653,111654,111657,111658,29036],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[31,111652,10130],{}," 是简写，",[31,111655,111656],{},"total_reward += reward"," 等价于 ",[31,111659,111660],{},"total_reward = total_reward + reward",[24,111662,111664],{"className":31029,"code":111663,"language":31031,"meta":29,"style":29},"if step % 100 == 0:\n",[31,111665,111666],{"__ignoreMap":29},[34,111667,111668,111670,111672,111674,111676,111678,111680],{"class":36,"line":37},[34,111669,2191],{"class":87},[34,111671,32267],{"class":40},[34,111673,1123],{"class":87},[34,111675,6407],{"class":63},[34,111677,102189],{"class":87},[34,111679,4746],{"class":63},[34,111681,4392],{"class":40},[108,111683,111684,111686,111687,111690],{},[31,111685,1123],{}," 是取余数。",[31,111688,111689],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[24,111692,111694],{"className":31029,"code":111693,"language":31031,"meta":29,"style":29},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[31,111695,111696],{"__ignoreMap":29},[34,111697,111698,111700,111702,111704,111706,111708,111710,111712,111714,111716,111718,111720,111722,111724,111726,111728],{"class":36,"line":37},[34,111699,31066],{"class":63},[34,111701,801],{"class":40},[34,111703,110961],{"class":156},[34,111705,110964],{"class":40},[34,111707,110967],{"class":156},[34,111709,110970],{"class":40},[34,111711,869],{"class":63},[34,111713,110975],{"class":40},[34,111715,110978],{"class":156},[34,111717,13088],{"class":40},[34,111719,32669],{"class":63},[34,111721,801],{"class":40},[34,111723,840],{"class":63},[34,111725,110989],{"class":40},[34,111727,869],{"class":63},[34,111729,31148],{"class":40},[108,111731,111732,111733,111736,111737,111740],{},"打印当前步数、观测和动作。",[31,111734,111735],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[31,111738,111739],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111742,102946],{"id":102945},[108,111744,111745],{},"观测向量:",[24,111747,111750],{"className":111748,"code":111749,"language":5840,"meta":29},[5838],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[31,111751,111749],{"__ignoreMap":29},[108,111753,111754],{},"控制器是教学用的简单线性反馈，不保证最优。",[108,111756,111757],{},"每隔 100 步会打印一次：",[24,111759,111762],{"className":111760,"code":111761,"language":5840,"meta":29},[5838],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[31,111763,111761],{"__ignoreMap":29},[108,111765,111766],{},"重点观察：",[752,111768,111769,111775,111780],{},[755,111770,111771,111774],{},[31,111772,111773],{},"pole_angle"," 是否越来越大。",[755,111776,111777,111779],{},[31,111778,110356],{}," 是否跑得太远。",[755,111781,111782,111783,83169,111785,29036],{},"action 是否经常被 clip 到 ",[31,111784,104545],{},[31,111786,1013],{},[108,111788,111789],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111791,102978],{"id":102977},[752,111793,111794,111800,111803,111809,111819,111825,111828],{},[755,111795,111796,111797,29036],{},"把初始角度改为 ",[31,111798,111799],{},"data.qpos[1] = 0.3",[755,111801,111802],{},"重新运行，观察控制是否变差。",[755,111804,111805,111806,111808],{},"把 actuator ",[31,111807,107697],{}," 改小。",[755,111810,111811,111812,111815,111816,29036],{},"打印 ",[31,111813,111814],{},"model.nq, model.nv, model.nu","，应为 ",[31,111817,111818],{},"2 2 1",[755,111820,111821,111822,111824],{},"把 reward 里的 ",[31,111823,111390],{}," 系数改大，观察总奖励变化。",[755,111826,111827],{},"把控制器改成反号，观察杆子是否更容易倒。",[755,111829,111830],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111832,103083],{"id":103082},[19,111834,111835],{"id":111835},"杆子方向和预期不一致",[108,111837,103026,111838,111840,111841,111843],{},[31,111839,106869],{}," 和 capsule 的 ",[31,111842,103806],{},"，必要时用 viewer 可视化确认。",[19,111845,111846],{"id":111846},"控制器越控越倒",[108,111848,111849],{},"说明反馈符号可能反了，尝试:",[24,111851,111853],{"className":31029,"code":111852,"language":31031,"meta":29,"style":29},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[31,111854,111855],{"__ignoreMap":29},[34,111856,111857,111859,111861,111863,111865,111867,111869,111871,111873,111875],{"class":36,"line":37},[34,111858,108072],{"class":40},[34,111860,153],{"class":87},[34,111862,52917],{"class":87},[34,111864,105890],{"class":63},[34,111866,7171],{"class":87},[34,111868,110450],{"class":40},[34,111870,1327],{"class":87},[34,111872,62508],{"class":63},[34,111874,7171],{"class":87},[34,111876,110870],{"class":40},[19,111878,111879],{"id":111879},"小车飞走",[108,111881,111882,111883,111885,111886,111889],{},"降低 ",[31,111884,107697],{}," 或缩小 ",[31,111887,111888],{},"action"," 的 clip 范围。",[19,111891,111893,111895],{"id":111892},"obs3-为什么是杆子角速度",[31,111894,111529],{}," 为什么是杆子角速度",[108,111897,111898],{},"因为这个模型里：",[24,111900,111903],{"className":111901,"code":111902,"language":5840,"meta":29},[5838],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[31,111904,111902],{"__ignoreMap":29},[108,111906,110377],{},[24,111908,111911],{"className":111909,"code":111910,"language":5840,"meta":29},[5838],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[31,111912,111910],{"__ignoreMap":29},[19,111914,111916],{"id":111915},"reward-变成负数是否错误","reward 变成负数是否错误",[108,111918,111919],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111921,103237],{"id":103236},[108,111923,111924],{},"一个控制任务通常包含：",[752,111926,111927,111930,111938,111943,111946],{},[755,111928,111929],{},"模型：Cartpole 的 body、joint、actuator。",[755,111931,111932,111933,1008,111935,111937],{},"观测：从 ",[31,111934,104660],{},[31,111936,104990],{}," 里取状态。",[755,111939,111940,111941,29036],{},"动作：写入 ",[31,111942,101706],{},[755,111944,111945],{},"奖励：根据任务目标打分。",[755,111947,111948],{},"循环：obs -> action -> step -> reward。",[108,111950,111951],{},"这就是后面 Gymnasium 环境的基本骨架。",[45,111953,104916],{},{"title":29,"searchDepth":51,"depth":51,"links":111955},[111956,111957,111958,111963,111967,111968,111969,111977],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":111959},[111960,111961,111962],{"id":110330,"depth":60,"text":110331},{"id":110395,"depth":60,"text":110396},{"id":110411,"depth":60,"text":110412},{"id":101882,"depth":51,"text":101883,"children":111964},[111965,111966],{"id":102202,"depth":60,"text":102202},{"id":102338,"depth":60,"text":102338},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":111970},[111971,111972,111973,111974,111976],{"id":111835,"depth":60,"text":111835},{"id":111846,"depth":60,"text":111846},{"id":111879,"depth":60,"text":111879},{"id":111892,"depth":60,"text":111975},"obs[3] 为什么是杆子角速度",{"id":111915,"depth":60,"text":111916},{"id":103236,"depth":51,"text":103237},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110066,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111984,"title":111985,"body":111986,"description":29,"extension":724,"meta":114000,"navigation":726,"path":114001,"seo":114002,"stem":114003,"__hash__":114004},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111987,"toc":113976},[111988,111991,111993,111996,111998,112015,112018,112021,112027,112030,112032,112034,112058,112060,112074,112076,112117,112119,112137,112139,112142,112148,112151,112179,112183,112189,112214,112217,112248,112255,112258,112261,112267,112270,112276,112279,112285,112289,112292,112317,112320,112322,113082,113084,113096,113098,113109,113111,113114,113131,113134,113136,113147,113150,113152,113198,113201,113214,113217,113299,113302,113304,113320,113330,113343,113346,113385,113395,113406,113416,113429,113432,113461,113464,113474,113477,113483,113500,113511,113513,113519,113536,113547,113568,113571,113583,113586,113607,113610,113618,113626,113643,113646,113715,113722,113730,113733,113746,113753,113755,113758,113764,113767,113770,113776,113782,113784,113824,113826,113832,113841,113844,113846,113866,113869,113872,113878,113882,113884,113911,113914,113917,113944,113950,113953,113956,113958,113961,113964,113970,113973],[10,111989,111985],{"id":111990},"_7控制任务reacher-机械臂到达目标",[14,111992,101277],{"id":101276},[108,111994,111995],{},"本章搭建一个二维两关节 reacher 任务。",[108,111997,104961],{},[752,111999,112000,112003,112006,112009,112012],{},[755,112001,112002],{},"两个 hinge joint",[755,112004,112005],{},"两个 motor actuator",[755,112007,112008],{},"site 作为末端点和目标点",[755,112010,112011],{},"根据末端和目标距离设计 reward",[755,112013,112014],{},"构造机械臂任务的基本形式",[108,112016,112017],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[108,112019,112020],{},"Reacher 任务可以理解为：",[24,112022,112025],{"className":112023,"code":112024,"language":5840,"meta":29},[5838],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[31,112026,112024],{"__ignoreMap":29},[108,112028,112029],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112031,101400],{"id":101399},[108,112033,101403],{},[24,112035,112036],{"className":24474,"code":105018,"language":24476,"meta":29,"style":29},[31,112037,112038],{"__ignoreMap":29},[34,112039,112040,112042,112044,112046,112048,112050,112052,112054,112056],{"class":36,"line":37},[34,112041,25229],{"class":149},[34,112043,26967],{"class":156},[34,112045,24486],{"class":156},[34,112047,27052],{"class":63},[34,112049,105033],{"class":156},[34,112051,101428],{"class":156},[34,112053,103131],{"class":156},[34,112055,101444],{"class":156},[34,112057,105042],{"class":156},[108,112059,103449],{},[24,112061,112062],{"className":24474,"code":101549,"language":24476,"meta":29,"style":29},[31,112063,112064],{"__ignoreMap":29},[34,112065,112066,112068,112070,112072],{"class":36,"line":37},[34,112067,24483],{"class":149},[34,112069,24486],{"class":156},[34,112071,101560],{"class":156},[34,112073,101563],{"class":156},[108,112075,103466],{},[24,112077,112079],{"className":24474,"code":112078,"language":24476,"meta":29,"style":29},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[31,112080,112081,112098,112107],{"__ignoreMap":29},[34,112082,112083,112085,112087,112089,112092,112094,112096],{"class":36,"line":37},[34,112084,30981],{"class":149},[34,112086,29827],{"class":156},[34,112088,25768],{"class":63},[34,112090,112091],{"class":156}," mujoco-reacher",[34,112093,101605],{"class":156},[34,112095,101608],{"class":63},[34,112097,101611],{"class":63},[34,112099,112100,112102,112104],{"class":36,"line":51},[34,112101,30981],{"class":149},[34,112103,101618],{"class":156},[34,112105,112106],{"class":156}," mujoco-reacher\n",[34,112108,112109,112111,112113,112115],{"class":36,"line":60},[34,112110,24483],{"class":149},[34,112112,24486],{"class":156},[34,112114,101560],{"class":156},[34,112116,101563],{"class":156},[108,112118,101634],{},[752,112120,112121,112124,112127],{},[755,112122,112123],{},"本章使用低维状态，不使用图像输入。",[755,112125,112126],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[755,112128,112129,112130,1008,112132,1008,112134,112136],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[31,112131,104660],{},[31,112133,104990],{},[31,112135,104310],{}," 的方法一致。",[14,112138,101675],{"id":101674},[108,112140,112141],{},"Reacher 任务核心:",[24,112143,112146],{"className":112144,"code":112145,"language":5840,"meta":29},[5838],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[31,112147,112145],{"__ignoreMap":29},[108,112149,112150],{},"读取 site 世界坐标:",[24,112152,112154],{"className":31029,"code":112153,"language":31031,"meta":29,"style":29},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[31,112155,112156,112169],{"__ignoreMap":29},[34,112157,112158,112160,112162,112164,112167],{"class":36,"line":37},[34,112159,104264],{"class":40},[34,112161,153],{"class":87},[34,112163,104035],{"class":40},[34,112165,112166],{"class":156},"\"tip\"",[34,112168,807],{"class":40},[34,112170,112171,112174,112176],{"class":36,"line":51},[34,112172,112173],{"class":40},"tip_pos ",[34,112175,153],{"class":87},[34,112177,112178],{"class":40}," data.site_xpos[site_id]\n",[19,112180,112182],{"id":112181},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[108,112184,112185,112186,112188],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[31,112187,104660],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[24,112190,112192],{"className":31029,"code":112191,"language":31031,"meta":29,"style":29},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[31,112193,112194,112204],{"__ignoreMap":29},[34,112195,112196,112199,112201],{"class":36,"line":37},[34,112197,112198],{"class":40},"tip ",[34,112200,153],{"class":87},[34,112202,112203],{"class":40}," data.site_xpos[tip_site_id]\n",[34,112205,112206,112209,112211],{"class":36,"line":51},[34,112207,112208],{"class":40},"target ",[34,112210,153],{"class":87},[34,112212,112213],{"class":40}," data.site_xpos[target_site_id]\n",[108,112215,112216],{},"这样 reward 就很容易写：",[24,112218,112220],{"className":31029,"code":112219,"language":31031,"meta":29,"style":29},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[31,112221,112222,112237],{"__ignoreMap":29},[34,112223,112224,112227,112229,112232,112234],{"class":36,"line":37},[34,112225,112226],{"class":40},"dist ",[34,112228,153],{"class":87},[34,112230,112231],{"class":40}," np.linalg.norm(tip ",[34,112233,1327],{"class":87},[34,112235,112236],{"class":40}," target)\n",[34,112238,112239,112241,112243,112245],{"class":36,"line":51},[34,112240,111635],{"class":40},[34,112242,153],{"class":87},[34,112244,52917],{"class":87},[34,112246,112247],{"class":40},"dist\n",[108,112249,112250,112251,112254],{},"距离越小，",[31,112252,112253],{},"-dist"," 越接近 0，奖励越高。",[19,112256,112257],{"id":112257},"两关节机械臂的状态",[108,112259,112260],{},"这个模型有两个 hinge joint：",[24,112262,112265],{"className":112263,"code":112264,"language":5840,"meta":29},[5838],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[31,112266,112264],{"__ignoreMap":29},[108,112268,112269],{},"再加上末端和目标位置：",[24,112271,112274],{"className":112272,"code":112273,"language":5840,"meta":29},[5838],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[31,112275,112273],{"__ignoreMap":29},[108,112277,112278],{},"总维度：",[24,112280,112283],{"className":112281,"code":112282,"language":5840,"meta":29},[5838],"2 + 2 + 3 + 3 = 10\n",[31,112284,112282],{"__ignoreMap":29},[19,112286,112288],{"id":112287},"为什么-gravity-是-0","为什么 gravity 是 0",[108,112290,112291],{},"本章把重力设为：",[24,112293,112295],{"className":53713,"code":112294,"language":53715,"meta":29,"style":29},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[31,112296,112297],{"__ignoreMap":29},[34,112298,112299,112301,112303,112305,112307,112309,112311,112313,112315],{"class":36,"line":37},[34,112300,41],{"class":40},[34,112302,69801],{"class":44},[34,112304,101824],{"class":149},[34,112306,153],{"class":40},[34,112308,101829],{"class":156},[34,112310,101832],{"class":149},[34,112312,153],{"class":40},[34,112314,104401],{"class":156},[34,112316,101774],{"class":40},[108,112318,112319],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112321,101883],{"id":101882},[24,112323,112325],{"className":31029,"code":112324,"language":31031,"meta":29,"style":29},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,112326,112327,112333,112343,112347,112351,112359,112364,112369,112373,112377,112382,112387,112391,112396,112401,112406,112410,112415,112420,112425,112430,112434,112438,112442,112446,112450,112455,112460,112464,112468,112472,112476,112480,112495,112504,112516,112539,112546,112550,112554,112564,112578,112592,112599,112603,112607,112621,112633,112645,112658,112673,112690,112694,112698,112710,112722,112730,112738,112742,112758,112763,112776,112789,112804,112808,112843,112875,112879,112883,112892,112896,112912,112922,112933,112949,112965,112981,112997,113001,113019,113039,113058,113062,113066,113078],{"__ignoreMap":29},[34,112328,112329,112331],{"class":36,"line":37},[34,112330,31043],{"class":87},[34,112332,101931],{"class":40},[34,112334,112335,112337,112339,112341],{"class":36,"line":51},[34,112336,31043],{"class":87},[34,112338,32031],{"class":40},[34,112340,32034],{"class":87},[34,112342,32037],{"class":40},[34,112344,112345],{"class":36,"line":60},[34,112346,3053],{"emptyLinePlaceholder":726},[34,112348,112349],{"class":36,"line":76},[34,112350,3053],{"emptyLinePlaceholder":726},[34,112352,112353,112355,112357],{"class":36,"line":93},[34,112354,101944],{"class":63},[34,112356,14217],{"class":87},[34,112358,101949],{"class":156},[34,112360,112361],{"class":36,"line":99},[34,112362,112363],{"class":156},"\u003Cmujoco model=\"two_link_reacher\">\n",[34,112365,112366],{"class":36,"line":353},[34,112367,112368],{"class":156},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[34,112370,112371],{"class":36,"line":359},[34,112372,3053],{"emptyLinePlaceholder":726},[34,112374,112375],{"class":36,"line":579},[34,112376,101968],{"class":156},[34,112378,112379],{"class":36,"line":589},[34,112380,112381],{"class":156},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[34,112383,112384],{"class":36,"line":601},[34,112385,112386],{"class":156},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[34,112388,112389],{"class":36,"line":613},[34,112390,3053],{"emptyLinePlaceholder":726},[34,112392,112393],{"class":36,"line":618},[34,112394,112395],{"class":156},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[34,112397,112398],{"class":36,"line":628},[34,112399,112400],{"class":156},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,112402,112403],{"class":36,"line":640},[34,112404,112405],{"class":156},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[34,112407,112408],{"class":36,"line":2301},[34,112409,3053],{"emptyLinePlaceholder":726},[34,112411,112412],{"class":36,"line":2307},[34,112413,112414],{"class":156},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[34,112416,112417],{"class":36,"line":2328},[34,112418,112419],{"class":156},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,112421,112422],{"class":36,"line":2333},[34,112423,112424],{"class":156},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[34,112426,112427],{"class":36,"line":2347},[34,112428,112429],{"class":156},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[34,112431,112432],{"class":36,"line":2352},[34,112433,107068],{"class":156},[34,112435,112436],{"class":36,"line":2381},[34,112437,101997],{"class":156},[34,112439,112440],{"class":36,"line":2386},[34,112441,102002],{"class":156},[34,112443,112444],{"class":36,"line":2403},[34,112445,3053],{"emptyLinePlaceholder":726},[34,112447,112448],{"class":36,"line":2408},[34,112449,107085],{"class":156},[34,112451,112452],{"class":36,"line":2413},[34,112453,112454],{"class":156},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,112456,112457],{"class":36,"line":2418},[34,112458,112459],{"class":156},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,112461,112462],{"class":36,"line":2432},[34,112463,107095],{"class":156},[34,112465,112466],{"class":36,"line":2437},[34,112467,102007],{"class":156},[34,112469,112470],{"class":36,"line":3230},[34,112471,96328],{"class":156},[34,112473,112474],{"class":36,"line":3244},[34,112475,3053],{"emptyLinePlaceholder":726},[34,112477,112478],{"class":36,"line":3252},[34,112479,3053],{"emptyLinePlaceholder":726},[34,112481,112482,112484,112487,112490,112492],{"class":36,"line":3257},[34,112483,32598],{"class":87},[34,112485,112486],{"class":149}," site_position",[34,112488,112489],{"class":40},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[34,112491,1962],{"class":63},[34,112493,112494],{"class":40},") -> np.ndarray:\n",[34,112496,112497,112499,112501],{"class":36,"line":3263},[34,112498,104030],{"class":40},[34,112500,153],{"class":87},[34,112502,112503],{"class":40}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[34,112505,112506,112508,112510,112512,112514],{"class":36,"line":3269},[34,112507,3754],{"class":87},[34,112509,104079],{"class":40},[34,112511,41],{"class":87},[34,112513,4746],{"class":63},[34,112515,4392],{"class":40},[34,112517,112518,112520,112522,112524,112526,112529,112531,112533,112535,112537],{"class":36,"line":3274},[34,112519,104062],{"class":87},[34,112521,104065],{"class":63},[34,112523,801],{"class":40},[34,112525,851],{"class":87},[34,112527,112528],{"class":156},"\"site not found: ",[34,112530,1690],{"class":63},[34,112532,80440],{"class":40},[34,112534,1739],{"class":63},[34,112536,1046],{"class":156},[34,112538,807],{"class":40},[34,112540,112541,112543],{"class":36,"line":8601},[34,112542,4743],{"class":87},[34,112544,112545],{"class":40}," data.site_xpos[site_id].copy()\n",[34,112547,112548],{"class":36,"line":8625},[34,112549,3053],{"emptyLinePlaceholder":726},[34,112551,112552],{"class":36,"line":8630},[34,112553,3053],{"emptyLinePlaceholder":726},[34,112555,112556,112558,112561],{"class":36,"line":8636},[34,112557,32598],{"class":87},[34,112559,112560],{"class":149}," get_obs",[34,112562,112563],{"class":40},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[34,112565,112566,112569,112571,112574,112576],{"class":36,"line":8663},[34,112567,112568],{"class":40},"    tip ",[34,112570,153],{"class":87},[34,112572,112573],{"class":40}," site_position(model, data, ",[34,112575,112166],{"class":156},[34,112577,807],{"class":40},[34,112579,112580,112583,112585,112587,112590],{"class":36,"line":8668},[34,112581,112582],{"class":40},"    target ",[34,112584,153],{"class":87},[34,112586,112573],{"class":40},[34,112588,112589],{"class":156},"\"target\"",[34,112591,807],{"class":40},[34,112593,112594,112596],{"class":36,"line":8674},[34,112595,4743],{"class":87},[34,112597,112598],{"class":40}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[34,112600,112601],{"class":36,"line":8686},[34,112602,3053],{"emptyLinePlaceholder":726},[34,112604,112605],{"class":36,"line":8698},[34,112606,3053],{"emptyLinePlaceholder":726},[34,112608,112609,112611,112614,112617,112619],{"class":36,"line":8710},[34,112610,32598],{"class":87},[34,112612,112613],{"class":149}," reward",[34,112615,112616],{"class":40},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[34,112618,840],{"class":63},[34,112620,4392],{"class":40},[34,112622,112623,112625,112627,112629,112631],{"class":36,"line":10369},[34,112624,112568],{"class":40},[34,112626,153],{"class":87},[34,112628,112573],{"class":40},[34,112630,112166],{"class":156},[34,112632,807],{"class":40},[34,112634,112635,112637,112639,112641,112643],{"class":36,"line":10394},[34,112636,112582],{"class":40},[34,112638,153],{"class":87},[34,112640,112573],{"class":40},[34,112642,112589],{"class":156},[34,112644,807],{"class":40},[34,112646,112647,112650,112652,112654,112656],{"class":36,"line":10417},[34,112648,112649],{"class":40},"    dist ",[34,112651,153],{"class":87},[34,112653,112231],{"class":40},[34,112655,1327],{"class":87},[34,112657,112236],{"class":40},[34,112659,112660,112663,112665,112668,112670],{"class":36,"line":10441},[34,112661,112662],{"class":40},"    control_cost ",[34,112664,153],{"class":87},[34,112666,112667],{"class":63}," 0.01",[34,112669,7171],{"class":87},[34,112671,112672],{"class":40}," np.sum(np.square(data.ctrl))\n",[34,112674,112675,112677,112679,112681,112683,112685,112687],{"class":36,"line":10446},[34,112676,4743],{"class":87},[34,112678,110427],{"class":63},[34,112680,801],{"class":40},[34,112682,1327],{"class":87},[34,112684,112226],{"class":40},[34,112686,1327],{"class":87},[34,112688,112689],{"class":40}," control_cost)\n",[34,112691,112692],{"class":36,"line":10451},[34,112693,3053],{"emptyLinePlaceholder":726},[34,112695,112696],{"class":36,"line":10456},[34,112697,3053],{"emptyLinePlaceholder":726},[34,112699,112700,112702,112704,112706,112708],{"class":36,"line":10465},[34,112701,32598],{"class":87},[34,112703,2626],{"class":149},[34,112705,102028],{"class":40},[34,112707,96316],{"class":63},[34,112709,4392],{"class":40},[34,112711,112712,112714,112716,112718,112720],{"class":36,"line":10470},[34,112713,102037],{"class":40},[34,112715,153],{"class":87},[34,112717,102042],{"class":40},[34,112719,101944],{"class":63},[34,112721,807],{"class":40},[34,112723,112724,112726,112728],{"class":36,"line":10476},[34,112725,102051],{"class":40},[34,112727,153],{"class":87},[34,112729,102056],{"class":40},[34,112731,112732,112734,112736],{"class":36,"line":10497},[34,112733,110783],{"class":40},[34,112735,153],{"class":87},[34,112737,105391],{"class":63},[34,112739,112740],{"class":36,"line":10503},[34,112741,3053],{"emptyLinePlaceholder":726},[34,112743,112744,112746,112748,112750,112752,112754,112756],{"class":36,"line":10517},[34,112745,3854],{"class":87},[34,112747,32267],{"class":40},[34,112749,26695],{"class":87},[34,112751,33094],{"class":63},[34,112753,801],{"class":40},[34,112755,65712],{"class":63},[34,112757,31437],{"class":40},[34,112759,112760],{"class":36,"line":10523},[34,112761,112762],{"class":40},"        mujoco.mj_forward(model, data)\n",[34,112764,112765,112768,112770,112772,112774],{"class":36,"line":10550},[34,112766,112767],{"class":40},"        tip ",[34,112769,153],{"class":87},[34,112771,112573],{"class":40},[34,112773,112166],{"class":156},[34,112775,807],{"class":40},[34,112777,112778,112781,112783,112785,112787],{"class":36,"line":10559},[34,112779,112780],{"class":40},"        target ",[34,112782,153],{"class":87},[34,112784,112573],{"class":40},[34,112786,112589],{"class":156},[34,112788,807],{"class":40},[34,112790,112791,112794,112796,112799,112801],{"class":36,"line":10565},[34,112792,112793],{"class":40},"        error ",[34,112795,153],{"class":87},[34,112797,112798],{"class":40}," target ",[34,112800,1327],{"class":87},[34,112802,112803],{"class":40}," tip\n",[34,112805,112806],{"class":36,"line":10573},[34,112807,3053],{"emptyLinePlaceholder":726},[34,112809,112810,112812,112814,112816,112818,112821,112823,112825,112828,112830,112833,112835,112837,112839,112841],{"class":36,"line":10578},[34,112811,107247],{"class":40},[34,112813,987],{"class":63},[34,112815,5096],{"class":40},[34,112817,153],{"class":87},[34,112819,112820],{"class":40}," np.clip(",[34,112822,105890],{"class":63},[34,112824,7171],{"class":87},[34,112826,112827],{"class":40}," error[",[34,112829,875],{"class":63},[34,112831,112832],{"class":40},"], ",[34,112834,1327],{"class":87},[34,112836,103033],{"class":63},[34,112838,13088],{"class":40},[34,112840,103033],{"class":63},[34,112842,807],{"class":40},[34,112844,112845,112847,112849,112851,112853,112855,112857,112859,112861,112863,112865,112867,112869,112871,112873],{"class":36,"line":17256},[34,112846,107247],{"class":40},[34,112848,1013],{"class":63},[34,112850,5096],{"class":40},[34,112852,153],{"class":87},[34,112854,112820],{"class":40},[34,112856,105890],{"class":63},[34,112858,7171],{"class":87},[34,112860,112827],{"class":40},[34,112862,987],{"class":63},[34,112864,112832],{"class":40},[34,112866,1327],{"class":87},[34,112868,103033],{"class":63},[34,112870,13088],{"class":40},[34,112872,103033],{"class":63},[34,112874,807],{"class":40},[34,112876,112877],{"class":36,"line":17262},[34,112878,3053],{"emptyLinePlaceholder":726},[34,112880,112881],{"class":36,"line":17285},[34,112882,102146],{"class":40},[34,112884,112885,112887,112889],{"class":36,"line":17291},[34,112886,110927],{"class":40},[34,112888,10130],{"class":87},[34,112890,112891],{"class":40}," reward(model, data)\n",[34,112893,112894],{"class":36,"line":17314},[34,112895,3053],{"emptyLinePlaceholder":726},[34,112897,112898,112900,112902,112904,112906,112908,112910],{"class":36,"line":17328},[34,112899,3150],{"class":87},[34,112901,32267],{"class":40},[34,112903,1123],{"class":87},[34,112905,6407],{"class":63},[34,112907,102189],{"class":87},[34,112909,4746],{"class":63},[34,112911,4392],{"class":40},[34,112913,112914,112917,112919],{"class":36,"line":17348},[34,112915,112916],{"class":40},"            obs ",[34,112918,153],{"class":87},[34,112920,112921],{"class":40}," get_obs(model, data)\n",[34,112923,112924,112926,112928,112930],{"class":36,"line":17354},[34,112925,35301],{"class":63},[34,112927,801],{"class":40},[34,112929,110961],{"class":156},[34,112931,112932],{"class":40},", step)\n",[34,112934,112935,112937,112939,112942,112945,112947],{"class":36,"line":17365},[34,112936,35301],{"class":63},[34,112938,801],{"class":40},[34,112940,112941],{"class":156},"\"  tip:\"",[34,112943,112944],{"class":40},", np.round(tip, ",[34,112946,869],{"class":63},[34,112948,31148],{"class":40},[34,112950,112951,112953,112955,112958,112961,112963],{"class":36,"line":17388},[34,112952,35301],{"class":63},[34,112954,801],{"class":40},[34,112956,112957],{"class":156},"\"  target:\"",[34,112959,112960],{"class":40},", np.round(target, ",[34,112962,869],{"class":63},[34,112964,31148],{"class":40},[34,112966,112967,112969,112971,112974,112977,112979],{"class":36,"line":17410},[34,112968,35301],{"class":63},[34,112970,801],{"class":40},[34,112972,112973],{"class":156},"\"  ctrl:\"",[34,112975,112976],{"class":40},", np.round(data.ctrl.copy(), ",[34,112978,869],{"class":63},[34,112980,31148],{"class":40},[34,112982,112983,112985,112987,112990,112993,112995],{"class":36,"line":17415},[34,112984,35301],{"class":63},[34,112986,801],{"class":40},[34,112988,112989],{"class":156},"\"  obs_dim:\"",[34,112991,112992],{"class":40},", obs.shape[",[34,112994,987],{"class":63},[34,112996,5310],{"class":40},[34,112998,112999],{"class":36,"line":17421},[34,113000,3053],{"emptyLinePlaceholder":726},[34,113002,113003,113005,113007,113009,113011,113013,113015,113017],{"class":36,"line":17435},[34,113004,31950],{"class":63},[34,113006,801],{"class":40},[34,113008,111006],{"class":156},[34,113010,13088],{"class":40},[34,113012,32669],{"class":63},[34,113014,111013],{"class":40},[34,113016,869],{"class":63},[34,113018,31148],{"class":40},[34,113020,113021,113023,113025,113028,113031,113033,113035,113037],{"class":36,"line":17448},[34,113022,31950],{"class":63},[34,113024,801],{"class":40},[34,113026,113027],{"class":156},"\"final tip:\"",[34,113029,113030],{"class":40},", np.round(site_position(model, data, ",[34,113032,112166],{"class":156},[34,113034,110975],{"class":40},[34,113036,869],{"class":63},[34,113038,31148],{"class":40},[34,113040,113041,113043,113045,113048,113050,113052,113054,113056],{"class":36,"line":17453},[34,113042,31950],{"class":63},[34,113044,801],{"class":40},[34,113046,113047],{"class":156},"\"target:\"",[34,113049,113030],{"class":40},[34,113051,112589],{"class":156},[34,113053,110975],{"class":40},[34,113055,869],{"class":63},[34,113057,31148],{"class":40},[34,113059,113060],{"class":36,"line":17467},[34,113061,3053],{"emptyLinePlaceholder":726},[34,113063,113064],{"class":36,"line":17472},[34,113065,3053],{"emptyLinePlaceholder":726},[34,113067,113068,113070,113072,113074,113076],{"class":36,"line":17478},[34,113069,2191],{"class":87},[34,113071,31871],{"class":63},[34,113073,102189],{"class":87},[34,113075,102192],{"class":156},[34,113077,4392],{"class":40},[34,113079,113080],{"class":36,"line":17483},[34,113081,102199],{"class":40},[108,113083,104200],{},[24,113085,113087],{"className":24474,"code":113086,"language":24476,"meta":29,"style":29},"touch ch7_reacher.py\n",[31,113088,113089],{"__ignoreMap":29},[34,113090,113091,113093],{"class":36,"line":37},[34,113092,101913],{"class":149},[34,113094,113095],{"class":156}," ch7_reacher.py\n",[108,113097,111074],{},[24,113099,113101],{"className":24474,"code":113100,"language":24476,"meta":29,"style":29},"python ch7_reacher.py\n",[31,113102,113103],{"__ignoreMap":29},[34,113104,113105,113107],{"class":36,"line":37},[34,113106,31031],{"class":149},[34,113108,113095],{"class":156},[19,113110,102202],{"id":102202},[108,113112,113113],{},"读取 site 坐标：",[24,113115,113117],{"className":31029,"code":113116,"language":31031,"meta":29,"style":29},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[31,113118,113119],{"__ignoreMap":29},[34,113120,113121,113123,113125,113127,113129],{"class":36,"line":37},[34,113122,32598],{"class":87},[34,113124,112486],{"class":149},[34,113126,112489],{"class":40},[34,113128,1962],{"class":63},[34,113130,112494],{"class":40},[108,113132,113133],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[108,113135,111090],{},[24,113137,113139],{"className":31029,"code":113138,"language":31031,"meta":29,"style":29},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[31,113140,113141],{"__ignoreMap":29},[34,113142,113143,113145],{"class":36,"line":37},[34,113144,17698],{"class":87},[34,113146,112598],{"class":40},[108,113148,113149],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[108,113151,110415],{},[24,113153,113155],{"className":31029,"code":113154,"language":31031,"meta":29,"style":29},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[31,113156,113157,113169,113182],{"__ignoreMap":29},[34,113158,113159,113161,113163,113165,113167],{"class":36,"line":37},[34,113160,112226],{"class":40},[34,113162,153],{"class":87},[34,113164,112231],{"class":40},[34,113166,1327],{"class":87},[34,113168,112236],{"class":40},[34,113170,113171,113174,113176,113178,113180],{"class":36,"line":51},[34,113172,113173],{"class":40},"control_cost ",[34,113175,153],{"class":87},[34,113177,112667],{"class":63},[34,113179,7171],{"class":87},[34,113181,112672],{"class":40},[34,113183,113184,113186,113188,113190,113192,113194,113196],{"class":36,"line":60},[34,113185,17698],{"class":87},[34,113187,110427],{"class":63},[34,113189,801],{"class":40},[34,113191,1327],{"class":87},[34,113193,112226],{"class":40},[34,113195,1327],{"class":87},[34,113197,112689],{"class":40},[108,113199,113200],{},"奖励由两部分组成：",[752,113202,113203,113208],{},[755,113204,113205,113207],{},[31,113206,112253],{},"：末端离目标越远，奖励越低。",[755,113209,113210,113213],{},[31,113211,113212],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[108,113215,113216],{},"简单控制器：",[24,113218,113220],{"className":31029,"code":113219,"language":31031,"meta":29,"style":29},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[31,113221,113222,113235,113267],{"__ignoreMap":29},[34,113223,113224,113227,113229,113231,113233],{"class":36,"line":37},[34,113225,113226],{"class":40},"error ",[34,113228,153],{"class":87},[34,113230,112798],{"class":40},[34,113232,1327],{"class":87},[34,113234,112803],{"class":40},[34,113236,113237,113239,113241,113243,113245,113247,113249,113251,113253,113255,113257,113259,113261,113263,113265],{"class":36,"line":51},[34,113238,106501],{"class":40},[34,113240,987],{"class":63},[34,113242,5096],{"class":40},[34,113244,153],{"class":87},[34,113246,112820],{"class":40},[34,113248,105890],{"class":63},[34,113250,7171],{"class":87},[34,113252,112827],{"class":40},[34,113254,875],{"class":63},[34,113256,112832],{"class":40},[34,113258,1327],{"class":87},[34,113260,103033],{"class":63},[34,113262,13088],{"class":40},[34,113264,103033],{"class":63},[34,113266,807],{"class":40},[34,113268,113269,113271,113273,113275,113277,113279,113281,113283,113285,113287,113289,113291,113293,113295,113297],{"class":36,"line":60},[34,113270,106501],{"class":40},[34,113272,1013],{"class":63},[34,113274,5096],{"class":40},[34,113276,153],{"class":87},[34,113278,112820],{"class":40},[34,113280,105890],{"class":63},[34,113282,7171],{"class":87},[34,113284,112827],{"class":40},[34,113286,987],{"class":63},[34,113288,112832],{"class":40},[34,113290,1327],{"class":87},[34,113292,103033],{"class":63},[34,113294,13088],{"class":40},[34,113296,103033],{"class":63},[34,113298,807],{"class":40},[108,113300,113301],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[19,113303,102338],{"id":102338},[24,113305,113306],{"className":31029,"code":113116,"language":31031,"meta":29,"style":29},[31,113307,113308],{"__ignoreMap":29},[34,113309,113310,113312,113314,113316,113318],{"class":36,"line":37},[34,113311,32598],{"class":87},[34,113313,112486],{"class":149},[34,113315,112489],{"class":40},[34,113317,1962],{"class":63},[34,113319,112494],{"class":40},[108,113321,113322,113323,113325,113326,83169,113328,29036],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[31,113324,80440],{}," 是 site 的名字，比如 ",[31,113327,112166],{},[31,113329,112589],{},[24,113331,113333],{"className":31029,"code":113332,"language":31031,"meta":29,"style":29},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[31,113334,113335],{"__ignoreMap":29},[34,113336,113337,113339,113341],{"class":36,"line":37},[34,113338,104264],{"class":40},[34,113340,153],{"class":87},[34,113342,112503],{"class":40},[108,113344,113345],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[24,113347,113349],{"className":31029,"code":113348,"language":31031,"meta":29,"style":29},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[31,113350,113351,113363],{"__ignoreMap":29},[34,113352,113353,113355,113357,113359,113361],{"class":36,"line":37},[34,113354,2191],{"class":87},[34,113356,104079],{"class":40},[34,113358,41],{"class":87},[34,113360,4746],{"class":63},[34,113362,4392],{"class":40},[34,113364,113365,113367,113369,113371,113373,113375,113377,113379,113381,113383],{"class":36,"line":51},[34,113366,104525],{"class":87},[34,113368,104065],{"class":63},[34,113370,801],{"class":40},[34,113372,851],{"class":87},[34,113374,112528],{"class":156},[34,113376,1690],{"class":63},[34,113378,80440],{"class":40},[34,113380,1739],{"class":63},[34,113382,1046],{"class":156},[34,113384,807],{"class":40},[108,113386,113387,113388,113391,113392,113394],{},"如果 site 没找到，就主动报错。",[31,113389,113390],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[31,113393,80440],{}," 的值放进字符串里。",[24,113396,113398],{"className":31029,"code":113397,"language":31031,"meta":29,"style":29},"return data.site_xpos[site_id].copy()\n",[31,113399,113400],{"__ignoreMap":29},[34,113401,113402,113404],{"class":36,"line":37},[34,113403,17698],{"class":87},[34,113405,112545],{"class":40},[108,113407,113408,113409,113411,113412,113415],{},"返回这个 site 的世界坐标。",[31,113410,104310],{}," 里的每一行都是一个 site 的 ",[31,113413,113414],{},"(x, y, z)"," 坐标。",[24,113417,113419],{"className":31029,"code":113418,"language":31031,"meta":29,"style":29},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[31,113420,113421],{"__ignoreMap":29},[34,113422,113423,113425,113427],{"class":36,"line":37},[34,113424,32598],{"class":87},[34,113426,112560],{"class":149},[34,113428,112563],{"class":40},[108,113430,113431],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[24,113433,113435],{"className":31029,"code":113434,"language":31031,"meta":29,"style":29},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[31,113436,113437,113449],{"__ignoreMap":29},[34,113438,113439,113441,113443,113445,113447],{"class":36,"line":37},[34,113440,112198],{"class":40},[34,113442,153],{"class":87},[34,113444,112573],{"class":40},[34,113446,112166],{"class":156},[34,113448,807],{"class":40},[34,113450,113451,113453,113455,113457,113459],{"class":36,"line":51},[34,113452,112208],{"class":40},[34,113454,153],{"class":87},[34,113456,112573],{"class":40},[34,113458,112589],{"class":156},[34,113460,807],{"class":40},[108,113462,113463],{},"分别读取末端点和目标点的世界坐标。",[24,113465,113466],{"className":31029,"code":113138,"language":31031,"meta":29,"style":29},[31,113467,113468],{"__ignoreMap":29},[34,113469,113470,113472],{"class":36,"line":37},[34,113471,17698],{"class":87},[34,113473,112598],{"class":40},[108,113475,113476],{},"把四部分拼成一个观测数组：",[24,113478,113481],{"className":113479,"code":113480,"language":5840,"meta":29},[5838],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[31,113482,113480],{"__ignoreMap":29},[24,113484,113486],{"className":31029,"code":113485,"language":31031,"meta":29,"style":29},"dist = np.linalg.norm(tip - target)\n",[31,113487,113488],{"__ignoreMap":29},[34,113489,113490,113492,113494,113496,113498],{"class":36,"line":37},[34,113491,112226],{"class":40},[34,113493,153],{"class":87},[34,113495,112231],{"class":40},[34,113497,1327],{"class":87},[34,113499,112236],{"class":40},[108,113501,113502,113503,113506,113507,113510],{},"计算 tip 到 target 的距离。",[31,113504,113505],{},"tip - target"," 得到一个三维向量，",[31,113508,113509],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[108,113512,15286],{},[24,113514,113517],{"className":113515,"code":113516,"language":5840,"meta":29},[5838],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[31,113518,113516],{"__ignoreMap":29},[24,113520,113522],{"className":31029,"code":113521,"language":31031,"meta":29,"style":29},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[31,113523,113524],{"__ignoreMap":29},[34,113525,113526,113528,113530,113532,113534],{"class":36,"line":37},[34,113527,113173],{"class":40},[34,113529,153],{"class":87},[34,113531,112667],{"class":63},[34,113533,7171],{"class":87},[34,113535,112672],{"class":40},[108,113537,113538,113539,113542,113543,113546],{},"计算动作惩罚。",[31,113540,113541],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[31,113544,113545],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[24,113548,113550],{"className":31029,"code":113549,"language":31031,"meta":29,"style":29},"return float(-dist - control_cost)\n",[31,113551,113552],{"__ignoreMap":29},[34,113553,113554,113556,113558,113560,113562,113564,113566],{"class":36,"line":37},[34,113555,17698],{"class":87},[34,113557,110427],{"class":63},[34,113559,801],{"class":40},[34,113561,1327],{"class":87},[34,113563,112226],{"class":40},[34,113565,1327],{"class":87},[34,113567,112689],{"class":40},[108,113569,113570],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[24,113572,113573],{"className":31029,"code":111433,"language":31031,"meta":29,"style":29},[31,113574,113575],{"__ignoreMap":29},[34,113576,113577,113579,113581],{"class":36,"line":37},[34,113578,111440],{"class":40},[34,113580,153],{"class":87},[34,113582,105391],{"class":63},[108,113584,113585],{},"累计奖励变量，记录整个运行过程的总分。",[24,113587,113589],{"className":31029,"code":113588,"language":31031,"meta":29,"style":29},"for step in range(500):\n",[31,113590,113591],{"__ignoreMap":29},[34,113592,113593,113595,113597,113599,113601,113603,113605],{"class":36,"line":37},[34,113594,3678],{"class":87},[34,113596,32267],{"class":40},[34,113598,26695],{"class":87},[34,113600,33094],{"class":63},[34,113602,801],{"class":40},[34,113604,65712],{"class":63},[34,113606,31437],{"class":40},[108,113608,113609],{},"运行 500 个控制步。",[24,113611,113612],{"className":31029,"code":105173,"language":31031,"meta":29,"style":29},[31,113613,113614],{"__ignoreMap":29},[34,113615,113616],{"class":36,"line":37},[34,113617,105173],{"class":40},[108,113619,113620,113621,101648,113623,113625],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[31,113622,103861],{},[31,113624,103864],{}," 是当前状态下的坐标。",[24,113627,113629],{"className":31029,"code":113628,"language":31031,"meta":29,"style":29},"error = target - tip\n",[31,113630,113631],{"__ignoreMap":29},[34,113632,113633,113635,113637,113639,113641],{"class":36,"line":37},[34,113634,113226],{"class":40},[34,113636,153],{"class":87},[34,113638,112798],{"class":40},[34,113640,1327],{"class":87},[34,113642,112803],{"class":40},[108,113644,113645],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[24,113647,113649],{"className":31029,"code":113648,"language":31031,"meta":29,"style":29},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[31,113650,113651,113683],{"__ignoreMap":29},[34,113652,113653,113655,113657,113659,113661,113663,113665,113667,113669,113671,113673,113675,113677,113679,113681],{"class":36,"line":37},[34,113654,106501],{"class":40},[34,113656,987],{"class":63},[34,113658,5096],{"class":40},[34,113660,153],{"class":87},[34,113662,112820],{"class":40},[34,113664,105890],{"class":63},[34,113666,7171],{"class":87},[34,113668,112827],{"class":40},[34,113670,875],{"class":63},[34,113672,112832],{"class":40},[34,113674,1327],{"class":87},[34,113676,103033],{"class":63},[34,113678,13088],{"class":40},[34,113680,103033],{"class":63},[34,113682,807],{"class":40},[34,113684,113685,113687,113689,113691,113693,113695,113697,113699,113701,113703,113705,113707,113709,113711,113713],{"class":36,"line":51},[34,113686,106501],{"class":40},[34,113688,1013],{"class":63},[34,113690,5096],{"class":40},[34,113692,153],{"class":87},[34,113694,112820],{"class":40},[34,113696,105890],{"class":63},[34,113698,7171],{"class":87},[34,113700,112827],{"class":40},[34,113702,987],{"class":63},[34,113704,112832],{"class":40},[34,113706,1327],{"class":87},[34,113708,103033],{"class":63},[34,113710,13088],{"class":40},[34,113712,103033],{"class":63},[34,113714,807],{"class":40},[108,113716,113717,113718,113721],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[31,113719,113720],{},"error -> ctrl -> step"," 的流程。",[24,113723,113724],{"className":31029,"code":105135,"language":31031,"meta":29,"style":29},[31,113725,113726],{"__ignoreMap":29},[34,113727,113728],{"class":36,"line":37},[34,113729,105135],{"class":40},[108,113731,113732],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[24,113734,113736],{"className":31029,"code":113735,"language":31031,"meta":29,"style":29},"obs = get_obs(model, data)\n",[31,113737,113738],{"__ignoreMap":29},[34,113739,113740,113742,113744],{"class":36,"line":37},[34,113741,111484],{"class":40},[34,113743,153],{"class":87},[34,113745,112921],{"class":40},[108,113747,113748,113749,113752],{},"读取最新观测。后面打印 ",[31,113750,113751],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113754,102946],{"id":102945},[108,113756,113757],{},"观测维度为:",[24,113759,113762],{"className":113760,"code":113761,"language":5840,"meta":29},[5838],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[31,113763,113761],{"__ignoreMap":29},[108,113765,113766],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[108,113768,113769],{},"程序每 100 步打印：",[24,113771,113774],{"className":113772,"code":113773,"language":5840,"meta":29},[5838],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[31,113775,113773],{"__ignoreMap":29},[108,113777,113778,113779,113781],{},"如果控制有效，你应该看到最终 ",[31,113780,103861],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113783,102978],{"id":102977},[752,113785,113786,113789,113792,113798,113804,113811,113821],{},[755,113787,113788],{},"修改目标点位置。",[755,113790,113791],{},"重新运行，观察最终 tip 是否变化。",[755,113793,113794,113795,113797],{},"把 gravity 改成 ",[31,113796,103219],{},"，观察控制是否变差。",[755,113799,111811,113800,111815,113802,29036],{},[31,113801,102788],{},[31,113803,875],{},[755,113805,103041,113806,103044,113808,113810],{},[31,113807,111226],{},[31,113809,107937],{},"，观察机械臂是否更难移动。",[755,113812,103041,113813,83160,113815,103044,113817,113820],{},[31,113814,103864],{},[31,113816,104776],{},[31,113818,113819],{},"0.2 0 0.6","，观察 reward 和 final tip。",[755,113822,113823],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113825,103083],{"id":103082},[19,113827,113829],{"id":113828},"site-not-found",[31,113830,113831],{},"site not found",[108,113833,113834,113835,101648,113838,29036],{},"检查 XML 中是否有 ",[31,113836,113837],{},"site name=\"tip\"",[31,113839,113840],{},"site name=\"target\"",[19,113842,113843],{"id":113843},"机械臂完全不动",[108,113845,103153],{},[752,113847,113848,113853,113856,113861],{},[755,113849,113850,113852],{},[31,113851,102788],{}," 是否为 2",[755,113854,113855],{},"actuator 是否引用正确 joint",[755,113857,113858,113860],{},[31,113859,101706],{}," 是否被赋值",[755,113862,113863,113864],{},"是否执行了 ",[31,113865,101315],{},[19,113867,113868],{"id":113868},"控制效果不好",[108,113870,113871],{},"正常。本章重点不是控制器最优，而是任务结构:",[24,113873,113876],{"className":113874,"code":113875,"language":5840,"meta":29},[5838],"obs → action → mj_step → reward → next_obs\n",[31,113877,113875],{"__ignoreMap":29},[19,113879,113881],{"id":113880},"tip-坐标不变化","tip 坐标不变化",[108,113883,103205],{},[752,113885,113886,113891,113899,113908],{},[755,113887,113888,113889,29036],{},"是否每步调用了 ",[31,113890,101315],{},[755,113892,113893,113894,101648,113896,29036],{},"是否写入了 ",[31,113895,106756],{},[31,113897,113898],{},"data.ctrl[1]",[755,113900,113901,113902,1008,113905,29036],{},"actuator 是否正确引用 ",[31,113903,113904],{},"joint1",[31,113906,113907],{},"joint2",[755,113909,113910],{},"控制输入是否太小。",[19,113912,113913],{"id":113913},"目标点不会动",[108,113915,113916],{},"本章的 target 是固定 site：",[24,113918,113920],{"className":53713,"code":113919,"language":53715,"meta":29,"style":29},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[31,113921,113922],{"__ignoreMap":29},[34,113923,113924,113926,113928,113930,113932,113934,113936,113938,113941],{"class":36,"line":37},[34,113925,41],{"class":40},[34,113927,103840],{"class":44},[34,113929,15573],{"class":149},[34,113931,153],{"class":40},[34,113933,112589],{"class":156},[34,113935,101736],{"class":149},[34,113937,153],{"class":40},[34,113939,113940],{"class":156},"\"0.5 0 0.4\"",[34,113942,113943],{"class":40}," ...\u002F>\n",[108,113945,113946,113947,113949],{},"它直接挂在 ",[31,113948,102471],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[19,113951,113952],{"id":113952},"机械臂不像真实机械臂",[108,113954,113955],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113957,103237],{"id":103236},[108,113959,113960],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[108,113962,113963],{},"核心公式：",[24,113965,113968],{"className":113966,"code":113967,"language":5840,"meta":29},[5838],"distance = ||tip - target||\nreward = -distance - action_cost\n",[31,113969,113967],{"__ignoreMap":29},[108,113971,113972],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[45,113974,113975],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":29,"searchDepth":51,"depth":51,"links":113977},[113978,113979,113980,113985,113989,113990,113991,113999],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":113981},[113982,113983,113984],{"id":112181,"depth":60,"text":112182},{"id":112257,"depth":60,"text":112257},{"id":112287,"depth":60,"text":112288},{"id":101882,"depth":51,"text":101883,"children":113986},[113987,113988],{"id":102202,"depth":60,"text":102202},{"id":102338,"depth":60,"text":102338},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":113992},[113993,113994,113995,113996,113997,113998],{"id":113828,"depth":60,"text":113831},{"id":113843,"depth":60,"text":113843},{"id":113868,"depth":60,"text":113868},{"id":113880,"depth":60,"text":113881},{"id":113913,"depth":60,"text":113913},{"id":113952,"depth":60,"text":113952},{"id":103236,"depth":51,"text":103237},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111985,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114006,"title":114007,"body":114008,"description":29,"extension":724,"meta":117470,"navigation":726,"path":117471,"seo":117472,"stem":117473,"__hash__":117474},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114009,"toc":117441},[114010,114013,114015,114018,114021,114046,114049,114055,114058,114064,114066,114068,114092,114094,114112,114114,114157,114159,114186,114188,114191,114243,114246,114252,114261,114264,114302,114305,114344,114347,114355,114362,114365,114371,114373,114427,114434,114479,114482,114486,114502,114512,114514,115775,115777,115789,115791,115802,115804,115807,115828,115831,115834,115867,115873,115876,115909,115912,115915,115956,115961,115975,115978,115991,115996,116019,116021,116036,116046,116061,116068,116088,116103,116121,116124,116141,116149,116165,116171,116203,116216,116248,116258,116293,116307,116353,116367,116409,116420,116433,116439,116472,116475,116502,116512,116552,116562,116579,116586,116604,116607,116648,116661,116676,116679,116702,116705,116717,116720,116739,116744,116765,116768,116783,116786,116820,116832,116847,116850,116875,116878,116897,116900,116932,116935,116959,116965,116995,117002,117015,117018,117020,117022,117028,117031,117034,117046,117049,117051,117105,117107,117111,117117,117126,117129,117136,117138,117161,117164,117168,117170,117188,117194,117196,117229,117232,117238,117242,117245,117265,117270,117274,117281,117301,117306,117310,117313,117333,117336,117422,117426,117429,117435,117438],[10,114011,114007],{"id":114012},"_8gymnasium-风格强化学习接口基础",[14,114014,101277],{"id":101276},[108,114016,114017],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[108,114019,114020],{},"你将实现:",[24,114022,114024],{"className":31029,"code":114023,"language":31031,"meta":29,"style":29},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[31,114025,114026,114036],{"__ignoreMap":29},[34,114027,114028,114031,114033],{"class":36,"line":37},[34,114029,114030],{"class":40},"obs, info ",[34,114032,153],{"class":87},[34,114034,114035],{"class":40}," env.reset()\n",[34,114037,114038,114041,114043],{"class":36,"line":51},[34,114039,114040],{"class":40},"obs, reward, terminated, truncated, info ",[34,114042,153],{"class":87},[34,114044,114045],{"class":40}," env.step(action)\n",[108,114047,114048],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[108,114050,114051,114052,114054],{},"前面章节的代码都是“脚本式”的：在 ",[31,114053,102925],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[108,114056,114057],{},"可以先记住 Gymnasium 环境的核心交互：",[24,114059,114062],{"className":114060,"code":114061,"language":5840,"meta":29},[5838],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[31,114063,114061],{"__ignoreMap":29},[14,114065,101400],{"id":101399},[108,114067,101403],{},[24,114069,114070],{"className":24474,"code":105018,"language":24476,"meta":29,"style":29},[31,114071,114072],{"__ignoreMap":29},[34,114073,114074,114076,114078,114080,114082,114084,114086,114088,114090],{"class":36,"line":37},[34,114075,25229],{"class":149},[34,114077,26967],{"class":156},[34,114079,24486],{"class":156},[34,114081,27052],{"class":63},[34,114083,105033],{"class":156},[34,114085,101428],{"class":156},[34,114087,103131],{"class":156},[34,114089,101444],{"class":156},[34,114091,105042],{"class":156},[108,114093,103449],{},[24,114095,114097],{"className":24474,"code":114096,"language":24476,"meta":29,"style":29},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[31,114098,114099],{"__ignoreMap":29},[34,114100,114101,114103,114105,114107,114109],{"class":36,"line":37},[34,114102,24483],{"class":149},[34,114104,24486],{"class":156},[34,114106,101560],{"class":156},[34,114108,108341],{"class":156},[34,114110,114111],{"class":156}," gymnasium\n",[108,114113,103466],{},[24,114115,114117],{"className":24474,"code":114116,"language":24476,"meta":29,"style":29},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[31,114118,114119,114136,114145],{"__ignoreMap":29},[34,114120,114121,114123,114125,114127,114130,114132,114134],{"class":36,"line":37},[34,114122,30981],{"class":149},[34,114124,29827],{"class":156},[34,114126,25768],{"class":63},[34,114128,114129],{"class":156}," mujoco-gym-api",[34,114131,101605],{"class":156},[34,114133,101608],{"class":63},[34,114135,101611],{"class":63},[34,114137,114138,114140,114142],{"class":36,"line":51},[34,114139,30981],{"class":149},[34,114141,101618],{"class":156},[34,114143,114144],{"class":156}," mujoco-gym-api\n",[34,114146,114147,114149,114151,114153,114155],{"class":36,"line":60},[34,114148,24483],{"class":149},[34,114150,24486],{"class":156},[34,114152,101560],{"class":156},[34,114154,108341],{"class":156},[34,114156,114111],{"class":156},[108,114158,101634],{},[752,114160,114161,114171,114174,114180],{},[755,114162,114163,114164,114167,114168,29036],{},"本章使用 ",[31,114165,114166],{},"gymnasium","，不是旧版 ",[31,114169,114170],{},"gym",[755,114172,114173],{},"Gymnasium API 与旧 Gym API 有差异。",[755,114175,114176,114177,29036],{},"旧 Gym 常见返回值是 4 个: ",[31,114178,114179],{},"obs, reward, done, info",[755,114181,114182,114183,29036],{},"Gymnasium 返回值是 5 个: ",[31,114184,114185],{},"obs, reward, terminated, truncated, info",[14,114187,101675],{"id":101674},[108,114189,114190],{},"强化学习环境接口包含:",[934,114192,114193,114202],{},[937,114194,114195],{},[940,114196,114197,114200],{},[943,114198,114199],{"align":24388},"方法",[943,114201,103326],{"align":24388},[980,114203,114204,114214,114224,114234],{},[940,114205,114206,114211],{},[985,114207,114208],{"align":24388},[31,114209,114210],{},"reset()",[985,114212,114213],{"align":24388},"重置环境",[940,114215,114216,114221],{},[985,114217,114218],{"align":24388},[31,114219,114220],{},"step(action)",[985,114222,114223],{"align":24388},"执行动作",[940,114225,114226,114231],{},[985,114227,114228],{"align":24388},[31,114229,114230],{},"observation_space",[985,114232,114233],{"align":24388},"观测空间",[940,114235,114236,114241],{},[985,114237,114238],{"align":24388},[31,114239,114240],{},"action_space",[985,114242,24306],{"align":24388},[108,114244,114245],{},"一个最小环境需要完成:",[24,114247,114250],{"className":114248,"code":114249,"language":5840,"meta":29},[5838],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[31,114251,114249],{"__ignoreMap":29},[19,114253,114255,101648,114258,105268],{"id":114254},"terminated-和-truncated-的区别",[31,114256,114257],{},"terminated",[31,114259,114260],{},"truncated",[108,114262,114263],{},"Gymnasium 把“结束”拆成两个概念：",[934,114265,114266,114276],{},[937,114267,114268],{},[940,114269,114270,114272,114274],{},[943,114271,105204],{"align":24388},[943,114273,101330],{"align":24388},[943,114275,21839],{"align":24388},[980,114277,114278,114290],{},[940,114279,114280,114284,114287],{},[985,114281,114282],{"align":24388},[31,114283,114257],{},[985,114285,114286],{"align":24388},"任务自然结束",[985,114288,114289],{"align":24388},"机械臂到达目标、机器人摔倒",[940,114291,114292,114296,114299],{},[985,114293,114294],{"align":24388},[31,114295,114260],{},[985,114297,114298],{"align":24388},"因外部限制截断",[985,114300,114301],{"align":24388},"达到最大步数、时间限制",[108,114303,114304],{},"本章中：",[24,114306,114308],{"className":31029,"code":114307,"language":31031,"meta":29,"style":29},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[31,114309,114310,114325],{"__ignoreMap":29},[34,114311,114312,114315,114317,114320,114322],{"class":36,"line":37},[34,114313,114314],{"class":40},"terminated ",[34,114316,153],{"class":87},[34,114318,114319],{"class":40}," dist ",[34,114321,41],{"class":87},[34,114323,114324],{"class":63}," 0.05\n",[34,114326,114327,114330,114332,114334,114337,114339,114341],{"class":36,"line":51},[34,114328,114329],{"class":40},"truncated ",[34,114331,153],{"class":87},[34,114333,39524],{"class":63},[34,114335,114336],{"class":40},".steps ",[34,114338,2364],{"class":87},[34,114340,39524],{"class":63},[34,114342,114343],{"class":40},".max_steps\n",[108,114345,114346],{},"也就是：",[752,114348,114349,114352],{},[755,114350,114351],{},"末端距离目标小于 0.05，任务成功结束。",[755,114353,114354],{},"步数超过上限，episode 被截断。",[19,114356,114358,101648,114360],{"id":114357},"observation_space-和-action_space",[31,114359,114230],{},[31,114361,114240],{},[108,114363,114364],{},"这两个对象告诉算法：",[24,114366,114369],{"className":114367,"code":114368,"language":5840,"meta":29},[5838],"观测长什么样\n动作允许多大\n",[31,114370,114368],{"__ignoreMap":29},[108,114372,15286],{},[24,114374,114376],{"className":31029,"code":114375,"language":31031,"meta":29,"style":29},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[31,114377,114378],{"__ignoreMap":29},[34,114379,114380,114382,114385,114387,114390,114393,114396,114398,114400,114403,114405,114407,114409,114411,114413,114415,114417,114420,114422,114424],{"class":36,"line":37},[34,114381,31474],{"class":63},[34,114383,114384],{"class":40},".action_space ",[34,114386,153],{"class":87},[34,114388,114389],{"class":40}," spaces.Box(",[34,114391,114392],{"class":5869},"low",[34,114394,114395],{"class":87},"=-",[34,114397,103033],{"class":63},[34,114399,13088],{"class":40},[34,114401,114402],{"class":5869},"high",[34,114404,153],{"class":87},[34,114406,103033],{"class":63},[34,114408,13088],{"class":40},[34,114410,96593],{"class":5869},[34,114412,153],{"class":87},[34,114414,801],{"class":40},[34,114416,875],{"class":63},[34,114418,114419],{"class":40},",), ",[34,114421,94130],{"class":5869},[34,114423,153],{"class":87},[34,114425,114426],{"class":40},"np.float32)\n",[108,114428,114429,114430,114433],{},"表示动作是 2 维数组，每个值都在 ",[31,114431,114432],{},"[-1, 1]"," 范围内。",[24,114435,114437],{"className":31029,"code":114436,"language":31031,"meta":29,"style":29},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[31,114438,114439],{"__ignoreMap":29},[34,114440,114441,114443,114446,114448,114450,114452,114454,114457,114459,114461,114463,114465,114467,114469,114471,114473,114475,114477],{"class":36,"line":37},[34,114442,31474],{"class":63},[34,114444,114445],{"class":40},".observation_space ",[34,114447,153],{"class":87},[34,114449,114389],{"class":40},[34,114451,114392],{"class":5869},[34,114453,114395],{"class":87},[34,114455,114456],{"class":40},"np.inf, ",[34,114458,114402],{"class":5869},[34,114460,153],{"class":87},[34,114462,114456],{"class":40},[34,114464,96593],{"class":5869},[34,114466,153],{"class":87},[34,114468,801],{"class":40},[34,114470,1241],{"class":63},[34,114472,114419],{"class":40},[34,114474,94130],{"class":5869},[34,114476,153],{"class":87},[34,114478,114426],{"class":40},[108,114480,114481],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[19,114483,114485],{"id":114484},"frame_skip-是什么","frame_skip 是什么",[24,114487,114489],{"className":31029,"code":114488,"language":31031,"meta":29,"style":29},"self.frame_skip = 5\n",[31,114490,114491],{"__ignoreMap":29},[34,114492,114493,114495,114498,114500],{"class":36,"line":37},[34,114494,31474],{"class":63},[34,114496,114497],{"class":40},".frame_skip ",[34,114499,153],{"class":87},[34,114501,55072],{"class":63},[108,114503,114504,114505,114508,114509,114511],{},"表示外部调用一次 ",[31,114506,114507],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[31,114510,101845],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114513,101883],{"id":101882},[24,114515,114517],{"className":31029,"code":114516,"language":31031,"meta":29,"style":29},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,114518,114519,114531,114537,114547,114558,114562,114566,114574,114579,114583,114587,114591,114595,114599,114603,114607,114612,114616,114620,114624,114629,114633,114637,114641,114645,114649,114653,114657,114661,114665,114669,114673,114677,114681,114699,114714,114718,114731,114741,114756,114773,114777,114798,114817,114842,114856,114860,114870,114882,114892,114896,114938,114976,114980,114990,115006,115021,115040,115047,115051,115064,115079,115094,115107,115126,115142,115146,115187,115202,115217,115221,115260,115271,115284,115288,115298,115307,115311,115321,115336,115354,115358,115369,115386,115399,115403,115413,115417,115428,115439,115443,115457,115471,115487,115491,115504,115521,115536,115543,115547,115551,115563,115573,115591,115603,115615,115619,115627,115643,115652,115661,115669,115711,115724,115729,115733,115751,115755,115759,115771],{"__ignoreMap":29},[34,114520,114521,114523,114526,114528],{"class":36,"line":37},[34,114522,31043],{"class":87},[34,114524,114525],{"class":40}," gymnasium ",[34,114527,32034],{"class":87},[34,114529,114530],{"class":40}," gym\n",[34,114532,114533,114535],{"class":36,"line":51},[34,114534,31043],{"class":87},[34,114536,101931],{"class":40},[34,114538,114539,114541,114543,114545],{"class":36,"line":60},[34,114540,31043],{"class":87},[34,114542,32031],{"class":40},[34,114544,32034],{"class":87},[34,114546,32037],{"class":40},[34,114548,114549,114551,114553,114555],{"class":36,"line":76},[34,114550,31388],{"class":87},[34,114552,114525],{"class":40},[34,114554,31043],{"class":87},[34,114556,114557],{"class":40}," spaces\n",[34,114559,114560],{"class":36,"line":93},[34,114561,3053],{"emptyLinePlaceholder":726},[34,114563,114564],{"class":36,"line":99},[34,114565,3053],{"emptyLinePlaceholder":726},[34,114567,114568,114570,114572],{"class":36,"line":353},[34,114569,101944],{"class":63},[34,114571,14217],{"class":87},[34,114573,101949],{"class":156},[34,114575,114576],{"class":36,"line":359},[34,114577,114578],{"class":156},"\u003Cmujoco model=\"gym_reacher\">\n",[34,114580,114581],{"class":36,"line":579},[34,114582,112368],{"class":156},[34,114584,114585],{"class":36,"line":589},[34,114586,3053],{"emptyLinePlaceholder":726},[34,114588,114589],{"class":36,"line":601},[34,114590,101968],{"class":156},[34,114592,114593],{"class":36,"line":613},[34,114594,112386],{"class":156},[34,114596,114597],{"class":36,"line":618},[34,114598,3053],{"emptyLinePlaceholder":726},[34,114600,114601],{"class":36,"line":628},[34,114602,112395],{"class":156},[34,114604,114605],{"class":36,"line":640},[34,114606,112400],{"class":156},[34,114608,114609],{"class":36,"line":2301},[34,114610,114611],{"class":156},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[34,114613,114614],{"class":36,"line":2307},[34,114615,3053],{"emptyLinePlaceholder":726},[34,114617,114618],{"class":36,"line":2328},[34,114619,112414],{"class":156},[34,114621,114622],{"class":36,"line":2333},[34,114623,112419],{"class":156},[34,114625,114626],{"class":36,"line":2347},[34,114627,114628],{"class":156},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[34,114630,114631],{"class":36,"line":2352},[34,114632,112429],{"class":156},[34,114634,114635],{"class":36,"line":2381},[34,114636,107068],{"class":156},[34,114638,114639],{"class":36,"line":2386},[34,114640,101997],{"class":156},[34,114642,114643],{"class":36,"line":2403},[34,114644,102002],{"class":156},[34,114646,114647],{"class":36,"line":2408},[34,114648,3053],{"emptyLinePlaceholder":726},[34,114650,114651],{"class":36,"line":2413},[34,114652,107085],{"class":156},[34,114654,114655],{"class":36,"line":2418},[34,114656,112454],{"class":156},[34,114658,114659],{"class":36,"line":2432},[34,114660,112459],{"class":156},[34,114662,114663],{"class":36,"line":2437},[34,114664,107095],{"class":156},[34,114666,114667],{"class":36,"line":3230},[34,114668,102007],{"class":156},[34,114670,114671],{"class":36,"line":3244},[34,114672,96328],{"class":156},[34,114674,114675],{"class":36,"line":3252},[34,114676,3053],{"emptyLinePlaceholder":726},[34,114678,114679],{"class":36,"line":3257},[34,114680,3053],{"emptyLinePlaceholder":726},[34,114682,114683,114685,114688,114690,114692,114694,114697],{"class":36,"line":3263},[34,114684,15347],{"class":87},[34,114686,114687],{"class":149}," ReacherEnv",[34,114689,801],{"class":40},[34,114691,114170],{"class":149},[34,114693,1353],{"class":40},[34,114695,114696],{"class":149},"Env",[34,114698,31437],{"class":40},[34,114700,114701,114704,114706,114708,114711],{"class":36,"line":3269},[34,114702,114703],{"class":40},"    metadata ",[34,114705,153],{"class":87},[34,114707,5101],{"class":40},[34,114709,114710],{"class":156},"\"render_modes\"",[34,114712,114713],{"class":40},": []}\n",[34,114715,114716],{"class":36,"line":3274},[34,114717,3053],{"emptyLinePlaceholder":726},[34,114719,114720,114722,114724,114727,114729],{"class":36,"line":8601},[34,114721,31452],{"class":87},[34,114723,31455],{"class":63},[34,114725,114726],{"class":40},"(self) -> ",[34,114728,96316],{"class":63},[34,114730,4392],{"class":40},[34,114732,114733,114735,114737,114739],{"class":36,"line":8625},[34,114734,31468],{"class":63},[34,114736,17913],{"class":40},[34,114738,31480],{"class":63},[34,114740,2629],{"class":40},[34,114742,114743,114745,114748,114750,114752,114754],{"class":36,"line":8630},[34,114744,31496],{"class":63},[34,114746,114747],{"class":40},".model ",[34,114749,153],{"class":87},[34,114751,102042],{"class":40},[34,114753,101944],{"class":63},[34,114755,807],{"class":40},[34,114757,114758,114760,114763,114765,114768,114770],{"class":36,"line":8636},[34,114759,31496],{"class":63},[34,114761,114762],{"class":40},".data ",[34,114764,153],{"class":87},[34,114766,114767],{"class":40}," mujoco.MjData(",[34,114769,31474],{"class":63},[34,114771,114772],{"class":40},".model)\n",[34,114774,114775],{"class":36,"line":8663},[34,114776,3053],{"emptyLinePlaceholder":726},[34,114778,114779,114781,114784,114786,114789,114791,114794,114796],{"class":36,"line":8668},[34,114780,31496],{"class":63},[34,114782,114783],{"class":40},".tip_site_id ",[34,114785,153],{"class":87},[34,114787,114788],{"class":40}," mujoco.mj_name2id(",[34,114790,31474],{"class":63},[34,114792,114793],{"class":40},".model, mujoco.mjtObj.mjOBJ_SITE, ",[34,114795,112166],{"class":156},[34,114797,807],{"class":40},[34,114799,114800,114802,114805,114807,114809,114811,114813,114815],{"class":36,"line":8674},[34,114801,31496],{"class":63},[34,114803,114804],{"class":40},".target_site_id ",[34,114806,153],{"class":87},[34,114808,114788],{"class":40},[34,114810,31474],{"class":63},[34,114812,114793],{"class":40},[34,114814,112589],{"class":156},[34,114816,807],{"class":40},[34,114818,114819,114821,114823,114825,114827,114829,114832,114834,114836,114838,114840],{"class":36,"line":8686},[34,114820,3150],{"class":87},[34,114822,39524],{"class":63},[34,114824,114783],{"class":40},[34,114826,41],{"class":87},[34,114828,4746],{"class":63},[34,114830,114831],{"class":87}," or",[34,114833,39524],{"class":63},[34,114835,114804],{"class":40},[34,114837,41],{"class":87},[34,114839,4746],{"class":63},[34,114841,4392],{"class":40},[34,114843,114844,114847,114849,114851,114854],{"class":36,"line":8698},[34,114845,114846],{"class":87},"            raise",[34,114848,104065],{"class":63},[34,114850,801],{"class":40},[34,114852,114853],{"class":156},"\"required sites not found\"",[34,114855,807],{"class":40},[34,114857,114858],{"class":36,"line":8710},[34,114859,3053],{"emptyLinePlaceholder":726},[34,114861,114862,114864,114866,114868],{"class":36,"line":10369},[34,114863,31496],{"class":63},[34,114865,114497],{"class":40},[34,114867,153],{"class":87},[34,114869,55072],{"class":63},[34,114871,114872,114874,114877,114879],{"class":36,"line":10394},[34,114873,31496],{"class":63},[34,114875,114876],{"class":40},".max_steps ",[34,114878,153],{"class":87},[34,114880,114881],{"class":63}," 200\n",[34,114883,114884,114886,114888,114890],{"class":36,"line":10417},[34,114885,31496],{"class":63},[34,114887,114336],{"class":40},[34,114889,153],{"class":87},[34,114891,47984],{"class":63},[34,114893,114894],{"class":36,"line":10441},[34,114895,3053],{"emptyLinePlaceholder":726},[34,114897,114898,114900,114902,114904,114906,114908,114910,114912,114914,114916,114918,114920,114922,114924,114926,114928,114930,114932,114934,114936],{"class":36,"line":10446},[34,114899,31496],{"class":63},[34,114901,114384],{"class":40},[34,114903,153],{"class":87},[34,114905,114389],{"class":40},[34,114907,114392],{"class":5869},[34,114909,114395],{"class":87},[34,114911,103033],{"class":63},[34,114913,13088],{"class":40},[34,114915,114402],{"class":5869},[34,114917,153],{"class":87},[34,114919,103033],{"class":63},[34,114921,13088],{"class":40},[34,114923,96593],{"class":5869},[34,114925,153],{"class":87},[34,114927,801],{"class":40},[34,114929,875],{"class":63},[34,114931,114419],{"class":40},[34,114933,94130],{"class":5869},[34,114935,153],{"class":87},[34,114937,114426],{"class":40},[34,114939,114940,114942,114944,114946,114948,114950,114952,114954,114956,114958,114960,114962,114964,114966,114968,114970,114972,114974],{"class":36,"line":10451},[34,114941,31496],{"class":63},[34,114943,114445],{"class":40},[34,114945,153],{"class":87},[34,114947,114389],{"class":40},[34,114949,114392],{"class":5869},[34,114951,114395],{"class":87},[34,114953,114456],{"class":40},[34,114955,114402],{"class":5869},[34,114957,153],{"class":87},[34,114959,114456],{"class":40},[34,114961,96593],{"class":5869},[34,114963,153],{"class":87},[34,114965,801],{"class":40},[34,114967,1241],{"class":63},[34,114969,114419],{"class":40},[34,114971,94130],{"class":5869},[34,114973,153],{"class":87},[34,114975,114426],{"class":40},[34,114977,114978],{"class":36,"line":10456},[34,114979,3053],{"emptyLinePlaceholder":726},[34,114981,114982,114984,114987],{"class":36,"line":10465},[34,114983,31452],{"class":87},[34,114985,114986],{"class":149}," _get_obs",[34,114988,114989],{"class":40},"(self) -> np.ndarray:\n",[34,114991,114992,114994,114996,114998,115001,115003],{"class":36,"line":10470},[34,114993,112767],{"class":40},[34,114995,153],{"class":87},[34,114997,39524],{"class":63},[34,114999,115000],{"class":40},".data.site_xpos[",[34,115002,31474],{"class":63},[34,115004,115005],{"class":40},".tip_site_id].copy()\n",[34,115007,115008,115010,115012,115014,115016,115018],{"class":36,"line":10476},[34,115009,112780],{"class":40},[34,115011,153],{"class":87},[34,115013,39524],{"class":63},[34,115015,115000],{"class":40},[34,115017,31474],{"class":63},[34,115019,115020],{"class":40},".target_site_id].copy()\n",[34,115022,115023,115025,115027,115030,115032,115035,115037],{"class":36,"line":10497},[34,115024,110812],{"class":40},[34,115026,153],{"class":87},[34,115028,115029],{"class":40}," np.concatenate([",[34,115031,31474],{"class":63},[34,115033,115034],{"class":40},".data.qpos.copy(), ",[34,115036,31474],{"class":63},[34,115038,115039],{"class":40},".data.qvel.copy(), tip, target])\n",[34,115041,115042,115044],{"class":36,"line":10503},[34,115043,15405],{"class":87},[34,115045,115046],{"class":40}," obs.astype(np.float32)\n",[34,115048,115049],{"class":36,"line":10517},[34,115050,3053],{"emptyLinePlaceholder":726},[34,115052,115053,115055,115058,115060,115062],{"class":36,"line":10523},[34,115054,31452],{"class":87},[34,115056,115057],{"class":149}," _get_reward",[34,115059,114726],{"class":40},[34,115061,840],{"class":63},[34,115063,4392],{"class":40},[34,115065,115066,115068,115070,115072,115074,115076],{"class":36,"line":10550},[34,115067,112767],{"class":40},[34,115069,153],{"class":87},[34,115071,39524],{"class":63},[34,115073,115000],{"class":40},[34,115075,31474],{"class":63},[34,115077,115078],{"class":40},".tip_site_id]\n",[34,115080,115081,115083,115085,115087,115089,115091],{"class":36,"line":10559},[34,115082,112780],{"class":40},[34,115084,153],{"class":87},[34,115086,39524],{"class":63},[34,115088,115000],{"class":40},[34,115090,31474],{"class":63},[34,115092,115093],{"class":40},".target_site_id]\n",[34,115095,115096,115099,115101,115103,115105],{"class":36,"line":10565},[34,115097,115098],{"class":40},"        dist ",[34,115100,153],{"class":87},[34,115102,112231],{"class":40},[34,115104,1327],{"class":87},[34,115106,112236],{"class":40},[34,115108,115109,115112,115114,115116,115118,115121,115123],{"class":36,"line":10573},[34,115110,115111],{"class":40},"        control_cost ",[34,115113,153],{"class":87},[34,115115,112667],{"class":63},[34,115117,7171],{"class":87},[34,115119,115120],{"class":40}," np.sum(np.square(",[34,115122,31474],{"class":63},[34,115124,115125],{"class":40},".data.ctrl))\n",[34,115127,115128,115130,115132,115134,115136,115138,115140],{"class":36,"line":10578},[34,115129,15405],{"class":87},[34,115131,110427],{"class":63},[34,115133,801],{"class":40},[34,115135,1327],{"class":87},[34,115137,112226],{"class":40},[34,115139,1327],{"class":87},[34,115141,112689],{"class":40},[34,115143,115144],{"class":36,"line":17256},[34,115145,3053],{"emptyLinePlaceholder":726},[34,115147,115148,115150,115153,115156,115158,115161,115163,115165,115167,115169,115171,115174,115177,115179,115181,115183,115185],{"class":36,"line":17262},[34,115149,31452],{"class":87},[34,115151,115152],{"class":149}," reset",[34,115154,115155],{"class":40},"(self, ",[34,115157,1250],{"class":87},[34,115159,115160],{"class":40},", seed: ",[34,115162,804],{"class":63},[34,115164,25762],{"class":87},[34,115166,39584],{"class":63},[34,115168,14217],{"class":87},[34,115170,39584],{"class":63},[34,115172,115173],{"class":40},", options: ",[34,115175,115176],{"class":63},"dict",[34,115178,25762],{"class":87},[34,115180,39584],{"class":63},[34,115182,14217],{"class":87},[34,115184,39584],{"class":63},[34,115186,31437],{"class":40},[34,115188,115189,115191,115194,115197,115199],{"class":36,"line":17285},[34,115190,31468],{"class":63},[34,115192,115193],{"class":40},"().reset(",[34,115195,115196],{"class":5869},"seed",[34,115198,153],{"class":87},[34,115200,115201],{"class":40},"seed)\n",[34,115203,115204,115207,115209,115212,115214],{"class":36,"line":17291},[34,115205,115206],{"class":40},"        mujoco.mj_resetData(",[34,115208,31474],{"class":63},[34,115210,115211],{"class":40},".model, ",[34,115213,31474],{"class":63},[34,115215,115216],{"class":40},".data)\n",[34,115218,115219],{"class":36,"line":17314},[34,115220,3053],{"emptyLinePlaceholder":726},[34,115222,115223,115225,115228,115230,115232,115235,115237,115239,115241,115243,115245,115247,115249,115251,115253,115255,115257],{"class":36,"line":17328},[34,115224,31496],{"class":63},[34,115226,115227],{"class":40},".data.qpos[:] ",[34,115229,153],{"class":87},[34,115231,39524],{"class":63},[34,115233,115234],{"class":40},".np_random.uniform(",[34,115236,114392],{"class":5869},[34,115238,114395],{"class":87},[34,115240,86840],{"class":63},[34,115242,13088],{"class":40},[34,115244,114402],{"class":5869},[34,115246,153],{"class":87},[34,115248,86840],{"class":63},[34,115250,13088],{"class":40},[34,115252,32147],{"class":5869},[34,115254,153],{"class":87},[34,115256,31474],{"class":63},[34,115258,115259],{"class":40},".model.nq)\n",[34,115261,115262,115264,115267,115269],{"class":36,"line":17348},[34,115263,31496],{"class":63},[34,115265,115266],{"class":40},".data.qvel[:] ",[34,115268,153],{"class":87},[34,115270,105391],{"class":63},[34,115272,115273,115276,115278,115280,115282],{"class":36,"line":17354},[34,115274,115275],{"class":40},"        mujoco.mj_forward(",[34,115277,31474],{"class":63},[34,115279,115211],{"class":40},[34,115281,31474],{"class":63},[34,115283,115216],{"class":40},[34,115285,115286],{"class":36,"line":17365},[34,115287,3053],{"emptyLinePlaceholder":726},[34,115289,115290,115292,115294,115296],{"class":36,"line":17388},[34,115291,31496],{"class":63},[34,115293,114336],{"class":40},[34,115295,153],{"class":87},[34,115297,47984],{"class":63},[34,115299,115300,115302,115304],{"class":36,"line":17410},[34,115301,15405],{"class":87},[34,115303,39524],{"class":63},[34,115305,115306],{"class":40},"._get_obs(), {}\n",[34,115308,115309],{"class":36,"line":17415},[34,115310,3053],{"emptyLinePlaceholder":726},[34,115312,115313,115315,115318],{"class":36,"line":17421},[34,115314,31452],{"class":87},[34,115316,115317],{"class":149}," step",[34,115319,115320],{"class":40},"(self, action):\n",[34,115322,115323,115325,115327,115330,115332,115334],{"class":36,"line":17435},[34,115324,110852],{"class":40},[34,115326,153],{"class":87},[34,115328,115329],{"class":40}," np.asarray(action, ",[34,115331,94130],{"class":5869},[34,115333,153],{"class":87},[34,115335,114426],{"class":40},[34,115337,115338,115340,115342,115344,115346,115349,115351],{"class":36,"line":17448},[34,115339,110852],{"class":40},[34,115341,153],{"class":87},[34,115343,108077],{"class":40},[34,115345,31474],{"class":63},[34,115347,115348],{"class":40},".action_space.low, ",[34,115350,31474],{"class":63},[34,115352,115353],{"class":40},".action_space.high)\n",[34,115355,115356],{"class":36,"line":17453},[34,115357,3053],{"emptyLinePlaceholder":726},[34,115359,115360,115362,115365,115367],{"class":36,"line":17467},[34,115361,31496],{"class":63},[34,115363,115364],{"class":40},".data.ctrl[:] ",[34,115366,153],{"class":87},[34,115368,108100],{"class":40},[34,115370,115371,115373,115375,115377,115379,115381,115383],{"class":36,"line":17472},[34,115372,4056],{"class":87},[34,115374,102131],{"class":40},[34,115376,26695],{"class":87},[34,115378,33094],{"class":63},[34,115380,801],{"class":40},[34,115382,31474],{"class":63},[34,115384,115385],{"class":40},".frame_skip):\n",[34,115387,115388,115391,115393,115395,115397],{"class":36,"line":17478},[34,115389,115390],{"class":40},"            mujoco.mj_step(",[34,115392,31474],{"class":63},[34,115394,115211],{"class":40},[34,115396,31474],{"class":63},[34,115398,115216],{"class":40},[34,115400,115401],{"class":36,"line":17483},[34,115402,3053],{"emptyLinePlaceholder":726},[34,115404,115405,115407,115409,115411],{"class":36,"line":17497},[34,115406,31496],{"class":63},[34,115408,114336],{"class":40},[34,115410,10130],{"class":87},[34,115412,56342],{"class":63},[34,115414,115415],{"class":36,"line":17502},[34,115416,3053],{"emptyLinePlaceholder":726},[34,115418,115419,115421,115423,115425],{"class":36,"line":17507},[34,115420,110812],{"class":40},[34,115422,153],{"class":87},[34,115424,39524],{"class":63},[34,115426,115427],{"class":40},"._get_obs()\n",[34,115429,115430,115432,115434,115436],{"class":36,"line":17521},[34,115431,110917],{"class":40},[34,115433,153],{"class":87},[34,115435,39524],{"class":63},[34,115437,115438],{"class":40},"._get_reward()\n",[34,115440,115441],{"class":36,"line":17533},[34,115442,3053],{"emptyLinePlaceholder":726},[34,115444,115445,115447,115449,115451,115453,115455],{"class":36,"line":17538},[34,115446,112767],{"class":40},[34,115448,153],{"class":87},[34,115450,39524],{"class":63},[34,115452,115000],{"class":40},[34,115454,31474],{"class":63},[34,115456,115078],{"class":40},[34,115458,115459,115461,115463,115465,115467,115469],{"class":36,"line":17551},[34,115460,112780],{"class":40},[34,115462,153],{"class":87},[34,115464,39524],{"class":63},[34,115466,115000],{"class":40},[34,115468,31474],{"class":63},[34,115470,115093],{"class":40},[34,115472,115473,115475,115477,115479,115482,115484],{"class":36,"line":17556},[34,115474,115098],{"class":40},[34,115476,153],{"class":87},[34,115478,110427],{"class":63},[34,115480,115481],{"class":40},"(np.linalg.norm(tip ",[34,115483,1327],{"class":87},[34,115485,115486],{"class":40}," target))\n",[34,115488,115489],{"class":36,"line":17561},[34,115490,3053],{"emptyLinePlaceholder":726},[34,115492,115493,115496,115498,115500,115502],{"class":36,"line":17566},[34,115494,115495],{"class":40},"        terminated ",[34,115497,153],{"class":87},[34,115499,114319],{"class":40},[34,115501,41],{"class":87},[34,115503,114324],{"class":63},[34,115505,115506,115509,115511,115513,115515,115517,115519],{"class":36,"line":17579},[34,115507,115508],{"class":40},"        truncated ",[34,115510,153],{"class":87},[34,115512,39524],{"class":63},[34,115514,114336],{"class":40},[34,115516,2364],{"class":87},[34,115518,39524],{"class":63},[34,115520,114343],{"class":40},[34,115522,115523,115526,115528,115530,115533],{"class":36,"line":17584},[34,115524,115525],{"class":40},"        info ",[34,115527,153],{"class":87},[34,115529,5101],{"class":40},[34,115531,115532],{"class":156},"\"distance\"",[34,115534,115535],{"class":40},": dist}\n",[34,115537,115538,115540],{"class":36,"line":33284},[34,115539,15405],{"class":87},[34,115541,115542],{"class":40}," obs, reward, terminated, truncated, info\n",[34,115544,115545],{"class":36,"line":33290},[34,115546,3053],{"emptyLinePlaceholder":726},[34,115548,115549],{"class":36,"line":33296},[34,115550,3053],{"emptyLinePlaceholder":726},[34,115552,115553,115555,115557,115559,115561],{"class":36,"line":33302},[34,115554,32598],{"class":87},[34,115556,2626],{"class":149},[34,115558,102028],{"class":40},[34,115560,96316],{"class":63},[34,115562,4392],{"class":40},[34,115564,115565,115568,115570],{"class":36,"line":33308},[34,115566,115567],{"class":40},"    env ",[34,115569,153],{"class":87},[34,115571,115572],{"class":40}," ReacherEnv()\n",[34,115574,115575,115578,115580,115583,115585,115587,115589],{"class":36,"line":33319},[34,115576,115577],{"class":40},"    obs, info ",[34,115579,153],{"class":87},[34,115581,115582],{"class":40}," env.reset(",[34,115584,115196],{"class":5869},[34,115586,153],{"class":87},[34,115588,987],{"class":63},[34,115590,807],{"class":40},[34,115592,115593,115595,115597,115600],{"class":36,"line":33325},[34,115594,31950],{"class":63},[34,115596,801],{"class":40},[34,115598,115599],{"class":156},"\"initial obs shape:\"",[34,115601,115602],{"class":40},", obs.shape)\n",[34,115604,115605,115607,115609,115612],{"class":36,"line":33345},[34,115606,31950],{"class":63},[34,115608,801],{"class":40},[34,115610,115611],{"class":156},"\"initial info:\"",[34,115613,115614],{"class":40},", info)\n",[34,115616,115617],{"class":36,"line":33351},[34,115618,3053],{"emptyLinePlaceholder":726},[34,115620,115621,115623,115625],{"class":36,"line":33362},[34,115622,110783],{"class":40},[34,115624,153],{"class":87},[34,115626,105391],{"class":63},[34,115628,115629,115631,115633,115635,115637,115639,115641],{"class":36,"line":33368},[34,115630,3854],{"class":87},[34,115632,32267],{"class":40},[34,115634,26695],{"class":87},[34,115636,33094],{"class":63},[34,115638,801],{"class":40},[34,115640,1495],{"class":63},[34,115642,31437],{"class":40},[34,115644,115645,115647,115649],{"class":36,"line":33374},[34,115646,110852],{"class":40},[34,115648,153],{"class":87},[34,115650,115651],{"class":40}," env.action_space.sample()\n",[34,115653,115654,115657,115659],{"class":36,"line":33380},[34,115655,115656],{"class":40},"        obs, reward, terminated, truncated, info ",[34,115658,153],{"class":87},[34,115660,114045],{"class":40},[34,115662,115663,115665,115667],{"class":36,"line":33386},[34,115664,110927],{"class":40},[34,115666,10130],{"class":87},[34,115668,110932],{"class":40},[34,115670,115671,115673,115675,115677,115679,115682,115684,115686,115689,115691,115693,115696,115698,115700,115703,115705,115707,115709],{"class":36,"line":33392},[34,115672,33102],{"class":63},[34,115674,801],{"class":40},[34,115676,110961],{"class":156},[34,115678,110964],{"class":40},[34,115680,115681],{"class":156},"\"reward:\"",[34,115683,13088],{"class":40},[34,115685,32669],{"class":63},[34,115687,115688],{"class":40},"(reward, ",[34,115690,869],{"class":63},[34,115692,110975],{"class":40},[34,115694,115695],{"class":156},"\"distance:\"",[34,115697,13088],{"class":40},[34,115699,32669],{"class":63},[34,115701,115702],{"class":40},"(info[",[34,115704,115532],{"class":156},[34,115706,112832],{"class":40},[34,115708,869],{"class":63},[34,115710,31148],{"class":40},[34,115712,115713,115715,115718,115721],{"class":36,"line":33398},[34,115714,3150],{"class":87},[34,115716,115717],{"class":40}," terminated ",[34,115719,115720],{"class":87},"or",[34,115722,115723],{"class":40}," truncated:\n",[34,115725,115726],{"class":36,"line":33404},[34,115727,115728],{"class":87},"            break\n",[34,115730,115731],{"class":36,"line":33424},[34,115732,3053],{"emptyLinePlaceholder":726},[34,115734,115735,115737,115739,115741,115743,115745,115747,115749],{"class":36,"line":33430},[34,115736,31950],{"class":63},[34,115738,801],{"class":40},[34,115740,111006],{"class":156},[34,115742,13088],{"class":40},[34,115744,32669],{"class":63},[34,115746,111013],{"class":40},[34,115748,869],{"class":63},[34,115750,31148],{"class":40},[34,115752,115753],{"class":36,"line":33446},[34,115754,3053],{"emptyLinePlaceholder":726},[34,115756,115757],{"class":36,"line":33452},[34,115758,3053],{"emptyLinePlaceholder":726},[34,115760,115761,115763,115765,115767,115769],{"class":36,"line":33466},[34,115762,2191],{"class":87},[34,115764,31871],{"class":63},[34,115766,102189],{"class":87},[34,115768,102192],{"class":156},[34,115770,4392],{"class":40},[34,115772,115773],{"class":36,"line":33472},[34,115774,102199],{"class":40},[108,115776,104200],{},[24,115778,115780],{"className":24474,"code":115779,"language":24476,"meta":29,"style":29},"touch ch8_gym_env.py\n",[31,115781,115782],{"__ignoreMap":29},[34,115783,115784,115786],{"class":36,"line":37},[34,115785,101913],{"class":149},[34,115787,115788],{"class":156}," ch8_gym_env.py\n",[108,115790,111074],{},[24,115792,115794],{"className":24474,"code":115793,"language":24476,"meta":29,"style":29},"python ch8_gym_env.py\n",[31,115795,115796],{"__ignoreMap":29},[34,115797,115798,115800],{"class":36,"line":37},[34,115799,31031],{"class":149},[34,115801,115788],{"class":156},[19,115803,102202],{"id":102202},[108,115805,115806],{},"继承 Gymnasium 环境：",[24,115808,115810],{"className":31029,"code":115809,"language":31031,"meta":29,"style":29},"class ReacherEnv(gym.Env):\n",[31,115811,115812],{"__ignoreMap":29},[34,115813,115814,115816,115818,115820,115822,115824,115826],{"class":36,"line":37},[34,115815,15347],{"class":87},[34,115817,114687],{"class":149},[34,115819,801],{"class":40},[34,115821,114170],{"class":149},[34,115823,1353],{"class":40},[34,115825,114696],{"class":149},[34,115827,31437],{"class":40},[108,115829,115830],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[108,115832,115833],{},"初始化模型：",[24,115835,115837],{"className":31029,"code":115836,"language":31031,"meta":29,"style":29},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[31,115838,115839,115853],{"__ignoreMap":29},[34,115840,115841,115843,115845,115847,115849,115851],{"class":36,"line":37},[34,115842,31474],{"class":63},[34,115844,114747],{"class":40},[34,115846,153],{"class":87},[34,115848,102042],{"class":40},[34,115850,101944],{"class":63},[34,115852,807],{"class":40},[34,115854,115855,115857,115859,115861,115863,115865],{"class":36,"line":51},[34,115856,31474],{"class":63},[34,115858,114762],{"class":40},[34,115860,153],{"class":87},[34,115862,114767],{"class":40},[34,115864,31474],{"class":63},[34,115866,114772],{"class":40},[108,115868,115869,115870,115872],{},"这和前面章节一样，只是现在放到了类的 ",[31,115871,31480],{}," 里。",[108,115874,115875],{},"缓存 site ID：",[24,115877,115879],{"className":31029,"code":115878,"language":31031,"meta":29,"style":29},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[31,115880,115881,115895],{"__ignoreMap":29},[34,115882,115883,115885,115887,115889,115891,115893],{"class":36,"line":37},[34,115884,31474],{"class":63},[34,115886,114783],{"class":40},[34,115888,153],{"class":87},[34,115890,114788],{"class":40},[34,115892,90184],{"class":63},[34,115894,807],{"class":40},[34,115896,115897,115899,115901,115903,115905,115907],{"class":36,"line":51},[34,115898,31474],{"class":63},[34,115900,114804],{"class":40},[34,115902,153],{"class":87},[34,115904,114788],{"class":40},[34,115906,90184],{"class":63},[34,115908,807],{"class":40},[108,115910,115911],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[108,115913,115914],{},"reset：",[24,115916,115918],{"className":31029,"code":115917,"language":31031,"meta":29,"style":29},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[31,115919,115920],{"__ignoreMap":29},[34,115921,115922,115924,115926,115928,115930,115932,115934,115936,115938,115940,115942,115944,115946,115948,115950,115952,115954],{"class":36,"line":37},[34,115923,32598],{"class":87},[34,115925,115152],{"class":149},[34,115927,115155],{"class":40},[34,115929,1250],{"class":87},[34,115931,115160],{"class":40},[34,115933,804],{"class":63},[34,115935,25762],{"class":87},[34,115937,39584],{"class":63},[34,115939,14217],{"class":87},[34,115941,39584],{"class":63},[34,115943,115173],{"class":40},[34,115945,115176],{"class":63},[34,115947,25762],{"class":87},[34,115949,39584],{"class":63},[34,115951,14217],{"class":87},[34,115953,39584],{"class":63},[34,115955,31437],{"class":40},[108,115957,115958,115960],{},[31,115959,70691],{}," 做四件事：",[752,115962,115963,115966,115969,115972],{},[755,115964,115965],{},"设置随机种子。",[755,115967,115968],{},"重置 MuJoCo data。",[755,115970,115971],{},"随机初始化关节角。",[755,115973,115974],{},"返回初始观测和 info。",[108,115976,115977],{},"step：",[24,115979,115981],{"className":31029,"code":115980,"language":31031,"meta":29,"style":29},"def step(self, action):\n",[31,115982,115983],{"__ignoreMap":29},[34,115984,115985,115987,115989],{"class":36,"line":37},[34,115986,32598],{"class":87},[34,115988,115317],{"class":149},[34,115990,115320],{"class":40},[108,115992,115993,115995],{},[31,115994,107764],{}," 做六件事：",[752,115997,115998,116001,116007,116010,116013,116016],{},[755,115999,116000],{},"检查并裁剪 action。",[755,116002,116003,116004,29036],{},"写入 ",[31,116005,116006],{},"self.data.ctrl",[755,116008,116009],{},"连续推进若干个 MuJoCo 物理步。",[755,116011,116012],{},"计算新观测。",[755,116014,116015],{},"计算奖励和结束条件。",[755,116017,116018],{},"返回 Gymnasium 标准五元组。",[19,116020,102338],{"id":102338},[24,116022,116024],{"className":31029,"code":116023,"language":31031,"meta":29,"style":29},"import gymnasium as gym\n",[31,116025,116026],{"__ignoreMap":29},[34,116027,116028,116030,116032,116034],{"class":36,"line":37},[34,116029,31043],{"class":87},[34,116031,114525],{"class":40},[34,116033,32034],{"class":87},[34,116035,114530],{"class":40},[108,116037,116038,116039,116041,116042,116045],{},"导入 Gymnasium，并起别名 ",[31,116040,114170],{},"。后面写 ",[31,116043,116044],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[24,116047,116049],{"className":31029,"code":116048,"language":31031,"meta":29,"style":29},"from gymnasium import spaces\n",[31,116050,116051],{"__ignoreMap":29},[34,116052,116053,116055,116057,116059],{"class":36,"line":37},[34,116054,31388],{"class":87},[34,116056,114525],{"class":40},[34,116058,31043],{"class":87},[34,116060,114557],{"class":40},[108,116062,116063,116064,116067],{},"导入空间定义工具。",[31,116065,116066],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[24,116069,116070],{"className":31029,"code":115809,"language":31031,"meta":29,"style":29},[31,116071,116072],{"__ignoreMap":29},[34,116073,116074,116076,116078,116080,116082,116084,116086],{"class":36,"line":37},[34,116075,15347],{"class":87},[34,116077,114687],{"class":149},[34,116079,801],{"class":40},[34,116081,114170],{"class":149},[34,116083,1353],{"class":40},[34,116085,114696],{"class":149},[34,116087,31437],{"class":40},[108,116089,116090,116091,116094,116095,116097,116098,101648,116100,116102],{},"定义一个类，名字叫 ",[31,116092,116093],{},"ReacherEnv","。括号里的 ",[31,116096,116044],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[31,116099,70691],{},[31,116101,107764],{}," 这两个核心方法。",[24,116104,116106],{"className":31029,"code":116105,"language":31031,"meta":29,"style":29},"metadata = {\"render_modes\": []}\n",[31,116107,116108],{"__ignoreMap":29},[34,116109,116110,116113,116115,116117,116119],{"class":36,"line":37},[34,116111,116112],{"class":40},"metadata ",[34,116114,153],{"class":87},[34,116116,5101],{"class":40},[34,116118,114710],{"class":156},[34,116120,114713],{"class":40},[108,116122,116123],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[24,116125,116127],{"className":31029,"code":116126,"language":31031,"meta":29,"style":29},"def __init__(self) -> None:\n",[31,116128,116129],{"__ignoreMap":29},[34,116130,116131,116133,116135,116137,116139],{"class":36,"line":37},[34,116132,32598],{"class":87},[34,116134,31455],{"class":63},[34,116136,114726],{"class":40},[34,116138,96316],{"class":63},[34,116140,4392],{"class":40},[108,116142,116143,116145,116146,29036],{},[31,116144,31480],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[31,116147,116148],{},"env = ReacherEnv()",[24,116150,116152],{"className":31029,"code":116151,"language":31031,"meta":29,"style":29},"super().__init__()\n",[31,116153,116154],{"__ignoreMap":29},[34,116155,116156,116159,116161,116163],{"class":36,"line":37},[34,116157,116158],{"class":63},"super",[34,116160,17913],{"class":40},[34,116162,31480],{"class":63},[34,116164,2629],{"class":40},[108,116166,116167,116168,116170],{},"调用父类 ",[31,116169,116044],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[24,116172,116173],{"className":31029,"code":115836,"language":31031,"meta":29,"style":29},[31,116174,116175,116189],{"__ignoreMap":29},[34,116176,116177,116179,116181,116183,116185,116187],{"class":36,"line":37},[34,116178,31474],{"class":63},[34,116180,114747],{"class":40},[34,116182,153],{"class":87},[34,116184,102042],{"class":40},[34,116186,101944],{"class":63},[34,116188,807],{"class":40},[34,116190,116191,116193,116195,116197,116199,116201],{"class":36,"line":51},[34,116192,31474],{"class":63},[34,116194,114762],{"class":40},[34,116196,153],{"class":87},[34,116198,114767],{"class":40},[34,116200,31474],{"class":63},[34,116202,114772],{"class":40},[108,116204,116205,116206,116208,116209,101648,116212,116215],{},"把 MuJoCo 模型和状态保存到 ",[31,116207,31474],{}," 上。",[31,116210,116211],{},"self.model",[31,116213,116214],{},"self.data"," 表示这个环境对象自己的模型和状态。",[24,116217,116218],{"className":31029,"code":115878,"language":31031,"meta":29,"style":29},[31,116219,116220,116234],{"__ignoreMap":29},[34,116221,116222,116224,116226,116228,116230,116232],{"class":36,"line":37},[34,116223,31474],{"class":63},[34,116225,114783],{"class":40},[34,116227,153],{"class":87},[34,116229,114788],{"class":40},[34,116231,90184],{"class":63},[34,116233,807],{"class":40},[34,116235,116236,116238,116240,116242,116244,116246],{"class":36,"line":51},[34,116237,31474],{"class":63},[34,116239,114804],{"class":40},[34,116241,153],{"class":87},[34,116243,114788],{"class":40},[34,116245,90184],{"class":63},[34,116247,807],{"class":40},[108,116249,116250,116251,101648,116254,116257],{},"提前查好 tip 和 target 的 site ID。这样 ",[31,116252,116253],{},"_get_obs",[31,116255,116256],{},"_get_reward"," 里就不用每次按名字查找。",[24,116259,116261],{"className":31029,"code":116260,"language":31031,"meta":29,"style":29},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[31,116262,116263,116273,116283],{"__ignoreMap":29},[34,116264,116265,116267,116269,116271],{"class":36,"line":37},[34,116266,31474],{"class":63},[34,116268,114497],{"class":40},[34,116270,153],{"class":87},[34,116272,55072],{"class":63},[34,116274,116275,116277,116279,116281],{"class":36,"line":51},[34,116276,31474],{"class":63},[34,116278,114876],{"class":40},[34,116280,153],{"class":87},[34,116282,114881],{"class":63},[34,116284,116285,116287,116289,116291],{"class":36,"line":60},[34,116286,31474],{"class":63},[34,116288,114336],{"class":40},[34,116290,153],{"class":87},[34,116292,47984],{"class":63},[108,116294,116295,116298,116299,116302,116303,116306],{},[31,116296,116297],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[31,116300,116301],{},"max_steps"," 是一个 episode 最多运行多少步。",[31,116304,116305],{},"steps"," 记录当前 episode 已经走了多少步。",[24,116308,116309],{"className":31029,"code":114375,"language":31031,"meta":29,"style":29},[31,116310,116311],{"__ignoreMap":29},[34,116312,116313,116315,116317,116319,116321,116323,116325,116327,116329,116331,116333,116335,116337,116339,116341,116343,116345,116347,116349,116351],{"class":36,"line":37},[34,116314,31474],{"class":63},[34,116316,114384],{"class":40},[34,116318,153],{"class":87},[34,116320,114389],{"class":40},[34,116322,114392],{"class":5869},[34,116324,114395],{"class":87},[34,116326,103033],{"class":63},[34,116328,13088],{"class":40},[34,116330,114402],{"class":5869},[34,116332,153],{"class":87},[34,116334,103033],{"class":63},[34,116336,13088],{"class":40},[34,116338,96593],{"class":5869},[34,116340,153],{"class":87},[34,116342,801],{"class":40},[34,116344,875],{"class":63},[34,116346,114419],{"class":40},[34,116348,94130],{"class":5869},[34,116350,153],{"class":87},[34,116352,114426],{"class":40},[108,116354,116355,116356,116359,116360,101648,116363,116366],{},"定义动作空间。",[31,116357,116358],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[31,116361,116362],{},"low=-1.0",[31,116364,116365],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[24,116368,116369],{"className":31029,"code":114436,"language":31031,"meta":29,"style":29},[31,116370,116371],{"__ignoreMap":29},[34,116372,116373,116375,116377,116379,116381,116383,116385,116387,116389,116391,116393,116395,116397,116399,116401,116403,116405,116407],{"class":36,"line":37},[34,116374,31474],{"class":63},[34,116376,114445],{"class":40},[34,116378,153],{"class":87},[34,116380,114389],{"class":40},[34,116382,114392],{"class":5869},[34,116384,114395],{"class":87},[34,116386,114456],{"class":40},[34,116388,114402],{"class":5869},[34,116390,153],{"class":87},[34,116392,114456],{"class":40},[34,116394,96593],{"class":5869},[34,116396,153],{"class":87},[34,116398,801],{"class":40},[34,116400,1241],{"class":63},[34,116402,114419],{"class":40},[34,116404,94130],{"class":5869},[34,116406,153],{"class":87},[34,116408,114426],{"class":40},[108,116410,116411,116412,116415,116416,116419],{},"定义观测空间。",[31,116413,116414],{},"shape=(10,)"," 表示观测是 10 个数。",[31,116417,116418],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[24,116421,116423],{"className":31029,"code":116422,"language":31031,"meta":29,"style":29},"def _get_obs(self) -> np.ndarray:\n",[31,116424,116425],{"__ignoreMap":29},[34,116426,116427,116429,116431],{"class":36,"line":37},[34,116428,32598],{"class":87},[34,116430,114986],{"class":149},[34,116432,114989],{"class":40},[108,116434,116435,116436,116438],{},"定义内部函数，用来生成观测。函数名前面的 ",[31,116437,1785],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[24,116440,116442],{"className":31029,"code":116441,"language":31031,"meta":29,"style":29},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[31,116443,116444,116458],{"__ignoreMap":29},[34,116445,116446,116448,116450,116452,116454,116456],{"class":36,"line":37},[34,116447,112198],{"class":40},[34,116449,153],{"class":87},[34,116451,39524],{"class":63},[34,116453,115000],{"class":40},[34,116455,31474],{"class":63},[34,116457,115005],{"class":40},[34,116459,116460,116462,116464,116466,116468,116470],{"class":36,"line":51},[34,116461,112208],{"class":40},[34,116463,153],{"class":87},[34,116465,39524],{"class":63},[34,116467,115000],{"class":40},[34,116469,31474],{"class":63},[34,116471,115020],{"class":40},[108,116473,116474],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[24,116476,116478],{"className":31029,"code":116477,"language":31031,"meta":29,"style":29},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[31,116479,116480,116496],{"__ignoreMap":29},[34,116481,116482,116484,116486,116488,116490,116492,116494],{"class":36,"line":37},[34,116483,111484],{"class":40},[34,116485,153],{"class":87},[34,116487,115029],{"class":40},[34,116489,31474],{"class":63},[34,116491,115034],{"class":40},[34,116493,31474],{"class":63},[34,116495,115039],{"class":40},[34,116497,116498,116500],{"class":36,"line":51},[34,116499,17698],{"class":87},[34,116501,115046],{"class":40},[108,116503,116504,116505,116508,116509,116511],{},"拼接观测，并转换成 ",[31,116506,116507],{},"float32","。很多强化学习库默认使用 ",[31,116510,116507],{},"，所以这里主动转换。",[24,116513,116514],{"className":31029,"code":115917,"language":31031,"meta":29,"style":29},[31,116515,116516],{"__ignoreMap":29},[34,116517,116518,116520,116522,116524,116526,116528,116530,116532,116534,116536,116538,116540,116542,116544,116546,116548,116550],{"class":36,"line":37},[34,116519,32598],{"class":87},[34,116521,115152],{"class":149},[34,116523,115155],{"class":40},[34,116525,1250],{"class":87},[34,116527,115160],{"class":40},[34,116529,804],{"class":63},[34,116531,25762],{"class":87},[34,116533,39584],{"class":63},[34,116535,14217],{"class":87},[34,116537,39584],{"class":63},[34,116539,115173],{"class":40},[34,116541,115176],{"class":63},[34,116543,25762],{"class":87},[34,116545,39584],{"class":63},[34,116547,14217],{"class":87},[34,116549,39584],{"class":63},[34,116551,31437],{"class":40},[108,116553,116554,116555,116557,116558,116561],{},"定义 reset。",[31,116556,115196],{}," 用来控制随机数，保证实验可以复现。",[31,116559,116560],{},"options"," 用来接收额外配置，本章暂时不用。",[24,116563,116565],{"className":31029,"code":116564,"language":31031,"meta":29,"style":29},"super().reset(seed=seed)\n",[31,116566,116567],{"__ignoreMap":29},[34,116568,116569,116571,116573,116575,116577],{"class":36,"line":37},[34,116570,116158],{"class":63},[34,116572,115193],{"class":40},[34,116574,115196],{"class":5869},[34,116576,153],{"class":87},[34,116578,115201],{"class":40},[108,116580,116581,116582,116585],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[31,116583,116584],{},"self.np_random"," 生成可复现的随机数。",[24,116587,116589],{"className":31029,"code":116588,"language":31031,"meta":29,"style":29},"mujoco.mj_resetData(self.model, self.data)\n",[31,116590,116591],{"__ignoreMap":29},[34,116592,116593,116596,116598,116600,116602],{"class":36,"line":37},[34,116594,116595],{"class":40},"mujoco.mj_resetData(",[34,116597,31474],{"class":63},[34,116599,115211],{"class":40},[34,116601,31474],{"class":63},[34,116603,115216],{"class":40},[108,116605,116606],{},"把 MuJoCo 状态重置到默认状态。",[24,116608,116610],{"className":31029,"code":116609,"language":31031,"meta":29,"style":29},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[31,116611,116612],{"__ignoreMap":29},[34,116613,116614,116616,116618,116620,116622,116624,116626,116628,116630,116632,116634,116636,116638,116640,116642,116644,116646],{"class":36,"line":37},[34,116615,31474],{"class":63},[34,116617,115227],{"class":40},[34,116619,153],{"class":87},[34,116621,39524],{"class":63},[34,116623,115234],{"class":40},[34,116625,114392],{"class":5869},[34,116627,114395],{"class":87},[34,116629,86840],{"class":63},[34,116631,13088],{"class":40},[34,116633,114402],{"class":5869},[34,116635,153],{"class":87},[34,116637,86840],{"class":63},[34,116639,13088],{"class":40},[34,116641,32147],{"class":5869},[34,116643,153],{"class":87},[34,116645,31474],{"class":63},[34,116647,115259],{"class":40},[108,116649,115971,116650,116653,116654,116657,116658,116660],{},[31,116651,116652],{},"[:]"," 表示修改整个数组。",[31,116655,116656],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[31,116659,102780],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[24,116662,116664],{"className":31029,"code":116663,"language":31031,"meta":29,"style":29},"self.data.qvel[:] = 0.0\n",[31,116665,116666],{"__ignoreMap":29},[34,116667,116668,116670,116672,116674],{"class":36,"line":37},[34,116669,31474],{"class":63},[34,116671,115266],{"class":40},[34,116673,153],{"class":87},[34,116675,105391],{"class":63},[108,116677,116678],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[24,116680,116682],{"className":31029,"code":116681,"language":31031,"meta":29,"style":29},"self.steps = 0\nreturn self._get_obs(), {}\n",[31,116683,116684,116694],{"__ignoreMap":29},[34,116685,116686,116688,116690,116692],{"class":36,"line":37},[34,116687,31474],{"class":63},[34,116689,114336],{"class":40},[34,116691,153],{"class":87},[34,116693,47984],{"class":63},[34,116695,116696,116698,116700],{"class":36,"line":51},[34,116697,17698],{"class":87},[34,116699,39524],{"class":63},[34,116701,115306],{"class":40},[108,116703,116704],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[24,116706,116707],{"className":31029,"code":115980,"language":31031,"meta":29,"style":29},[31,116708,116709],{"__ignoreMap":29},[34,116710,116711,116713,116715],{"class":36,"line":37},[34,116712,32598],{"class":87},[34,116714,115317],{"class":149},[34,116716,115320],{"class":40},[108,116718,116719],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[24,116721,116723],{"className":31029,"code":116722,"language":31031,"meta":29,"style":29},"action = np.asarray(action, dtype=np.float32)\n",[31,116724,116725],{"__ignoreMap":29},[34,116726,116727,116729,116731,116733,116735,116737],{"class":36,"line":37},[34,116728,108072],{"class":40},[34,116730,153],{"class":87},[34,116732,115329],{"class":40},[34,116734,94130],{"class":5869},[34,116736,153],{"class":87},[34,116738,114426],{"class":40},[108,116740,116741,116742,29036],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[31,116743,116507],{},[24,116745,116747],{"className":31029,"code":116746,"language":31031,"meta":29,"style":29},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[31,116748,116749],{"__ignoreMap":29},[34,116750,116751,116753,116755,116757,116759,116761,116763],{"class":36,"line":37},[34,116752,108072],{"class":40},[34,116754,153],{"class":87},[34,116756,108077],{"class":40},[34,116758,31474],{"class":63},[34,116760,115348],{"class":40},[34,116762,31474],{"class":63},[34,116764,115353],{"class":40},[108,116766,116767],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[24,116769,116771],{"className":31029,"code":116770,"language":31031,"meta":29,"style":29},"self.data.ctrl[:] = action\n",[31,116772,116773],{"__ignoreMap":29},[34,116774,116775,116777,116779,116781],{"class":36,"line":37},[34,116776,31474],{"class":63},[34,116778,115364],{"class":40},[34,116780,153],{"class":87},[34,116782,108100],{"class":40},[108,116784,116785],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[24,116787,116789],{"className":31029,"code":116788,"language":31031,"meta":29,"style":29},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[31,116790,116791,116807],{"__ignoreMap":29},[34,116792,116793,116795,116797,116799,116801,116803,116805],{"class":36,"line":37},[34,116794,3678],{"class":87},[34,116796,102131],{"class":40},[34,116798,26695],{"class":87},[34,116800,33094],{"class":63},[34,116802,801],{"class":40},[34,116804,31474],{"class":63},[34,116806,115385],{"class":40},[34,116808,116809,116812,116814,116816,116818],{"class":36,"line":51},[34,116810,116811],{"class":40},"    mujoco.mj_step(",[34,116813,31474],{"class":63},[34,116815,115211],{"class":40},[34,116817,31474],{"class":63},[34,116819,115216],{"class":40},[108,116821,116822,116823,116826,116827,116829,116830,29036],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[31,116824,116825],{},"frame_skip=5","，所以外部调用一次 ",[31,116828,114507],{},"，内部实际执行 5 次 ",[31,116831,101845],{},[24,116833,116835],{"className":31029,"code":116834,"language":31031,"meta":29,"style":29},"self.steps += 1\n",[31,116836,116837],{"__ignoreMap":29},[34,116838,116839,116841,116843,116845],{"class":36,"line":37},[34,116840,31474],{"class":63},[34,116842,114336],{"class":40},[34,116844,10130],{"class":87},[34,116846,56342],{"class":63},[108,116848,116849],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[24,116851,116853],{"className":31029,"code":116852,"language":31031,"meta":29,"style":29},"obs = self._get_obs()\nreward = self._get_reward()\n",[31,116854,116855,116865],{"__ignoreMap":29},[34,116856,116857,116859,116861,116863],{"class":36,"line":37},[34,116858,111484],{"class":40},[34,116860,153],{"class":87},[34,116862,39524],{"class":63},[34,116864,115427],{"class":40},[34,116866,116867,116869,116871,116873],{"class":36,"line":51},[34,116868,111635],{"class":40},[34,116870,153],{"class":87},[34,116872,39524],{"class":63},[34,116874,115438],{"class":40},[108,116876,116877],{},"计算新的观测和奖励。",[24,116879,116881],{"className":31029,"code":116880,"language":31031,"meta":29,"style":29},"dist = float(np.linalg.norm(tip - target))\n",[31,116882,116883],{"__ignoreMap":29},[34,116884,116885,116887,116889,116891,116893,116895],{"class":36,"line":37},[34,116886,112226],{"class":40},[34,116888,153],{"class":87},[34,116890,110427],{"class":63},[34,116892,115481],{"class":40},[34,116894,1327],{"class":87},[34,116896,115486],{"class":40},[108,116898,116899],{},"计算末端到目标的距离，并转换成 Python float。",[24,116901,116902],{"className":31029,"code":114307,"language":31031,"meta":29,"style":29},[31,116903,116904,116916],{"__ignoreMap":29},[34,116905,116906,116908,116910,116912,116914],{"class":36,"line":37},[34,116907,114314],{"class":40},[34,116909,153],{"class":87},[34,116911,114319],{"class":40},[34,116913,41],{"class":87},[34,116915,114324],{"class":63},[34,116917,116918,116920,116922,116924,116926,116928,116930],{"class":36,"line":51},[34,116919,114329],{"class":40},[34,116921,153],{"class":87},[34,116923,39524],{"class":63},[34,116925,114336],{"class":40},[34,116927,2364],{"class":87},[34,116929,39524],{"class":63},[34,116931,114343],{"class":40},[108,116933,116934],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[24,116936,116938],{"className":31029,"code":116937,"language":31031,"meta":29,"style":29},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[31,116939,116940,116953],{"__ignoreMap":29},[34,116941,116942,116945,116947,116949,116951],{"class":36,"line":37},[34,116943,116944],{"class":40},"info ",[34,116946,153],{"class":87},[34,116948,5101],{"class":40},[34,116950,115532],{"class":156},[34,116952,115535],{"class":40},[34,116954,116955,116957],{"class":36,"line":51},[34,116956,17698],{"class":87},[34,116958,115542],{"class":40},[108,116960,116961,116964],{},[31,116962,116963],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[24,116966,116968],{"className":31029,"code":116967,"language":31031,"meta":29,"style":29},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[31,116969,116970,116979],{"__ignoreMap":29},[34,116971,116972,116975,116977],{"class":36,"line":37},[34,116973,116974],{"class":40},"env ",[34,116976,153],{"class":87},[34,116978,115572],{"class":40},[34,116980,116981,116983,116985,116987,116989,116991,116993],{"class":36,"line":51},[34,116982,114030],{"class":40},[34,116984,153],{"class":87},[34,116986,115582],{"class":40},[34,116988,115196],{"class":5869},[34,116990,153],{"class":87},[34,116992,987],{"class":63},[34,116994,807],{"class":40},[108,116996,116997,116998,117001],{},"创建环境并重置。",[31,116999,117000],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[24,117003,117005],{"className":31029,"code":117004,"language":31031,"meta":29,"style":29},"action = env.action_space.sample()\n",[31,117006,117007],{"__ignoreMap":29},[34,117008,117009,117011,117013],{"class":36,"line":37},[34,117010,108072],{"class":40},[34,117012,153],{"class":87},[34,117014,115651],{"class":40},[108,117016,117017],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117019,102946],{"id":102945},[108,117021,106114],{},[24,117023,117026],{"className":117024,"code":117025,"language":5840,"meta":29},[5838],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[31,117027,117025],{"__ignoreMap":29},[108,117029,117030],{},"这个环境已经具备强化学习环境的基本结构。",[108,117032,117033],{},"主函数里使用随机动作：",[24,117035,117036],{"className":31029,"code":117004,"language":31031,"meta":29,"style":29},[31,117037,117038],{"__ignoreMap":29},[34,117039,117040,117042,117044],{"class":36,"line":37},[34,117041,108072],{"class":40},[34,117043,153],{"class":87},[34,117045,115651],{"class":40},[108,117047,117048],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117050,102978],{"id":102977},[752,117052,117053,117056,117062,117071,117080,117089,117095],{},[755,117054,117055],{},"运行程序。",[755,117057,117058,117059,29036],{},"确认 ",[31,117060,117061],{},"obs.shape == (10,)",[755,117063,111811,117064,117067,117068,29036],{},[31,117065,117066],{},"env.action_space","，应类似 ",[31,117069,117070],{},"Box(-1.0, 1.0, (2,), float32)",[755,117072,106215,117073,117076,117077,29036],{},[31,117074,117075],{},"self.max_steps = 10","，确认环境会更快 ",[31,117078,117079],{},"truncated=True",[755,117081,103041,117082,103044,117085,117088],{},[31,117083,117084],{},"terminated = dist \u003C 0.05",[31,117086,117087],{},"dist \u003C 0.2","，观察是否更容易结束。",[755,117090,103041,117091,117094],{},[31,117092,117093],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[755,117096,117097,117098,117100,117101,117104],{},"在 ",[31,117099,116963],{}," 里加入 ",[31,117102,117103],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117106,103083],{"id":103082},[19,117108,117110],{"id":117109},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[108,117112,117113,117114,117116],{},"Gymnasium 的 ",[31,117115,107764],{}," 返回 5 个值:",[24,117118,117120],{"className":31029,"code":117119,"language":31031,"meta":29,"style":29},"obs, reward, terminated, truncated, info\n",[31,117121,117122],{"__ignoreMap":29},[34,117123,117124],{"class":36,"line":37},[34,117125,117119],{"class":40},[108,117127,117128],{},"不是旧 Gym 的 4 个值。",[19,117130,117132,117135],{"id":117131},"datactrl-action-维度错误",[31,117133,117134],{},"data.ctrl[:] = action"," 维度错误",[108,117137,103153],{},[24,117139,117141],{"className":31029,"code":117140,"language":31031,"meta":29,"style":29},"print(self.model.nu)\nprint(action.shape)\n",[31,117142,117143,117154],{"__ignoreMap":29},[34,117144,117145,117147,117149,117151],{"class":36,"line":37},[34,117146,31066],{"class":63},[34,117148,801],{"class":40},[34,117150,31474],{"class":63},[34,117152,117153],{"class":40},".model.nu)\n",[34,117155,117156,117158],{"class":36,"line":51},[34,117157,31066],{"class":63},[34,117159,117160],{"class":40},"(action.shape)\n",[108,117162,117163],{},"两者必须匹配。",[19,117165,117167],{"id":117166},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[108,117169,103092],{},[24,117171,117173],{"className":31029,"code":117172,"language":31031,"meta":29,"style":29},"mujoco.mj_forward(self.model, self.data)\n",[31,117174,117175],{"__ignoreMap":29},[34,117176,117177,117180,117182,117184,117186],{"class":36,"line":37},[34,117178,117179],{"class":40},"mujoco.mj_forward(",[34,117181,31474],{"class":63},[34,117183,115211],{"class":40},[34,117185,31474],{"class":63},[34,117187,115216],{"class":40},[19,117189,117191,117193],{"id":117190},"observation_space-维度和-obs-不一致",[31,117192,114230],{}," 维度和 obs 不一致",[108,117195,103205],{},[24,117197,117199],{"className":31029,"code":117198,"language":31031,"meta":29,"style":29},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[31,117200,117201,117211,117218],{"__ignoreMap":29},[34,117202,117203,117205,117207,117209],{"class":36,"line":37},[34,117204,111484],{"class":40},[34,117206,153],{"class":87},[34,117208,39524],{"class":63},[34,117210,115427],{"class":40},[34,117212,117213,117215],{"class":36,"line":51},[34,117214,31066],{"class":63},[34,117216,117217],{"class":40},"(obs.shape)\n",[34,117219,117220,117222,117224,117226],{"class":36,"line":60},[34,117221,31066],{"class":63},[34,117223,801],{"class":40},[34,117225,31474],{"class":63},[34,117227,117228],{"class":40},".observation_space.shape)\n",[108,117230,117231],{},"两者必须一致。本章观测是：",[24,117233,117236],{"className":117234,"code":117235,"language":5840,"meta":29},[5838],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[31,117237,117235],{"__ignoreMap":29},[19,117239,117241],{"id":117240},"action-超过范围","action 超过范围",[108,117243,117244],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[24,117246,117247],{"className":31029,"code":116746,"language":31031,"meta":29,"style":29},[31,117248,117249],{"__ignoreMap":29},[34,117250,117251,117253,117255,117257,117259,117261,117263],{"class":36,"line":37},[34,117252,108072],{"class":40},[34,117254,153],{"class":87},[34,117256,108077],{"class":40},[34,117258,31474],{"class":63},[34,117260,115348],{"class":40},[34,117262,31474],{"class":63},[34,117264,115353],{"class":40},[108,117266,117267,117268,29036],{},"这能避免无效动作直接写入 ",[31,117269,101706],{},[19,117271,117273],{"id":117272},"忘记返回-info","忘记返回 info",[108,117275,117113,117276,101648,117278,117280],{},[31,117277,70691],{},[31,117279,107764],{}," 都会返回 info：",[24,117282,117283],{"className":31029,"code":114023,"language":31031,"meta":29,"style":29},[31,117284,117285,117293],{"__ignoreMap":29},[34,117286,117287,117289,117291],{"class":36,"line":37},[34,117288,114030],{"class":40},[34,117290,153],{"class":87},[34,117292,114035],{"class":40},[34,117294,117295,117297,117299],{"class":36,"line":51},[34,117296,114040],{"class":40},[34,117298,153],{"class":87},[34,117300,114045],{"class":40},[108,117302,117303,117304,29036],{},"即使暂时没有额外信息，也返回 ",[31,117305,33110],{},[14,117307,117309],{"id":117308},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[108,117311,117312],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[752,117314,117315,117318,117321,117324,117327,117330],{},[755,117316,117317],{},"更稳定的 reward。",[755,117319,117320],{},"合理的 episode 长度。",[755,117322,117323],{},"可重复的随机目标采样。",[755,117325,117326],{},"render 接口。",[755,117328,117329],{},"环境注册代码。",[755,117331,117332],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[108,117334,117335],{},"如果只是自己写训练循环，最小形式是：",[24,117337,117339],{"className":31029,"code":117338,"language":31031,"meta":29,"style":29},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[31,117340,117341,117349,117365,117369,117385,117394,117403,117413],{"__ignoreMap":29},[34,117342,117343,117345,117347],{"class":36,"line":37},[34,117344,116974],{"class":40},[34,117346,153],{"class":87},[34,117348,115572],{"class":40},[34,117350,117351,117353,117355,117357,117359,117361,117363],{"class":36,"line":51},[34,117352,114030],{"class":40},[34,117354,153],{"class":87},[34,117356,115582],{"class":40},[34,117358,115196],{"class":5869},[34,117360,153],{"class":87},[34,117362,987],{"class":63},[34,117364,807],{"class":40},[34,117366,117367],{"class":36,"line":60},[34,117368,3053],{"emptyLinePlaceholder":726},[34,117370,117371,117373,117375,117377,117379,117381,117383],{"class":36,"line":76},[34,117372,3678],{"class":87},[34,117374,102131],{"class":40},[34,117376,26695],{"class":87},[34,117378,33094],{"class":63},[34,117380,801],{"class":40},[34,117382,7063],{"class":63},[34,117384,31437],{"class":40},[34,117386,117387,117390,117392],{"class":36,"line":93},[34,117388,117389],{"class":40},"    action ",[34,117391,153],{"class":87},[34,117393,115651],{"class":40},[34,117395,117396,117399,117401],{"class":36,"line":99},[34,117397,117398],{"class":40},"    obs, reward, terminated, truncated, info ",[34,117400,153],{"class":87},[34,117402,114045],{"class":40},[34,117404,117405,117407,117409,117411],{"class":36,"line":353},[34,117406,3754],{"class":87},[34,117408,115717],{"class":40},[34,117410,115720],{"class":87},[34,117412,115723],{"class":40},[34,117414,117415,117418,117420],{"class":36,"line":359},[34,117416,117417],{"class":40},"        obs, info ",[34,117419,153],{"class":87},[34,117421,114035],{"class":40},[14,117423,117425],{"id":117424},"_9本章小结","9.本章小结",[108,117427,117428],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[24,117430,117433],{"className":117431,"code":117432,"language":5840,"meta":29},[5838],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[31,117434,117432],{"__ignoreMap":29},[108,117436,117437],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[45,117439,117440],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":117442},[117443,117444,117445,117452,117456,117457,117458,117468,117469],{"id":101276,"depth":51,"text":101277},{"id":101399,"depth":51,"text":101400},{"id":101674,"depth":51,"text":101675,"children":117446},[117447,117449,117451],{"id":114254,"depth":60,"text":117448},"terminated 和 truncated 的区别",{"id":114357,"depth":60,"text":117450},"observation_space 和 action_space",{"id":114484,"depth":60,"text":114485},{"id":101882,"depth":51,"text":101883,"children":117453},[117454,117455],{"id":102202,"depth":60,"text":102202},{"id":102338,"depth":60,"text":102338},{"id":102945,"depth":51,"text":102946},{"id":102977,"depth":51,"text":102978},{"id":103082,"depth":51,"text":103083,"children":117459},[117460,117461,117463,117464,117466,117467],{"id":117109,"depth":60,"text":117110},{"id":117131,"depth":60,"text":117462},"data.ctrl[:] = action 维度错误",{"id":117166,"depth":60,"text":117167},{"id":117190,"depth":60,"text":117465},"observation_space 维度和 obs 不一致",{"id":117240,"depth":60,"text":117241},{"id":117272,"depth":60,"text":117273},{"id":117308,"depth":51,"text":117309},{"id":117424,"depth":51,"text":117425},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114007,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117476,"title":117477,"body":117478,"description":117901,"extension":724,"meta":117902,"navigation":726,"path":117903,"seo":117904,"stem":117905,"__hash__":117906},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117479,"toc":117891},[117480,117484,117487,117490,117510,117516,117522,117532,117535,117538,117558,117561,117565,117568,117574,117577,117591,117594,117597,117671,117674,117680,117683,117706,117709,117759,117762,117768,117771,117774,117777,117796,117799,117805,117808,117811,117814,117834,117837,117840,117843,117888],[10,117481,117483],{"id":117482},"mujoco-学习","MuJoCo 学习",[108,117485,117486],{},"初版",[108,117488,117489],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[752,117491,117492,117495,117498,117507],{},[755,117493,117494],{},"MuJoCo 模型文件在描述什么。",[755,117496,117497],{},"Python 代码怎样读取和推进仿真。",[755,117499,117500,1008,117502,1008,117504,117506],{},[31,117501,104660],{},[31,117503,104990],{},[31,117505,104993],{}," 这些数组为什么重要。",[755,117508,117509],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[108,117511,117512,117513,117515],{},"默认环境为 Fedora 44、Python >= 3.10、",[31,117514,101657],{}," 官方 Python bindings。",[108,117517,117518,117519,117521],{},"注意：本文禁止使用 ",[31,117520,101642],{},"。所有示例均使用：",[24,117523,117524],{"className":31029,"code":102208,"language":31031,"meta":29,"style":29},[31,117525,117526],{"__ignoreMap":29},[34,117527,117528,117530],{"class":36,"line":37},[34,117529,31043],{"class":87},[34,117531,101931],{"class":40},[14,117533,117534],{"id":117534},"适合谁阅读",[108,117536,117537],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[752,117539,117540,117543,117546,117549],{},[755,117541,117542],{},"没学过 MuJoCo，只会一点 Python。",[755,117544,117545],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[755,117547,117548],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[755,117550,117551,117552,117554,117555,117557],{},"以前接触过 ",[31,117553,101642],{},"，现在想迁移到官方 ",[31,117556,101651],{}," Python bindings。",[108,117559,117560],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117562,117564],{"id":117563},"mujoco-到底是什么","MuJoCo 到底是什么",[108,117566,117567],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[24,117569,117572],{"className":117570,"code":117571,"language":5840,"meta":29},[5838],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[31,117573,117571],{"__ignoreMap":29},[108,117575,117576],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[752,117578,117579,117582,117585,117588],{},[755,117580,117581],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[755,117583,117584],{},"快速测试控制算法，不必一开始就上真实机器人。",[755,117586,117587],{},"生成强化学习环境。",[755,117589,117590],{},"采集状态、动作、图像、奖励等训练数据。",[14,117592,117593],{"id":117593},"学习前的心智模型",[108,117595,117596],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[934,117598,117599,117611],{},[937,117600,117601],{},[940,117602,117603,117606,117609],{},[943,117604,117605],{"align":24388},"部分",[943,117607,117608],{"align":24388},"负责什么",[943,117610,21839],{"align":24388},[980,117612,117613,117624,117636,117648,117660],{},[940,117614,117615,117618,117621],{},[985,117616,117617],{"align":24388},"MJCF XML",[985,117619,117620],{"align":24388},"定义世界和机器人结构",[985,117622,117623],{"align":24388},"地面、盒子、关节、电机、摄像头",[940,117625,117626,117630,117633],{},[985,117627,117628],{"align":24388},[31,117629,101339],{},[985,117631,117632],{"align":24388},"编译后的静态模型",[985,117634,117635],{"align":24388},"有几个关节、有几个电机、时间步长是多少",[940,117637,117638,117642,117645],{},[985,117639,117640],{"align":24388},[31,117641,101349],{},[985,117643,117644],{"align":24388},"运行中的动态状态",[985,117646,117647],{"align":24388},"当前时间、位置、速度、电机输入",[940,117649,117650,117654,117657],{},[985,117651,117652],{"align":24388},[31,117653,101845],{},[985,117655,117656],{"align":24388},"推进一步物理仿真",[985,117658,117659],{"align":24388},"根据重力、力、碰撞更新状态",[940,117661,117662,117665,117668],{},[985,117663,117664],{"align":24388},"Viewer \u002F Renderer",[985,117666,117667],{"align":24388},"把仿真显示出来",[985,117669,117670],{"align":24388},"打开窗口或保存图片",[108,117672,117673],{},"一句话总结：",[24,117675,117678],{"className":117676,"code":117677,"language":5840,"meta":29},[5838],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[31,117679,117677],{"__ignoreMap":29},[108,117681,117682],{},"参考来源：",[1800,117684,117685,117692,117699],{},[755,117686,117687,117688],{},"MuJoCo Python 官方文档：",[520,117689,117690],{"href":117690,"rel":117691},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24517],[755,117693,117694,117695],{},"MuJoCo XML Reference：",[520,117696,117697],{"href":117697,"rel":117698},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24517],[755,117700,117701,117702],{},"MuJoCo Overview：",[520,117703,117704],{"href":117704,"rel":117705},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24517],[14,117707,117708],{"id":117708},"章节目录",[752,117710,117711,117717,117723,117729,117735,117741,117747,117753],{},[755,117712,117713],{},[520,117714,117716],{"href":117715},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[755,117718,117719],{},[520,117720,117722],{"href":117721},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[755,117724,117725],{},[520,117726,117728],{"href":117727},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[755,117730,117731],{},[520,117732,117734],{"href":117733},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[755,117736,117737],{},[520,117738,117740],{"href":117739},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[755,117742,117743],{},[520,117744,117746],{"href":117745},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[755,117748,117749],{},[520,117750,117752],{"href":117751},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[755,117754,117755],{},[520,117756,117758],{"href":117757},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117760,117761],{"id":117761},"推荐学习路线",[24,117763,117766],{"className":117764,"code":117765,"language":5840,"meta":29},[5838],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[31,117767,117765],{"__ignoreMap":29},[108,117769,117770],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117772,117773],{"id":117773},"建议的目录结构",[108,117775,117776],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[24,117778,117780],{"className":24474,"code":117779,"language":24476,"meta":29,"style":29},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[31,117781,117782,117790],{"__ignoreMap":29},[34,117783,117784,117786,117788],{"class":36,"line":37},[34,117785,101896],{"class":149},[34,117787,29867],{"class":63},[34,117789,101901],{"class":156},[34,117791,117792,117794],{"class":36,"line":51},[34,117793,101906],{"class":63},[34,117795,101901],{"class":156},[108,117797,117798],{},"每一章的代码都单独保存：",[24,117800,117803],{"className":117801,"code":117802,"language":5840,"meta":29},[5838],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[31,117804,117802],{"__ignoreMap":29},[108,117806,117807],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117809,117810],{"id":117810},"学习方法",[108,117812,117813],{},"每章建议按这个顺序操作：",[752,117815,117816,117819,117822,117825,117828,117831],{},[755,117817,117818],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[755,117820,117821],{},"复制最小可运行代码，保存成指定文件。",[755,117823,117824],{},"运行代码，确认没有报错。",[755,117826,117827],{},"对照“运行结果说明”理解输出。",[755,117829,117830],{},"做“验证步骤”，主动改一两个参数。",[755,117832,117833],{},"遇到报错先看“常见错误与解决方案”。",[108,117835,117836],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117838,117839],{"id":117839},"全局排错顺序",[108,117841,117842],{},"遇到问题时，按下面顺序查：",[752,117844,117845,117851,117857,117862,117865,117868,117875,117885],{},[755,117846,117847,117848],{},"Python 环境是否激活：",[31,117849,117850],{},"which python",[755,117852,117853,117854],{},"MuJoCo 是否能导入：",[31,117855,117856],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[755,117858,117859,117860],{},"是否误装了 ",[31,117861,101642],{},[755,117863,117864],{},"XML 标签是否闭合、属性是否拼写正确",[755,117866,117867],{},"actuator 引用的 joint 名字是否存在",[755,117869,117870,117872,117873],{},[31,117871,101706],{}," 的长度是否等于 ",[31,117874,102788],{},[755,117876,106215,117877,83169,117879,117881,117882],{},[31,117878,104660],{},[31,117880,104990],{}," 后是否调用了 ",[31,117883,117884],{},"mujoco.mj_forward",[755,117886,117887],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[45,117889,117890],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":117892},[117893,117894,117895,117896,117897,117898,117899,117900],{"id":117534,"depth":51,"text":117534},{"id":117563,"depth":51,"text":117564},{"id":117593,"depth":51,"text":117593},{"id":117708,"depth":51,"text":117708},{"id":117761,"depth":51,"text":117761},{"id":117773,"depth":51,"text":117773},{"id":117810,"depth":51,"text":117810},{"id":117839,"depth":51,"text":117839},"仿真搭建。",{"category":24030},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117477,"description":117901},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117908,"title":117909,"body":117910,"description":723,"extension":724,"meta":118365,"navigation":726,"path":118366,"seo":118367,"stem":118368,"__hash__":118369},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117911,"toc":118363},[117912,117915,117918,117924,118360],[10,117913,117909],{"id":117914},"_1-最常用的基本操作更新",[108,117916,117917],{},"装linux系统教程：",[108,117919,117920],{},[520,117921,117922],{"href":117922,"rel":117923},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24517],[24,117925,117929],{"className":117926,"code":117927,"language":117928,"meta":29,"style":29},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[31,117930,117931,117936,117941,117950,117955,117964,117969,117989,117994,118005,118010,118019,118024,118052,118057,118076,118081,118100,118104,118109,118125,118129,118134,118164,118168,118173,118189,118193,118198,118213,118217,118222,118238,118242,118247,118259,118271,118275,118280,118297,118301,118306,118324,118328,118333,118342,118346,118351],{"__ignoreMap":29},[34,117932,117933],{"class":36,"line":37},[34,117934,117935],{"class":205},"#更新相关的知识\n",[34,117937,117938],{"class":36,"line":51},[34,117939,117940],{"class":205},"# 更新软件包列表（从服务器获取最新软件信息）\n",[34,117942,117943,117945,117948],{"class":36,"line":60},[34,117944,25229],{"class":149},[34,117946,117947],{"class":156}," apt",[34,117949,26894],{"class":156},[34,117951,117952],{"class":36,"line":76},[34,117953,117954],{"class":205},"# 升级所有可更新的软件包（不删除旧包）\n",[34,117956,117957,117959,117961],{"class":36,"line":93},[34,117958,25229],{"class":149},[34,117960,117947],{"class":156},[34,117962,117963],{"class":156}," upgrade\n",[34,117965,117966],{"class":36,"line":99},[34,117967,117968],{"class":205},"#更新和升级软件包\n",[34,117970,117971,117973,117975,117978,117980,117982,117984,117987],{"class":36,"line":353},[34,117972,25229],{"class":149},[34,117974,117947],{"class":156},[34,117976,117977],{"class":156}," update",[34,117979,26842],{"class":40},[34,117981,25229],{"class":149},[34,117983,117947],{"class":156},[34,117985,117986],{"class":156}," upgrade",[34,117988,101611],{"class":63},[34,117990,117991],{"class":36,"line":359},[34,117992,117993],{"class":205},"#列出可更新的软件包及版本信息\n",[34,117995,117996,117999,118002],{"class":36,"line":579},[34,117997,117998],{"class":149},"apt",[34,118000,118001],{"class":156}," list",[34,118003,118004],{"class":63}," --upgradable\n",[34,118006,118007],{"class":36,"line":589},[34,118008,118009],{"class":205},"#彻底升级（处理依赖关系，可能删除旧包）\n",[34,118011,118012,118014,118016],{"class":36,"line":601},[34,118013,25229],{"class":149},[34,118015,117947],{"class":156},[34,118017,118018],{"class":156}," full-upgrade\n",[34,118020,118021],{"class":36,"line":613},[34,118022,118023],{"class":205},"#设置指定版本\n",[34,118025,118026,118028,118030,118032,118034,118037,118039,118041,118043,118045,118048,118050],{"class":36,"line":618},[34,118027,25229],{"class":149},[34,118029,117947],{"class":156},[34,118031,24486],{"class":156},[34,118033,29553],{"class":87},[34,118035,118036],{"class":156},"package_nam",[34,118038,872],{"class":40},[34,118040,1753],{"class":87},[34,118042,153],{"class":156},[34,118044,41],{"class":87},[34,118046,118047],{"class":156},"version_numbe",[34,118049,1465],{"class":40},[34,118051,48],{"class":87},[34,118053,118054],{"class":36,"line":628},[34,118055,118056],{"class":205},"#只安装软件包不升级\n",[34,118058,118059,118061,118063,118065,118067,118069,118071,118073],{"class":36,"line":640},[34,118060,25229],{"class":149},[34,118062,117947],{"class":156},[34,118064,24486],{"class":156},[34,118066,29553],{"class":87},[34,118068,118036],{"class":156},[34,118070,872],{"class":40},[34,118072,1753],{"class":87},[34,118074,118075],{"class":63}," --no-upgrade\n",[34,118077,118078],{"class":36,"line":2301},[34,118079,118080],{"class":205},"#只升级，不存在就不安装\n",[34,118082,118083,118085,118087,118089,118091,118093,118095,118097],{"class":36,"line":2307},[34,118084,25229],{"class":149},[34,118086,117947],{"class":156},[34,118088,24486],{"class":156},[34,118090,29553],{"class":87},[34,118092,118036],{"class":156},[34,118094,872],{"class":40},[34,118096,1753],{"class":87},[34,118098,118099],{"class":63}," --only-upgrade\n",[34,118101,118102],{"class":36,"line":2328},[34,118103,3053],{"emptyLinePlaceholder":726},[34,118105,118106],{"class":36,"line":2333},[34,118107,118108],{"class":205},"#安装指定的软件命令\n",[34,118110,118111,118113,118115,118117,118119,118121,118123],{"class":36,"line":2347},[34,118112,25229],{"class":149},[34,118114,117947],{"class":156},[34,118116,24486],{"class":156},[34,118118,29553],{"class":87},[34,118120,118036],{"class":156},[34,118122,872],{"class":40},[34,118124,48],{"class":87},[34,118126,118127],{"class":36,"line":2352},[34,118128,3053],{"emptyLinePlaceholder":726},[34,118130,118131],{"class":36,"line":2381},[34,118132,118133],{"class":205},"#安装多个软件包\n",[34,118135,118136,118138,118140,118142,118144,118147,118150,118152,118154,118157,118159,118161],{"class":36,"line":2386},[34,118137,25229],{"class":149},[34,118139,117947],{"class":156},[34,118141,24486],{"class":156},[34,118143,29553],{"class":87},[34,118145,118146],{"class":156},"package_",[34,118148,118149],{"class":87},"1>",[34,118151,29553],{"class":87},[34,118153,118146],{"class":156},[34,118155,118156],{"class":87},"2>",[34,118158,29553],{"class":87},[34,118160,118146],{"class":156},[34,118162,118163],{"class":87},"3>\n",[34,118165,118166],{"class":36,"line":2403},[34,118167,3053],{"emptyLinePlaceholder":726},[34,118169,118170],{"class":36,"line":2408},[34,118171,118172],{"class":205},"#更新指定的软件命令\n",[34,118174,118175,118177,118179,118181,118183,118185,118187],{"class":36,"line":2413},[34,118176,25229],{"class":149},[34,118178,117947],{"class":156},[34,118180,117977],{"class":156},[34,118182,29553],{"class":87},[34,118184,118036],{"class":156},[34,118186,872],{"class":40},[34,118188,48],{"class":87},[34,118190,118191],{"class":36,"line":2418},[34,118192,3053],{"emptyLinePlaceholder":726},[34,118194,118195],{"class":36,"line":2432},[34,118196,118197],{"class":205},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[34,118199,118200,118202,118205,118207,118209,118211],{"class":36,"line":2437},[34,118201,117998],{"class":149},[34,118203,118204],{"class":156}," show",[34,118206,29553],{"class":87},[34,118208,118036],{"class":156},[34,118210,872],{"class":40},[34,118212,48],{"class":87},[34,118214,118215],{"class":36,"line":3230},[34,118216,3053],{"emptyLinePlaceholder":726},[34,118218,118219],{"class":36,"line":3244},[34,118220,118221],{"class":205},"#删除软件包命令\n",[34,118223,118224,118226,118228,118230,118232,118234,118236],{"class":36,"line":3252},[34,118225,25229],{"class":149},[34,118227,117947],{"class":156},[34,118229,26731],{"class":156},[34,118231,29553],{"class":87},[34,118233,118036],{"class":156},[34,118235,872],{"class":40},[34,118237,48],{"class":87},[34,118239,118240],{"class":36,"line":3257},[34,118241,3053],{"emptyLinePlaceholder":726},[34,118243,118244],{"class":36,"line":3263},[34,118245,118246],{"class":205},"# 清理旧版本和缓存（释放磁盘空间）\n",[34,118248,118249,118251,118253,118256],{"class":36,"line":3269},[34,118250,25229],{"class":149},[34,118252,117947],{"class":156},[34,118254,118255],{"class":156}," autoremove",[34,118257,118258],{"class":205},"  # 删除不再需要的依赖和库文件\n",[34,118260,118261,118263,118265,118268],{"class":36,"line":3274},[34,118262,25229],{"class":149},[34,118264,117947],{"class":156},[34,118266,118267],{"class":156}," clean",[34,118269,118270],{"class":205},"       # 清理下载的缓存包\n",[34,118272,118273],{"class":36,"line":8601},[34,118274,3053],{"emptyLinePlaceholder":726},[34,118276,118277],{"class":36,"line":8625},[34,118278,118279],{"class":205},"#移除软件包及配置文件\n",[34,118281,118282,118284,118286,118289,118291,118293,118295],{"class":36,"line":8630},[34,118283,25229],{"class":149},[34,118285,117947],{"class":156},[34,118287,118288],{"class":156}," purge",[34,118290,29553],{"class":87},[34,118292,118036],{"class":156},[34,118294,872],{"class":40},[34,118296,48],{"class":87},[34,118298,118299],{"class":36,"line":8636},[34,118300,3053],{"emptyLinePlaceholder":726},[34,118302,118303],{"class":36,"line":8663},[34,118304,118305],{"class":205},"#查找软件包命令\n",[34,118307,118308,118310,118312,118315,118317,118320,118322],{"class":36,"line":8668},[34,118309,25229],{"class":149},[34,118311,117947],{"class":156},[34,118313,118314],{"class":156}," search",[34,118316,29553],{"class":87},[34,118318,118319],{"class":156},"keywor",[34,118321,1109],{"class":40},[34,118323,48],{"class":87},[34,118325,118326],{"class":36,"line":8674},[34,118327,3053],{"emptyLinePlaceholder":726},[34,118329,118330],{"class":36,"line":8686},[34,118331,118332],{"class":205},"#列出所有已安装的包\n",[34,118334,118335,118337,118339],{"class":36,"line":8698},[34,118336,117998],{"class":149},[34,118338,118001],{"class":156},[34,118340,118341],{"class":63}," --installed\n",[34,118343,118344],{"class":36,"line":8710},[34,118345,3053],{"emptyLinePlaceholder":726},[34,118347,118348],{"class":36,"line":10369},[34,118349,118350],{"class":205},"#列出所有已安装的包的版本信息\n",[34,118352,118353,118355,118357],{"class":36,"line":10394},[34,118354,117998],{"class":149},[34,118356,118001],{"class":156},[34,118358,118359],{"class":63}," --all-versions\n",[45,118361,118362],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":118364},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117909,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118371,"title":118372,"body":118373,"description":723,"extension":724,"meta":119114,"navigation":726,"path":119115,"seo":119116,"stem":119117,"__hash__":119118},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118374,"toc":119101},[118375,118378,118382,118385,118391,118395,118399,118405,118410,118415,118420,118425,118430,118433,118436,118439,118442,118446,118449,118454,118457,118462,118465,118470,118477,118480,118483,118486,118489,118492,118503,118507,118511,118516,118521,118525,118530,118534,118539,118543,118547,118552,118555,118600,118605,118609,118613,118618,118624,118629,118639,118644,118654,118659,118664,118691,118695,118698,118703,118706,118731,118735,118740,118743,118748,118753,118773,118778,118781,118796,118800,118853,118856,118861,118865,118868,118883,118886,118889,118894,118898,118902,118905,118909,118913,118916,118921,118926,118930,118937,118945,118948,118955,118960,118965,118968,118973,118980,118985,118992,118996,118998,119003,119007,119010,119013,119018,119021,119026,119029,119034,119039,119044,119048,119053,119057,119098],[10,118376,118372],{"id":118377},"_2-linux装机教程",[14,118379,118381],{"id":118380},"_21-实体机","2.1 实体机",[108,118383,118384],{},"使用清华源：（Ubuntu24.04）",[108,118386,118387],{},[520,118388,118389],{"href":118389,"rel":118390},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24517],[14,118392,118394],{"id":118393},"_22-普通虚拟机","2.2 普通虚拟机",[19,118396,118398],{"id":118397},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[108,118400,118401],{},[520,118402,118403],{"href":118403,"rel":118404},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24517],[108,118406,118407],{},[2122,118408],{"alt":29,"src":118409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[108,118411,118412],{},[2122,118413],{"alt":29,"src":118414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[108,118416,118417],{},[2122,118418],{"alt":29,"src":118419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[108,118421,118422],{},[2122,118423],{"alt":29,"src":118424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[108,118426,118427],{},[2122,118428],{"alt":29,"src":118429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[108,118431,118432],{},"内存4G（4096MB）；",[108,118434,118435],{},"CPU给4个核；",[108,118437,118438],{},"硬盘动态分配60G；",[108,118440,118441],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[19,118443,118445],{"id":118444},"_222-安装ubuntu","2.2.2 安装Ubuntu",[108,118447,118448],{},"按照1.1的步骤下载Ubuntu",[108,118450,118451],{},[2122,118452],{"alt":29,"src":118453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[108,118455,118456],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[108,118458,118459],{},[2122,118460],{"alt":29,"src":118461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[108,118463,118464],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[108,118466,118467],{},[2122,118468],{"alt":29,"src":118469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[108,118471,118472,118473,118476],{},"选择“正常安装”(找不到都用Alt+F7)， ",[111,118474,118475],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[108,118478,118479],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[108,118481,118482],{},"将改动写入磁盘吗 继续",[108,118484,118485],{},"选择东八区（shanghai，大致在地图上点一下），继续",[108,118487,118488],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[108,118490,118491],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[108,118493,118494,118495,118498,118499,118502],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[111,118496,118497],{},"除了"," 选不发送系统信息与不升级之外， ",[111,118500,118501],{},"其它"," 都跳过或前进）",[19,118504,118506],{"id":118505},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22650,118508,118510],{"id":118509},"_2231-全屏","2.2.3.1 全屏",[108,118512,118513],{},[2122,118514],{"alt":29,"src":118515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[108,118517,118518],{},[2122,118519],{"alt":29,"src":118520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22650,118522,118524],{"id":118523},"_2232-文件交换","2.2.3.2 文件交换",[108,118526,118527],{},[2122,118528],{"alt":29,"src":118529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22650,118531,118533],{"id":118532},"_2233-新建文本文档","2.2.3.3 新建文本文档",[108,118535,118536],{},[2122,118537],{"alt":29,"src":118538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118540,118542],{"id":118541},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[19,118544,118546],{"id":118545},"_231-简介与优缺点","2.3.1 简介与优缺点",[752,118548,118549],{},[755,118550,118551],{},"什么情况下推荐？",[108,118553,118554],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[752,118556,118557],{"start":51},[755,118558,118559,118560],{},"优缺点：",[752,118561,118562,118592],{},[755,118563,118564,118565],{},"优点：",[752,118566,118567,118570,118577,118580,118583,118586,118589],{},[755,118568,118569],{},"WSL2是最好的Linux发行版;(bushi)",[755,118571,118572,118573,118576],{},"性能损耗极低。且比在Windows上跑深度性能 ",[111,118574,118575],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[755,118578,118579],{},"非常方便调用USB设备，可以USB直通;",[755,118581,118582],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[755,118584,118585],{},"非常方便Win与WSL2互相传文件等协同操作;",[755,118587,118588],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[755,118590,118591],{},"非常方便使用Windows的VScode远程开发;",[755,118593,118594,118595],{},"缺点：",[752,118596,118597],{},[755,118598,118599],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[108,118601,118602],{},[2122,118603],{"alt":29,"src":118604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[19,118606,118608],{"id":118607},"_232-安装教程","2.3.2 安装教程",[22650,118610,118612],{"id":118611},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[752,118614,118615],{},[755,118616,118617],{},"方法一(图形界面)",[108,118619,118620,118621,25271],{},"用Win+R输入",[31,118622,118623],{},"appwiz.cpl",[108,118625,118626],{},[2122,118627],{"alt":29,"src":118628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[108,118630,118631,118632,118635,118636,114],{},"点击OK进入 ",[111,118633,118634],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[111,118637,118638],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[108,118640,118641],{},[2122,118642],{"alt":29,"src":118643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[108,118645,118646,118647,101648,118650,118653],{},"选择 ",[111,118648,118649],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[111,118651,118652],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[108,118655,118656],{},[2122,118657],{"alt":29,"src":118658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[752,118660,118661],{"start":51},[755,118662,118663],{},"方法二(命令行)",[24,118665,118669],{"className":118666,"code":118667,"language":118668,"meta":29,"style":29},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[31,118670,118671,118676,118681,118686],{"__ignoreMap":29},[34,118672,118673],{"class":36,"line":37},[34,118674,118675],{},"# 开启 Linux 子系统\n",[34,118677,118678],{"class":36,"line":51},[34,118679,118680],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[34,118682,118683],{"class":36,"line":60},[34,118684,118685],{},"# 开启虚拟机平台\n",[34,118687,118688],{"class":36,"line":76},[34,118689,118690],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22650,118692,118694],{"id":118693},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[108,118696,118697],{},"用管理员权限打开powershell",[108,118699,118700],{},[2122,118701],{"alt":29,"src":118702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[108,118704,118705],{},"升级WSL并设置默认版本为WSL2",[24,118707,118709],{"className":118666,"code":118708,"language":118668,"meta":29,"style":29},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[31,118710,118711,118716,118721,118726],{"__ignoreMap":29},[34,118712,118713],{"class":36,"line":37},[34,118714,118715],{},"# 更新 wsl\n",[34,118717,118718],{"class":36,"line":51},[34,118719,118720],{},"wsl --update\n",[34,118722,118723],{"class":36,"line":60},[34,118724,118725],{},"# 将 wsl 版本设置为 wsl2\n",[34,118727,118728],{"class":36,"line":76},[34,118729,118730],{},"wsl --set-default-version 2\n",[22650,118732,118734],{"id":118733},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[752,118736,118737],{},[755,118738,118739],{},"方式一(商店下载)",[108,118741,118742],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[108,118744,118745],{},[2122,118746],{"alt":29,"src":118747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[752,118749,118750],{"start":51},[755,118751,118752],{},"方式二(命令行安装)",[24,118754,118756],{"className":118666,"code":118755,"language":118668,"meta":29,"style":29},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[31,118757,118758,118763,118768],{"__ignoreMap":29},[34,118759,118760],{"class":36,"line":37},[34,118761,118762],{},"# 列出可安装的 Linux 版本\n",[34,118764,118765],{"class":36,"line":51},[34,118766,118767],{},"#（需要科学手段）\n",[34,118769,118770],{"class":36,"line":60},[34,118771,118772],{},"wsl --list --online\n",[108,118774,118775],{},[2122,118776],{"alt":29,"src":118777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[108,118779,118780],{},"选择对应发行版并安装",[24,118782,118784],{"className":118666,"code":118783,"language":118668,"meta":29,"style":29},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[31,118785,118786,118791],{"__ignoreMap":29},[34,118787,118788],{"class":36,"line":37},[34,118789,118790],{},"# Ubuntu安装完毕后需要重启系统\n",[34,118792,118793],{"class":36,"line":51},[34,118794,118795],{},"wsl --install -d Ubuntu-24.04\n",[22650,118797,118799],{"id":118798},"_2324-查看系统状态","2.3.2.4 查看系统状态",[24,118801,118803],{"className":118666,"code":118802,"language":118668,"meta":29,"style":29},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[31,118804,118805,118810,118815,118820,118825,118829,118833,118838,118843,118848],{"__ignoreMap":29},[34,118806,118807],{"class":36,"line":37},[34,118808,118809],{},"# 查看 wsl\n",[34,118811,118812],{"class":36,"line":51},[34,118813,118814],{},"wsl -l\n",[34,118816,118817],{"class":36,"line":60},[34,118818,118819],{},"# 查看 wsl 运行版本或模式\n",[34,118821,118822],{"class":36,"line":76},[34,118823,118824],{},"wsl -l -v\n",[34,118826,118827],{"class":36,"line":93},[34,118828,3053],{"emptyLinePlaceholder":726},[34,118830,118831],{"class":36,"line":99},[34,118832,3053],{"emptyLinePlaceholder":726},[34,118834,118835],{"class":36,"line":353},[34,118836,118837],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[34,118839,118840],{"class":36,"line":359},[34,118841,118842],{},"wsl --set-version \u003Cdistro> 2\n",[34,118844,118845],{"class":36,"line":579},[34,118846,118847],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[34,118849,118850],{"class":36,"line":589},[34,118851,118852],{},"wsl --unregister \u003Cdistro>\n",[108,118854,118855],{},"输出Version为2即正常",[108,118857,118858],{},[2122,118859],{"alt":29,"src":118860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22650,118862,118864],{"id":118863},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[108,118866,118867],{},"直接在Powershell里输入wsl命令进入子系统",[24,118869,118871],{"className":118666,"code":118870,"language":118668,"meta":29,"style":29},"# 进入子系统\nwsl\n",[31,118872,118873,118878],{"__ignoreMap":29},[34,118874,118875],{"class":36,"line":37},[34,118876,118877],{},"# 进入子系统\n",[34,118879,118880],{"class":36,"line":51},[34,118881,118882],{},"wsl\n",[108,118884,118885],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[108,118887,118888],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[108,118890,118891],{},[2122,118892],{"alt":29,"src":118893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[19,118895,118897],{"id":118896},"_233-配置各种环境","2.3.3 配置各种环境",[22650,118899,118901],{"id":118900},"_2331-换源","2.3.3.1 换源",[108,118903,118904],{},"(同实体机LINUX，往下找教程)",[22650,118906,118908],{"id":118907},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23562,118910,118912],{"id":118911},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[108,118914,118915],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[108,118917,118918],{},[2122,118919],{"alt":29,"src":118920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[108,118922,118923],{},[2122,118924],{"alt":29,"src":118925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23562,118927,118929],{"id":118928},"_23322-cuda","2.3.3.2.2 CUDA",[108,118931,118932,118933],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[520,118934,118935],{"href":118935,"rel":118936},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24517],[108,118938,118939,118942],{},[2122,118940],{"alt":29,"src":118941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2122,118943],{"alt":29,"src":118944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[108,118946,118947],{},"在下方的网站，选择合适的版本。",[108,118949,118950,118951],{},"WSL2 专属 CUDA 指南：",[520,118952,118953],{"href":118953,"rel":118954},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24517],[108,118956,118957],{},[111,118958,118959],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[108,118961,118962],{},[2122,118963],{"alt":29,"src":118964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[108,118966,118967],{},"挨行敲一遍",[108,118969,118970],{},[2122,118971],{"alt":29,"src":118972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[108,118974,118975,118976,118979],{},"敲完后，输入",[31,118977,118978],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[108,118981,118982],{},[2122,118983],{"alt":29,"src":118984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[108,118986,118987,118988,118991],{},"（请详看下方教程的",[111,118989,118990],{},"安装CUDA的配置环境来看","如何配置环境）",[23562,118993,118995],{"id":118994},"_23323-cudnn","2.3.3.2.3 cuDNN",[108,118997,118904],{},[108,118999,119000],{},[2122,119001],{"alt":29,"src":119002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22650,119004,119006],{"id":119005},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[108,119008,119009],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[108,119011,119012],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[108,119014,119015],{},[2122,119016],{"alt":29,"src":119017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[108,119019,119020],{},"连接WSL2",[108,119022,119023],{},[2122,119024],{"alt":29,"src":119025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[108,119027,119028],{},"远程开发成功。",[108,119030,119031],{},[2122,119032],{"alt":29,"src":119033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[108,119035,119036],{},[2122,119037],{"alt":29,"src":119038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[108,119040,119041],{},[2122,119042],{"alt":29,"src":119043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22650,119045,119047],{"id":119046},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[108,119049,119050],{},[2122,119051],{"alt":29,"src":119052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22650,119054,119056],{"id":119055},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[24,119058,119060],{"className":117926,"code":119059,"language":117928,"meta":29,"style":29},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[31,119061,119062,119070,119078,119089,119093],{"__ignoreMap":29},[34,119063,119064,119066,119068],{"class":36,"line":37},[34,119065,25229],{"class":149},[34,119067,117947],{"class":156},[34,119069,26894],{"class":156},[34,119071,119072,119074,119076],{"class":36,"line":51},[34,119073,25229],{"class":149},[34,119075,117947],{"class":156},[34,119077,117963],{"class":156},[34,119079,119080,119082,119084,119086],{"class":36,"line":60},[34,119081,25229],{"class":149},[34,119083,117947],{"class":156},[34,119085,24486],{"class":156},[34,119087,119088],{"class":156}," mesa-utils\n",[34,119090,119091],{"class":36,"line":76},[34,119092,3053],{"emptyLinePlaceholder":726},[34,119094,119095],{"class":36,"line":93},[34,119096,119097],{"class":205},"#然后重启wsl2即可\n",[45,119099,119100],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":119102},[119103,119104,119109],{"id":118380,"depth":51,"text":118381},{"id":118393,"depth":51,"text":118394,"children":119105},[119106,119107,119108],{"id":118397,"depth":60,"text":118398},{"id":118444,"depth":60,"text":118445},{"id":118505,"depth":60,"text":118506},{"id":118541,"depth":51,"text":118542,"children":119110},[119111,119112,119113],{"id":118545,"depth":60,"text":118546},{"id":118607,"depth":60,"text":118608},{"id":118896,"depth":60,"text":118897},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118372,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119120,"title":119121,"body":119122,"description":723,"extension":724,"meta":122058,"navigation":726,"path":122059,"seo":122060,"stem":122061,"__hash__":122062},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119123,"toc":122030},[119124,119127,119131,119137,119141,119147,119151,119339,119342,119347,119351,119355,119358,119361,119367,119372,119375,119378,119383,119416,119421,119425,119502,119505,119510,119514,119517,119556,119559,119568,119586,119591,119598,119715,119720,119723,119750,119755,119759,119768,119818,119825,119829,119832,119846,119853,119887,119892,119896,119919,119922,119927,119931,119934,119937,119940,119982,119986,119989,119992,120033,120037,120041,120044,120049,120054,120057,120080,120083,120091,120096,120099,120104,120109,120112,120117,120121,120126,120149,120154,120216,120224,120229,120234,120237,120242,120245,120250,120255,120273,120278,120284,120289,120303,120307,120310,120313,120316,120359,120362,120367,120468,120471,120476,120480,120484,120521,120525,120529,120533,120579,120583,120628,120632,120639,120647,120702,120705,120782,120785,120808,120812,120815,120820,120825,120833,120836,120841,120846,120851,120854,120859,120868,120871,120876,120879,120950,120955,120958,120963,120966,120971,120974,120979,120982,120987,120992,120995,121070,121073,121086,121091,121094,121108,121111,121140,121145,121174,121177,121182,121186,121191,121200,121203,121208,121211,121216,121219,121222,121227,121230,121235,121240,121243,121248,121251,121376,121381,121411,121414,121419,121424,121441,121444,121487,121490,121517,121522,121535,121678,121682,121687,121701,121704,121755,121758,121788,121791,121807,121812,121826,121829,121896,121901,121910,121915,121918,121930,121935,121942,121966,121969,121974,121977,121996,122001,122008,122020,122027],[10,119125,119121],{"id":119126},"_3-安装必备配置",[14,119128,119130],{"id":119129},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[24,119132,119135],{"className":119133,"code":119134,"language":5840},[5838],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[31,119136,119134],{"__ignoreMap":29},[19,119138,119140],{"id":119139},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[24,119142,119145],{"className":119143,"code":119144,"language":5840},[5838],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[31,119146,119144],{"__ignoreMap":29},[19,119148,119150],{"id":119149},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[24,119152,119156],{"className":119153,"code":119154,"language":119155,"meta":29,"style":29},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[31,119157,119158,119166,119177,119189,119203,119207,119217,119222,119226,119230,119235,119239,119251,119255,119260,119264,119275,119279,119295,119299,119310,119314,119319,119323,119331],{"__ignoreMap":29},[34,119159,119160,119162,119164],{"class":36,"line":37},[34,119161,25229],{"class":149},[34,119163,117947],{"class":156},[34,119165,26894],{"class":156},[34,119167,119168,119170,119172,119174],{"class":36,"line":51},[34,119169,25229],{"class":149},[34,119171,117947],{"class":156},[34,119173,24486],{"class":156},[34,119175,119176],{"class":156}," vim\n",[34,119178,119179,119181,119184,119186],{"class":36,"line":60},[34,119180,25229],{"class":149},[34,119182,119183],{"class":156}," rm",[34,119185,25978],{"class":63},[34,119187,119188],{"class":156}," \u002Fetc\u002Fapt\u002Fsources.list\n",[34,119190,119191,119193,119195,119197,119200],{"class":36,"line":76},[34,119192,25229],{"class":149},[34,119194,119183],{"class":156},[34,119196,25978],{"class":63},[34,119198,119199],{"class":156}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[34,119201,119202],{"class":63},"**\n",[34,119204,119205],{"class":36,"line":93},[34,119206,3053],{"emptyLinePlaceholder":726},[34,119208,119209,119211,119214],{"class":36,"line":99},[34,119210,25229],{"class":149},[34,119212,119213],{"class":156}," vim",[34,119215,119216],{"class":156}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[34,119218,119219],{"class":36,"line":353},[34,119220,119221],{"class":156},"```\n",[34,119223,119224],{"class":36,"line":359},[34,119225,3053],{"emptyLinePlaceholder":726},[34,119227,119228],{"class":36,"line":579},[34,119229,3053],{"emptyLinePlaceholder":726},[34,119231,119232],{"class":36,"line":589},[34,119233,119234],{"class":149},"选择好Ubuntu版本后，复制下方的内容。\n",[34,119236,119237],{"class":36,"line":601},[34,119238,3053],{"emptyLinePlaceholder":726},[34,119240,119241,119243,119246,119249],{"class":36,"line":613},[34,119242,1022],{"class":87},[34,119244,119245],{"class":156},"[](",[34,119247,119248],{"class":149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[34,119250,807],{"class":156},[34,119252,119253],{"class":36,"line":618},[34,119254,3053],{"emptyLinePlaceholder":726},[34,119256,119257],{"class":36,"line":628},[34,119258,119259],{"class":149},"粘贴进去\n",[34,119261,119262],{"class":36,"line":640},[34,119263,3053],{"emptyLinePlaceholder":726},[34,119265,119266,119268,119270,119273],{"class":36,"line":2301},[34,119267,1022],{"class":87},[34,119269,119245],{"class":156},[34,119271,119272],{"class":149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[34,119274,807],{"class":156},[34,119276,119277],{"class":36,"line":2307},[34,119278,3053],{"emptyLinePlaceholder":726},[34,119280,119281,119284,119287,119290,119292],{"class":36,"line":2328},[34,119282,119283],{"class":149},"按一下ESC，然后英文冒号，输入",[34,119285,119286],{"class":156}," `",[34,119288,119289],{"class":149},":wq!",[34,119291,1765],{"class":156},[34,119293,119294],{"class":149},"然后回车\n",[34,119296,119297],{"class":36,"line":2333},[34,119298,3053],{"emptyLinePlaceholder":726},[34,119300,119301,119303,119305,119308],{"class":36,"line":2347},[34,119302,1022],{"class":87},[34,119304,119245],{"class":156},[34,119306,119307],{"class":149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[34,119309,807],{"class":156},[34,119311,119312],{"class":36,"line":2352},[34,119313,3053],{"emptyLinePlaceholder":726},[34,119315,119316],{"class":36,"line":2381},[34,119317,119318],{"class":149},"输入以下命令\n",[34,119320,119321],{"class":36,"line":2386},[34,119322,3053],{"emptyLinePlaceholder":726},[34,119324,119325,119328],{"class":36,"line":2403},[34,119326,119327],{"class":156},"```",[34,119329,119330],{"class":149},"Bash\n",[34,119332,119333,119335,119337],{"class":36,"line":2408},[34,119334,25229],{"class":149},[34,119336,117947],{"class":156},[34,119338,26894],{"class":156},[108,119340,119341],{},"这里被替换成对应学校则成功",[108,119343,119344],{},[2122,119345],{"alt":29,"src":119346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119348,119350],{"id":119349},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[19,119352,119354],{"id":119353},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[108,119356,119357],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[108,119359,119360],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[108,119362,119363],{},[520,119364,119365],{"href":119365,"rel":119366},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24517],[108,119368,119369],{},[2122,119370],{"alt":29,"src":119371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[108,119373,119374],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[108,119376,119377],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[108,119379,119380],{},[2122,119381],{"alt":29,"src":119382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[24,119384,119386],{"className":117926,"code":119385,"language":117928,"meta":29,"style":29},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[31,119387,119388,119393,119400,119405],{"__ignoreMap":29},[34,119389,119390],{"class":36,"line":37},[34,119391,119392],{"class":205},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[34,119394,119395,119397],{"class":36,"line":51},[34,119396,101906],{"class":63},[34,119398,119399],{"class":156}," ~\u002FDownloads\n",[34,119401,119402],{"class":36,"line":60},[34,119403,119404],{"class":205},"#下方chrome安装包名不一定是这个，根据名字来看\n",[34,119406,119407,119409,119411,119413],{"class":36,"line":76},[34,119408,25229],{"class":149},[34,119410,117947],{"class":156},[34,119412,24486],{"class":156},[34,119414,119415],{"class":156}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[108,119417,119418],{},[2122,119419],{"alt":29,"src":119420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[19,119422,119424],{"id":119423},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[24,119426,119428],{"className":117926,"code":119427,"language":117928,"meta":29,"style":29},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[31,119429,119430,119435,119443,119454,119459,119463,119468,119478,119486,119497],{"__ignoreMap":29},[34,119431,119432],{"class":36,"line":37},[34,119433,119434],{"class":205},"# 老版\n",[34,119436,119437,119439,119441],{"class":36,"line":51},[34,119438,25229],{"class":149},[34,119440,117947],{"class":156},[34,119442,26894],{"class":156},[34,119444,119445,119447,119449,119451],{"class":36,"line":60},[34,119446,25229],{"class":149},[34,119448,117947],{"class":156},[34,119450,24486],{"class":156},[34,119452,119453],{"class":156}," neofetch\n",[34,119455,119456],{"class":36,"line":76},[34,119457,119458],{"class":149},"neofetch\n",[34,119460,119461],{"class":36,"line":93},[34,119462,3053],{"emptyLinePlaceholder":726},[34,119464,119465],{"class":36,"line":99},[34,119466,119467],{"class":205},"# 新版\n",[34,119469,119470,119472,119475],{"class":36,"line":353},[34,119471,25229],{"class":149},[34,119473,119474],{"class":156}," add-apt-repository",[34,119476,119477],{"class":156}," ppa:zhangsongcui3371\u002Ffastfetch\n",[34,119479,119480,119482,119484],{"class":36,"line":359},[34,119481,25229],{"class":149},[34,119483,117947],{"class":156},[34,119485,26894],{"class":156},[34,119487,119488,119490,119492,119494],{"class":36,"line":579},[34,119489,25229],{"class":149},[34,119491,117947],{"class":156},[34,119493,24486],{"class":156},[34,119495,119496],{"class":156}," fastfetch\n",[34,119498,119499],{"class":36,"line":589},[34,119500,119501],{"class":149},"fastfetch\n",[108,119503,119504],{},"这里显示，一共有3162个debian的程序，7个snap程序",[108,119506,119507],{},[2122,119508],{"alt":29,"src":119509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[19,119511,119513],{"id":119512},"_323-移除snap应用","3.2.3 移除snap应用",[108,119515,119516],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[24,119518,119520],{"className":117926,"code":119519,"language":117928,"meta":29,"style":29},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[31,119521,119522,119534,119545],{"__ignoreMap":29},[34,119523,119524,119526,119528,119531],{"class":36,"line":37},[34,119525,25229],{"class":149},[34,119527,27164],{"class":156},[34,119529,119530],{"class":156}," disable",[34,119532,119533],{"class":156}," snapd.service\n",[34,119535,119536,119538,119540,119542],{"class":36,"line":51},[34,119537,25229],{"class":149},[34,119539,27164],{"class":156},[34,119541,119530],{"class":156},[34,119543,119544],{"class":156}," snapd.socket\n",[34,119546,119547,119549,119551,119553],{"class":36,"line":60},[34,119548,25229],{"class":149},[34,119550,27164],{"class":156},[34,119552,119530],{"class":156},[34,119554,119555],{"class":156}," snapd.seeded.service\n",[108,119557,119558],{},"然后查看snap应用列表",[108,119560,119561,119562,119567],{},"根据你安装的选择不同（最小安装或普通安装），有",[520,119563,119566],{"href":119564,"rel":119565},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24517],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[24,119569,119571],{"className":117926,"code":119570,"language":117928,"meta":29,"style":29},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[31,119572,119573,119578],{"__ignoreMap":29},[34,119574,119575],{"class":36,"line":37},[34,119576,119577],{"class":205},"# 查询当前系统上snap安装了哪些app\n",[34,119579,119580,119583],{"class":36,"line":51},[34,119581,119582],{"class":149},"snap",[34,119584,119585],{"class":156}," list\n",[108,119587,119588],{},[2122,119589],{"alt":29,"src":119590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[108,119592,119593,119594,119597],{},"卸载掉图中所有应用，按照 ",[111,119595,119596],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[24,119599,119601],{"className":117926,"code":119600,"language":117928,"meta":29,"style":29},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[31,119602,119603,119608,119620,119625,119636,119641,119652,119657,119668,119673,119677,119682,119693,119704],{"__ignoreMap":29},[34,119604,119605],{"class":36,"line":37},[34,119606,119607],{"class":205},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[34,119609,119610,119612,119615,119617],{"class":36,"line":51},[34,119611,25229],{"class":149},[34,119613,119614],{"class":156}," snap",[34,119616,26731],{"class":156},[34,119618,119619],{"class":156}," snap-store\n",[34,119621,119622],{"class":36,"line":60},[34,119623,119624],{"class":205},"#移除firefox浏览器\n",[34,119626,119627,119629,119631,119633],{"class":36,"line":76},[34,119628,25229],{"class":149},[34,119630,119614],{"class":156},[34,119632,26731],{"class":156},[34,119634,119635],{"class":156}," firefox\n",[34,119637,119638],{"class":36,"line":93},[34,119639,119640],{"class":205},"#移除gnome-42-2204\n",[34,119642,119643,119645,119647,119649],{"class":36,"line":99},[34,119644,25229],{"class":149},[34,119646,119614],{"class":156},[34,119648,26731],{"class":156},[34,119650,119651],{"class":156}," gnome-42-2204\n",[34,119653,119654],{"class":36,"line":353},[34,119655,119656],{"class":205},"#移除gtk-common-themes\n",[34,119658,119659,119661,119663,119665],{"class":36,"line":359},[34,119660,25229],{"class":149},[34,119662,119614],{"class":156},[34,119664,26731],{"class":156},[34,119666,119667],{"class":156}," gtk-common-themes\n",[34,119669,119670],{"class":36,"line":579},[34,119671,119672],{"class":205},"#移除其它...\n",[34,119674,119675],{"class":36,"line":589},[34,119676,3327],{"class":40},[34,119678,119679],{"class":36,"line":601},[34,119680,119681],{"class":205},"#移除core22,bare以及snapd\n",[34,119683,119684,119686,119688,119690],{"class":36,"line":613},[34,119685,25229],{"class":149},[34,119687,119614],{"class":156},[34,119689,26731],{"class":156},[34,119691,119692],{"class":156}," core22\n",[34,119694,119695,119697,119699,119701],{"class":36,"line":618},[34,119696,25229],{"class":149},[34,119698,119614],{"class":156},[34,119700,26731],{"class":156},[34,119702,119703],{"class":156}," bare\n",[34,119705,119706,119708,119710,119712],{"class":36,"line":628},[34,119707,25229],{"class":149},[34,119709,119614],{"class":156},[34,119711,26731],{"class":156},[34,119713,119714],{"class":156}," snapd\n",[108,119716,119717],{},[2122,119718],{"alt":29,"src":119719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[108,119721,119722],{},"输入以下命令查看是否还有snap包",[24,119724,119726],{"className":117926,"code":119725,"language":117928,"meta":29,"style":29},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[31,119727,119728,119734,119738,119742,119746],{"__ignoreMap":29},[34,119729,119730,119732],{"class":36,"line":37},[34,119731,119582],{"class":149},[34,119733,119585],{"class":156},[34,119735,119736],{"class":36,"line":51},[34,119737,119434],{"class":205},[34,119739,119740],{"class":36,"line":60},[34,119741,119458],{"class":149},[34,119743,119744],{"class":36,"line":76},[34,119745,119467],{"class":205},[34,119747,119748],{"class":36,"line":93},[34,119749,119501],{"class":149},[108,119751,119752],{},[2122,119753],{"alt":29,"src":119754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[19,119756,119758],{"id":119757},"_324-移除snap","3.2.4 移除snap",[108,119760,119761,119762,119767],{},"在删除掉",[520,119763,119766],{"href":119764,"rel":119765},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24517],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[24,119769,119771],{"className":117926,"code":119770,"language":117928,"meta":29,"style":29}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[31,119772,119773,119778,119791,119796,119807],{"__ignoreMap":29},[34,119774,119775],{"class":36,"line":37},[34,119776,119777],{"class":205}," #使用apt移除掉snap\n",[34,119779,119780,119782,119784,119786,119789],{"class":36,"line":51},[34,119781,25229],{"class":149},[34,119783,117947],{"class":156},[34,119785,118255],{"class":156},[34,119787,119788],{"class":63}," --purge",[34,119790,119714],{"class":156},[34,119792,119793],{"class":36,"line":60},[34,119794,119795],{"class":205},"#移除snapd的一些目录\n",[34,119797,119798,119800,119802,119804],{"class":36,"line":76},[34,119799,25229],{"class":149},[34,119801,119183],{"class":156},[34,119803,25978],{"class":63},[34,119805,119806],{"class":156}," \u002Fvar\u002Fcache\u002Fsnapd\n",[34,119808,119809,119811,119813,119815],{"class":36,"line":93},[34,119810,25229],{"class":149},[34,119812,119183],{"class":156},[34,119814,25978],{"class":63},[34,119816,119817],{"class":156}," ~\u002Fsnap\n",[108,119819,119820,119821,119824],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[31,119822,119823],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[19,119826,119828],{"id":119827},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[108,119830,119831],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[24,119833,119835],{"className":117926,"code":119834,"language":117928,"meta":29,"style":29},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[31,119836,119837],{"__ignoreMap":29},[34,119838,119839,119841,119843],{"class":36,"line":37},[34,119840,25229],{"class":149},[34,119842,119213],{"class":156},[34,119844,119845],{"class":156}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[108,119847,119848,119849,119852],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[31,119850,119851],{},":wq"," 回车",[24,119854,119856],{"className":117926,"code":119855,"language":117928,"meta":29,"style":29},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[31,119857,119858,119865,119879],{"__ignoreMap":29},[34,119859,119860,119863],{"class":36,"line":37},[34,119861,119862],{"class":149},"Package:",[34,119864,119714],{"class":156},[34,119866,119867,119870,119873,119876],{"class":36,"line":51},[34,119868,119869],{"class":149},"Pin:",[34,119871,119872],{"class":156}," release",[34,119874,119875],{"class":156}," a=",[34,119877,119878],{"class":63},"*\n",[34,119880,119881,119884],{"class":36,"line":60},[34,119882,119883],{"class":149},"Pin-Priority:",[34,119885,119886],{"class":63}," -10\n",[108,119888,119889],{},[2122,119890],{"alt":29,"src":119891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[19,119893,119895],{"id":119894},"_326-测试是否成功","3.2.6 测试是否成功",[24,119897,119899],{"className":117926,"code":119898,"language":117928,"meta":29,"style":29},"sudo apt update\nsudo apt install firefox\n",[31,119900,119901,119909],{"__ignoreMap":29},[34,119902,119903,119905,119907],{"class":36,"line":37},[34,119904,25229],{"class":149},[34,119906,117947],{"class":156},[34,119908,26894],{"class":156},[34,119910,119911,119913,119915,119917],{"class":36,"line":51},[34,119912,25229],{"class":149},[34,119914,117947],{"class":156},[34,119916,24486],{"class":156},[34,119918,119635],{"class":156},[108,119920,119921],{},"这里提示snapd无法被安装，就证明成功了",[108,119923,119924],{},[2122,119925],{"alt":29,"src":119926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[19,119928,119930],{"id":119929},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[108,119932,119933],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[108,119935,119936],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[108,119938,119939],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[24,119941,119943],{"className":117926,"code":119942,"language":117928,"meta":29,"style":29},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[31,119944,119945,119950,119959,119964,119972],{"__ignoreMap":29},[34,119946,119947],{"class":36,"line":37},[34,119948,119949],{"class":205},"# 添加Mozilla提供的源\n",[34,119951,119952,119954,119956],{"class":36,"line":51},[34,119953,25229],{"class":149},[34,119955,119474],{"class":156},[34,119957,119958],{"class":156}," ppa:mozillateam\u002Fppa\n",[34,119960,119961],{"class":36,"line":60},[34,119962,119963],{"class":205},"# 安装Firefox\n",[34,119965,119966,119968,119970],{"class":36,"line":76},[34,119967,25229],{"class":149},[34,119969,117947],{"class":156},[34,119971,26894],{"class":156},[34,119973,119974,119976,119978,119980],{"class":36,"line":93},[34,119975,25229],{"class":149},[34,119977,117947],{"class":156},[34,119979,24486],{"class":156},[34,119981,119635],{"class":156},[19,119983,119985],{"id":119984},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[108,119987,119988],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[108,119990,119991],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[24,119993,119995],{"className":117926,"code":119994,"language":117928,"meta":29,"style":29},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[31,119996,119997,120002,120012,120020,120024],{"__ignoreMap":29},[34,119998,119999],{"class":36,"line":37},[34,120000,120001],{"class":205},"#删掉禁止安装snap的配置文件\n",[34,120003,120004,120006,120008,120010],{"class":36,"line":51},[34,120005,25229],{"class":149},[34,120007,119183],{"class":156},[34,120009,25978],{"class":63},[34,120011,119845],{"class":156},[34,120013,120014,120016,120018],{"class":36,"line":60},[34,120015,25229],{"class":149},[34,120017,117947],{"class":156},[34,120019,26894],{"class":156},[34,120021,120022],{"class":36,"line":76},[34,120023,3053],{"emptyLinePlaceholder":726},[34,120025,120026,120028,120030],{"class":36,"line":93},[34,120027,25229],{"class":149},[34,120029,117947],{"class":156},[34,120031,120032],{"class":156}," dist-update\n",[14,120034,120036],{"id":120035},"_33-中文输入法","3.3 中文输入法",[19,120038,120040],{"id":120039},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[108,120042,120043],{},"官网下载搜狗输入法",[108,120045,120046],{},[2122,120047],{"alt":29,"src":120048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[108,120050,120051],{},[2122,120052],{"alt":29,"src":120053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[108,120055,120056],{},"打开终端输入如下",[24,120058,120060],{"className":117926,"code":120059,"language":117928,"meta":29,"style":29},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[31,120061,120062,120069],{"__ignoreMap":29},[34,120063,120064,120066],{"class":36,"line":37},[34,120065,101906],{"class":63},[34,120067,120068],{"class":156}," ~\u002FDownloads\u002F\n",[34,120070,120071,120073,120075,120077],{"class":36,"line":51},[34,120072,25229],{"class":149},[34,120074,117947],{"class":156},[34,120076,24486],{"class":156},[34,120078,120079],{"class":156}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[108,120081,120082],{},"打开Fcitx",[108,120084,120085,120088],{},[2122,120086],{"alt":29,"src":120087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2122,120089],{"alt":29,"src":120090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[108,120092,120093],{},[2122,120094],{"alt":29,"src":120095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[108,120097,120098],{},"添加搜狗输入法",[108,120100,120101],{},[2122,120102],{"alt":29,"src":120103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[108,120105,120106],{},[2122,120107],{"alt":29,"src":120108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[108,120110,120111],{},"将搜狗输入法设置为唯一输入法",[108,120113,120114],{},[2122,120115],{"alt":29,"src":120116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[19,120118,120120],{"id":120119},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[752,120122,120123],{},[755,120124,120125],{},"卸载旧输入法",[24,120127,120129],{"className":119153,"code":120128,"language":119155,"meta":29,"style":29},"sudo apt purge fcitx* ibus*\n",[31,120130,120131],{"__ignoreMap":29},[34,120132,120133,120135,120137,120139,120142,120144,120147],{"class":36,"line":37},[34,120134,25229],{"class":149},[34,120136,117947],{"class":156},[34,120138,118288],{"class":156},[34,120140,120141],{"class":156}," fcitx",[34,120143,1250],{"class":63},[34,120145,120146],{"class":156}," ibus",[34,120148,119878],{"class":63},[752,120150,120151],{"start":51},[755,120152,120153],{},"安装Fcitx5",[24,120155,120157],{"className":117926,"code":120156,"language":117928,"meta":29,"style":29},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[31,120158,120159,120164,120178,120182,120187,120196,120204],{"__ignoreMap":29},[34,120160,120161],{"class":36,"line":37},[34,120162,120163],{"class":205},"# Ubuntu22.04及以上、Debian12及以上\n",[34,120165,120166,120168,120170,120172,120175],{"class":36,"line":51},[34,120167,25229],{"class":149},[34,120169,117947],{"class":156},[34,120171,24486],{"class":156},[34,120173,120174],{"class":156}," fcitx5",[34,120176,120177],{"class":156}," fcitx5-chinese-addons\n",[34,120179,120180],{"class":36,"line":60},[34,120181,3053],{"emptyLinePlaceholder":726},[34,120183,120184],{"class":36,"line":76},[34,120185,120186],{"class":205},"# Ubuntu20.04\n",[34,120188,120189,120191,120193],{"class":36,"line":93},[34,120190,25229],{"class":149},[34,120192,119474],{"class":156},[34,120194,120195],{"class":156}," ppa:zhsj\u002Ffcitx5\n",[34,120197,120198,120200,120202],{"class":36,"line":99},[34,120199,25229],{"class":149},[34,120201,117947],{"class":156},[34,120203,26894],{"class":156},[34,120205,120206,120208,120210,120212,120214],{"class":36,"line":353},[34,120207,25229],{"class":149},[34,120209,117947],{"class":156},[34,120211,24486],{"class":156},[34,120213,120174],{"class":156},[34,120215,120177],{"class":156},[752,120217,120218,120221],{"start":60},[755,120219,120220],{},"Reboot System",[755,120222,120223],{},"启动Fcitx5",[108,120225,120226],{},[2122,120227],{"alt":29,"src":120228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[752,120230,120231],{"start":93},[755,120232,120233],{},"修改一些设置",[108,120235,120236],{},"将Pinyin和Keyboard - English US加入到左边。",[108,120238,120239],{},[2122,120240],{"alt":29,"src":120241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[108,120243,120244],{},"添加快捷键以便于更好切换中英文",[108,120246,120247],{},[2122,120248],{"alt":29,"src":120249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[752,120251,120252],{"start":99},[755,120253,120254],{},"重启",[24,120256,120258],{"className":119153,"code":120257,"language":119155,"meta":29,"style":29},"sudo shutdown -r now\n",[31,120259,120260],{"__ignoreMap":29},[34,120261,120262,120264,120267,120270],{"class":36,"line":37},[34,120263,25229],{"class":149},[34,120265,120266],{"class":156}," shutdown",[34,120268,120269],{"class":63}," -r",[34,120271,120272],{"class":156}," now\n",[752,120274,120275],{"start":353},[755,120276,120277],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[108,120279,120280],{},[520,120281,120282],{"href":120282,"rel":120283},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24517],[752,120285,120286],{"start":359},[755,120287,120288],{},"再重启",[24,120290,120291],{"className":119153,"code":120257,"language":119155,"meta":29,"style":29},[31,120292,120293],{"__ignoreMap":29},[34,120294,120295,120297,120299,120301],{"class":36,"line":37},[34,120296,25229],{"class":149},[34,120298,120266],{"class":156},[34,120300,120269],{"class":63},[34,120302,120272],{"class":156},[14,120304,120306],{"id":120305},"_34-pip3源替换","3.4 pip3源替换",[108,120308,120309],{},"非Debian系发行版需要做。",[108,120311,120312],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[108,120314,120315],{},"使用dnf的系统也可能不用做。",[24,120317,120319],{"className":117926,"code":120318,"language":117928,"meta":29,"style":29},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[31,120320,120321,120326,120333,120338,120343],{"__ignoreMap":29},[34,120322,120323],{"class":36,"line":37},[34,120324,120325],{"class":205},"# 检查是否已安装 pip\n",[34,120327,120328,120331],{"class":36,"line":51},[34,120329,120330],{"class":149},"pip3",[34,120332,26945],{"class":63},[34,120334,120335],{"class":36,"line":60},[34,120336,120337],{"class":205},"# 如果未安装，先安装 pip3（见下方）\n",[34,120339,120340],{"class":36,"line":76},[34,120341,120342],{"class":205},"# 配置 pip 使用清华源\n",[34,120344,120345,120347,120350,120353,120356],{"class":36,"line":93},[34,120346,120330],{"class":149},[34,120348,120349],{"class":156}," config",[34,120351,120352],{"class":156}," set",[34,120354,120355],{"class":156}," global.index-url",[34,120357,120358],{"class":156}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[108,120360,120361],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[108,120363,120364],{},[2122,120365],{"alt":29,"src":120366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[24,120368,120370],{"className":117926,"code":120369,"language":117928,"meta":29,"style":29},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[31,120371,120372,120377,120385,120396,120400,120405,120424,120428,120433,120445,120449,120454],{"__ignoreMap":29},[34,120373,120374],{"class":36,"line":37},[34,120375,120376],{"class":205},"#安装pip3\n",[34,120378,120379,120381,120383],{"class":36,"line":51},[34,120380,25229],{"class":149},[34,120382,117947],{"class":156},[34,120384,26894],{"class":156},[34,120386,120387,120389,120391,120393],{"class":36,"line":60},[34,120388,25229],{"class":149},[34,120390,26728],{"class":156},[34,120392,24486],{"class":156},[34,120394,120395],{"class":156}," python3-pip\n",[34,120397,120398],{"class":36,"line":76},[34,120399,3053],{"emptyLinePlaceholder":726},[34,120401,120402],{"class":36,"line":93},[34,120403,120404],{"class":205},"#更新pip3\n",[34,120406,120407,120409,120411,120413,120415,120417,120420,120422],{"class":36,"line":99},[34,120408,101509],{"class":149},[34,120410,101512],{"class":63},[34,120412,101535],{"class":156},[34,120414,24486],{"class":156},[34,120416,27082],{"class":63},[34,120418,120419],{"class":156}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[34,120421,101540],{"class":63},[34,120423,101543],{"class":156},[34,120425,120426],{"class":36,"line":353},[34,120427,3053],{"emptyLinePlaceholder":726},[34,120429,120430],{"class":36,"line":359},[34,120431,120432],{"class":205},"#设置pip源为清华源\n",[34,120434,120435,120437,120439,120441,120443],{"class":36,"line":579},[34,120436,120330],{"class":149},[34,120438,120349],{"class":156},[34,120440,120352],{"class":156},[34,120442,120355],{"class":156},[34,120444,120358],{"class":156},[34,120446,120447],{"class":36,"line":589},[34,120448,3053],{"emptyLinePlaceholder":726},[34,120450,120451],{"class":36,"line":601},[34,120452,120453],{"class":205},"#测试\n",[34,120455,120456,120458,120460,120462,120464,120466],{"class":36,"line":613},[34,120457,101509],{"class":149},[34,120459,101512],{"class":63},[34,120461,101535],{"class":156},[34,120463,24486],{"class":156},[34,120465,101540],{"class":63},[34,120467,101543],{"class":156},[108,120469,120470],{},"成功的话，会看到Looking后面是tsinghua字样。",[108,120472,120473],{},[2122,120474],{"alt":29,"src":120475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120477,120479],{"id":120478},"_35-显卡驱动安装","3.5 显卡驱动安装",[19,120481,120483],{"id":120482},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[24,120485,120487],{"className":119153,"code":120486,"language":119155,"meta":29,"style":29},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[31,120488,120489,120494,120509,120514],{"__ignoreMap":29},[34,120490,120491],{"class":36,"line":37},[34,120492,120493],{"class":205},"# 如果是使用apt安装的驱动\n",[34,120495,120496,120498,120500,120502,120504,120507],{"class":36,"line":51},[34,120497,25229],{"class":149},[34,120499,26728],{"class":156},[34,120501,26731],{"class":156},[34,120503,119788],{"class":63},[34,120505,120506],{"class":156}," nvidia",[34,120508,119878],{"class":63},[34,120510,120511],{"class":36,"line":60},[34,120512,120513],{"class":205},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[34,120515,120516,120518],{"class":36,"line":76},[34,120517,25229],{"class":149},[34,120519,120520],{"class":156}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[19,120522,120524],{"id":120523},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22650,120526,120528],{"id":120527},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23562,120530,120532],{"id":120531},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[24,120534,120536],{"className":119153,"code":120535,"language":119155,"meta":29,"style":29},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,120537,120538,120543,120554,120559,120569,120574],{"__ignoreMap":29},[34,120539,120540],{"class":36,"line":37},[34,120541,120542],{"class":205},"# 安装英伟达驱动\n",[34,120544,120545,120547,120549,120551],{"class":36,"line":51},[34,120546,25229],{"class":149},[34,120548,117947],{"class":156},[34,120550,24486],{"class":156},[34,120552,120553],{"class":156}," nvidia-driver-版本号\n",[34,120555,120556],{"class":36,"line":60},[34,120557,120558],{"class":205},"# 重启 \n",[34,120560,120561,120563,120565,120567],{"class":36,"line":76},[34,120562,25229],{"class":149},[34,120564,120266],{"class":156},[34,120566,120269],{"class":63},[34,120568,120272],{"class":156},[34,120570,120571],{"class":36,"line":93},[34,120572,120573],{"class":205},"# 检查驱动是否安装成功\n",[34,120575,120576],{"class":36,"line":99},[34,120577,120578],{"class":149},"nvidia-smi\n",[23562,120580,120582],{"id":120581},"_35212-debian","3.5.2.1.2 Debian",[24,120584,120586],{"className":119153,"code":120585,"language":119155,"meta":29,"style":29},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,120587,120588,120592,120606,120610,120620,120624],{"__ignoreMap":29},[34,120589,120590],{"class":36,"line":37},[34,120591,120542],{"class":205},[34,120593,120594,120596,120598,120600,120603],{"class":36,"line":51},[34,120595,25229],{"class":149},[34,120597,117947],{"class":156},[34,120599,24486],{"class":156},[34,120601,120602],{"class":156}," nvidia-driver",[34,120604,120605],{"class":156}," nvidia-settings\n",[34,120607,120608],{"class":36,"line":60},[34,120609,120558],{"class":205},[34,120611,120612,120614,120616,120618],{"class":36,"line":76},[34,120613,25229],{"class":149},[34,120615,120266],{"class":156},[34,120617,120269],{"class":63},[34,120619,120272],{"class":156},[34,120621,120622],{"class":36,"line":93},[34,120623,120573],{"class":205},[34,120625,120626],{"class":36,"line":99},[34,120627,120578],{"class":149},[22650,120629,120631],{"id":120630},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[108,120633,120634,120635,120638],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[111,120636,120637],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[108,120640,120641,120642],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24205,120643,120644],{},[111,120645,120646],{},"（也可以不禁用桌面环境，直接进行下一步。）",[24,120648,120650],{"className":119153,"code":120649,"language":119155,"meta":29,"style":29},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[31,120651,120652,120657,120667,120672,120685,120690],{"__ignoreMap":29},[34,120653,120654],{"class":36,"line":37},[34,120655,120656],{"class":205},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[34,120658,120659,120661,120664],{"class":36,"line":51},[34,120660,25229],{"class":149},[34,120662,120663],{"class":156}," telinit",[34,120665,120666],{"class":63}," 3\n",[34,120668,120669],{"class":36,"line":60},[34,120670,120671],{"class":205},"# ubuntu 使用下方命令\n",[34,120673,120674,120676,120679,120682],{"class":36,"line":76},[34,120675,25229],{"class":149},[34,120677,120678],{"class":156}," service",[34,120680,120681],{"class":156}," lightdm",[34,120683,120684],{"class":156}," stop\n",[34,120686,120687],{"class":36,"line":93},[34,120688,120689],{"class":205},"# Fedora 使用下方命令\n",[34,120691,120692,120694,120696,120699],{"class":36,"line":99},[34,120693,25229],{"class":149},[34,120695,27164],{"class":156},[34,120697,120698],{"class":156}," isolate",[34,120700,120701],{"class":156}," multi-user.target\n",[108,120703,120704],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[24,120706,120708],{"className":119153,"code":120707,"language":119155,"meta":29,"style":29},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[31,120709,120710,120715,120726,120731,120738,120743,120755,120760,120767,120772],{"__ignoreMap":29},[34,120711,120712],{"class":36,"line":37},[34,120713,120714],{"class":205},"# 编译环境+准备工作\n",[34,120716,120717,120719,120721,120723],{"class":36,"line":51},[34,120718,25229],{"class":149},[34,120720,117947],{"class":156},[34,120722,24486],{"class":156},[34,120724,120725],{"class":156}," build-essential\n",[34,120727,120728],{"class":36,"line":60},[34,120729,120730],{"class":205},"# 进入到.run目录中\n",[34,120732,120733,120735],{"class":36,"line":76},[34,120734,101906],{"class":63},[34,120736,120737],{"class":156}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[34,120739,120740],{"class":36,"line":93},[34,120741,120742],{"class":205},"# 给驱动文件增加可执行权限：\n",[34,120744,120745,120747,120749,120752],{"class":36,"line":99},[34,120746,25229],{"class":149},[34,120748,25232],{"class":156},[34,120750,120751],{"class":156}," a+x",[34,120753,120754],{"class":156}," NVIDIA-Linux-x86_64-550.107.02.run\n",[34,120756,120757],{"class":36,"line":353},[34,120758,120759],{"class":205},"# 然后执行安装：\n",[34,120761,120762,120764],{"class":36,"line":359},[34,120763,25229],{"class":149},[34,120765,120766],{"class":156}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[34,120768,120769],{"class":36,"line":579},[34,120770,120771],{"class":205},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[34,120773,120774,120776,120779],{"class":36,"line":589},[34,120775,25229],{"class":149},[34,120777,120778],{"class":156}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[34,120780,120781],{"class":63},"  --no-opengl-files\n",[108,120783,120784],{},"安装完毕重启即可",[24,120786,120788],{"className":119153,"code":120787,"language":119155,"meta":29,"style":29},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,120789,120790,120794,120800,120804],{"__ignoreMap":29},[34,120791,120792],{"class":36,"line":37},[34,120793,120558],{"class":205},[34,120795,120796,120798],{"class":36,"line":51},[34,120797,25229],{"class":149},[34,120799,27298],{"class":156},[34,120801,120802],{"class":36,"line":60},[34,120803,120573],{"class":205},[34,120805,120806],{"class":36,"line":76},[34,120807,120578],{"class":149},[19,120809,120811],{"id":120810},"_353-安装cuda","3.5.3 安装CUDA",[108,120813,120814],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[108,120816,120817],{},[2122,120818],{"alt":29,"src":120819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[752,120821,120822],{},[755,120823,120824],{},"先查看显卡驱动所支持的最高CUDA版本",[24,120826,120827],{"className":119153,"code":120578,"language":119155,"meta":29,"style":29},[31,120828,120829],{"__ignoreMap":29},[34,120830,120831],{"class":36,"line":37},[34,120832,120578],{"class":149},[108,120834,120835],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[108,120837,120838],{},[2122,120839],{"alt":29,"src":120840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[752,120842,120843],{"start":51},[755,120844,120845],{},"下载CUDA并安装CUDA",[108,120847,118932,120848],{},[520,120849,118935],{"href":118935,"rel":120850},[24517],[108,120852,120853],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[108,120855,120856],{},[2122,120857],{"alt":29,"src":120858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[108,120860,120861,120862,120867],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[520,120863,120866],{"href":120864,"rel":120865},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24517],"Vinci机器人队单片机教程","）",[108,120869,120870],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[108,120872,120873],{},[2122,120874],{"alt":29,"src":120875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[108,120877,120878],{},"将最下方框框里的命令敲入终端",[24,120880,120882],{"className":119153,"code":120881,"language":119155,"meta":29,"style":29},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[31,120883,120884,120889,120898,120903,120910,120915,120923,120928,120939,120944],{"__ignoreMap":29},[34,120885,120886],{"class":36,"line":37},[34,120887,120888],{"class":205},"# 在当前文件夹下创建一个ttt的子文件夹\n",[34,120890,120891,120893,120895],{"class":36,"line":51},[34,120892,101896],{"class":149},[34,120894,29867],{"class":63},[34,120896,120897],{"class":156}," .\u002Fttt\n",[34,120899,120900],{"class":36,"line":60},[34,120901,120902],{"class":205},"# 进入ttt文件夹\n",[34,120904,120905,120907],{"class":36,"line":76},[34,120906,101906],{"class":63},[34,120908,120909],{"class":156}," ttt\n",[34,120911,120912],{"class":36,"line":93},[34,120913,120914],{"class":205},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[34,120916,120917,120920],{"class":36,"line":99},[34,120918,120919],{"class":149},"wget",[34,120921,120922],{"class":156}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[34,120924,120925],{"class":36,"line":353},[34,120926,120927],{"class":205},"# 给予权限\n",[34,120929,120930,120932,120934,120936],{"class":36,"line":359},[34,120931,25229],{"class":149},[34,120933,25232],{"class":156},[34,120935,120751],{"class":156},[34,120937,120938],{"class":156}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[34,120940,120941],{"class":36,"line":579},[34,120942,120943],{"class":205},"# 运行脚本\n",[34,120945,120946,120948],{"class":36,"line":589},[34,120947,25229],{"class":149},[34,120949,120938],{"class":156},[108,120951,120952],{},[2122,120953],{"alt":29,"src":120954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[108,120956,120957],{},"正在安装中：",[108,120959,120960],{},[2122,120961],{"alt":29,"src":120962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[108,120964,120965],{},"输入accept接受即可",[108,120967,120968],{},[2122,120969],{"alt":29,"src":120970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[108,120972,120973],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[108,120975,120976],{},[2122,120977],{"alt":29,"src":120978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[108,120980,120981],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[108,120983,120984],{},[2122,120985],{"alt":29,"src":120986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[752,120988,120989],{"start":60},[755,120990,120991],{},"配置环境",[108,120993,120994],{},"根据上方确认一下路径，比如我上面红色框起来的为",[24,120996,120998],{"className":119153,"code":120997,"language":119155,"meta":29,"style":29},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[31,120999,121000,121016,121031],{"__ignoreMap":29},[34,121001,121002,121005,121008,121011,121014],{"class":36,"line":37},[34,121003,121004],{"class":149},"Please",[34,121006,121007],{"class":156}," make",[34,121009,121010],{"class":156}," sure",[34,121012,121013],{"class":156}," that",[34,121015,3327],{"class":40},[34,121017,121018,121020,121023,121026,121029],{"class":36,"line":51},[34,121019,52917],{"class":149},[34,121021,121022],{"class":156},"   PATH",[34,121024,121025],{"class":156}," includes",[34,121027,121028],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[34,121030,3327],{"class":40},[34,121032,121033,121035,121038,121040,121043,121046,121048,121051,121054,121057,121060,121062,121065,121067],{"class":36,"line":60},[34,121034,52917],{"class":149},[34,121036,121037],{"class":156},"   LD_LIBRARY_PATH",[34,121039,121025],{"class":156},[34,121041,121042],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[34,121044,121045],{"class":156}," or,",[34,121047,5862],{"class":156},[34,121049,121050],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[34,121052,121053],{"class":156}," to",[34,121055,121056],{"class":156}," \u002Fetc\u002Fld.so.conf",[34,121058,121059],{"class":156}," and",[34,121061,27881],{"class":156},[34,121063,121064],{"class":156}," ldconfig",[34,121066,65242],{"class":156},[34,121068,121069],{"class":156}," root\n",[108,121071,121072],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[24,121074,121076],{"className":119153,"code":121075,"language":119155,"meta":29,"style":29},"which nvcc\n",[31,121077,121078],{"__ignoreMap":29},[34,121079,121080,121083],{"class":36,"line":37},[34,121081,121082],{"class":63},"which",[34,121084,121085],{"class":156}," nvcc\n",[108,121087,121088],{},[2122,121089],{"alt":29,"src":121090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[108,121092,121093],{},"所以我进行以下操作：",[24,121095,121097],{"className":119153,"code":121096,"language":119155,"meta":29,"style":29},"sudo vim ~\u002F.bashrc\n",[31,121098,121099],{"__ignoreMap":29},[34,121100,121101,121103,121105],{"class":36,"line":37},[34,121102,25229],{"class":149},[34,121104,119213],{"class":156},[34,121106,121107],{"class":156}," ~\u002F.bashrc\n",[108,121109,121110],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[24,121112,121114],{"className":119153,"code":121113,"language":119155,"meta":29,"style":29},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[31,121115,121116,121128],{"__ignoreMap":29},[34,121117,121118,121120,121123,121125],{"class":36,"line":37},[34,121119,25695],{"class":87},[34,121121,121122],{"class":40}," PATH",[34,121124,153],{"class":87},[34,121126,121127],{"class":40},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[34,121129,121130,121132,121135,121137],{"class":36,"line":51},[34,121131,25695],{"class":87},[34,121133,121134],{"class":40}," LD_LIBRARY_PATH",[34,121136,153],{"class":87},[34,121138,121139],{"class":40},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[108,121141,121142],{},[2122,121143],{"alt":29,"src":121144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[24,121146,121148],{"className":119153,"code":121147,"language":119155,"meta":29,"style":29},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[31,121149,121150,121155,121161,121166],{"__ignoreMap":29},[34,121151,121152],{"class":36,"line":37},[34,121153,121154],{"class":205},"# 刷新当前终端的环境变量\n",[34,121156,121157,121159],{"class":36,"line":51},[34,121158,101523],{"class":63},[34,121160,121107],{"class":156},[34,121162,121163],{"class":36,"line":60},[34,121164,121165],{"class":205},"# 验证CUDA是否安装成功\n",[34,121167,121168,121171],{"class":36,"line":76},[34,121169,121170],{"class":149},"nvcc",[34,121172,121173],{"class":63}," -V\n",[108,121175,121176],{},"出现下图这种则安装成功。",[108,121178,121179],{},[2122,121180],{"alt":29,"src":121181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[19,121183,121185],{"id":121184},"_354-安装cudnn","3.5.4 安装cuDNN",[752,121187,121188],{},[755,121189,121190],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[108,121192,121193,121194,121199],{},"前往 NVIDIA cuDNN 下载页面：",[520,121195,121198],{"href":121196,"rel":121197},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24517],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[108,121201,121202],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[108,121204,121205],{},[2122,121206],{"alt":29,"src":121207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[108,121209,121210],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[108,121212,121213],{},[2122,121214],{"alt":29,"src":121215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[108,121217,121218],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[108,121220,121221],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[108,121223,121224],{},[111,121225,121226],{},"我这里选择所有Linux X86_64最通用的办法：",[108,121228,121229],{},"下载好的：",[108,121231,121232],{},[2122,121233],{"alt":29,"src":121234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[752,121236,121237],{"start":51},[755,121238,121239],{},"安装cuDNN",[108,121241,121242],{},"找到该文件所在目录，并打开终端，cd到该目录。",[108,121244,121245],{},[2122,121246],{"alt":29,"src":121247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[108,121249,121250],{},"解压文件，并复制到对应位置完成安装",[24,121252,121254],{"className":119153,"code":121253,"language":119155,"meta":29,"style":29},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[31,121255,121256,121261,121272,121277,121284,121289,121305,121319,121324,121335,121344,121348,121364],{"__ignoreMap":29},[34,121257,121258],{"class":36,"line":37},[34,121259,121260],{"class":205},"# 解压cuDNN文件\n",[34,121262,121263,121266,121269],{"class":36,"line":51},[34,121264,121265],{"class":149},"tar",[34,121267,121268],{"class":63}," -xvf",[34,121270,121271],{"class":156}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[34,121273,121274],{"class":36,"line":60},[34,121275,121276],{"class":205},"# cd进文件夹\n",[34,121278,121279,121281],{"class":36,"line":76},[34,121280,101906],{"class":63},[34,121282,121283],{"class":156}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[34,121285,121286],{"class":36,"line":93},[34,121287,121288],{"class":205},"# 复制cuDNN文件到CUDA目录\n",[34,121290,121291,121293,121295,121298,121300,121303],{"class":36,"line":99},[34,121292,25229],{"class":149},[34,121294,28512],{"class":156},[34,121296,121297],{"class":156}," include\u002Fcudnn",[34,121299,1250],{"class":63},[34,121301,121302],{"class":156},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[34,121304,3327],{"class":40},[34,121306,121307,121309,121311,121314,121316],{"class":36,"line":353},[34,121308,25229],{"class":149},[34,121310,28512],{"class":156},[34,121312,121313],{"class":156}," lib\u002Flibcudnn",[34,121315,1250],{"class":63},[34,121317,121318],{"class":156},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[34,121320,121321],{"class":36,"line":359},[34,121322,121323],{"class":205},"# 对比一下有没有缺文件\n",[34,121325,121326,121328,121331,121333],{"class":36,"line":579},[34,121327,27412],{"class":149},[34,121329,121330],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[34,121332,1250],{"class":63},[34,121334,3327],{"class":40},[34,121336,121337,121339,121342],{"class":36,"line":589},[34,121338,27412],{"class":149},[34,121340,121341],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[34,121343,119878],{"class":63},[34,121345,121346],{"class":36,"line":601},[34,121347,120927],{"class":205},[34,121349,121350,121352,121354,121357,121359,121361],{"class":36,"line":613},[34,121351,25229],{"class":149},[34,121353,25232],{"class":156},[34,121355,121356],{"class":156}," a+r",[34,121358,121330],{"class":156},[34,121360,1250],{"class":63},[34,121362,121363],{"class":40},"   \n",[34,121365,121366,121368,121370,121372,121374],{"class":36,"line":618},[34,121367,25229],{"class":149},[34,121369,25232],{"class":156},[34,121371,121356],{"class":156},[34,121373,121341],{"class":156},[34,121375,119878],{"class":63},[752,121377,121378],{"start":60},[755,121379,121380],{},"检查是否安装成功",[24,121382,121384],{"className":119153,"code":121383,"language":119155,"meta":29,"style":29},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[31,121385,121386,121391],{"__ignoreMap":29},[34,121387,121388],{"class":36,"line":37},[34,121389,121390],{"class":205},"# 检查cuDNN版本命令\n",[34,121392,121393,121396,121399,121401,121403,121406,121409],{"class":36,"line":51},[34,121394,121395],{"class":149},"cat",[34,121397,121398],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[34,121400,25762],{"class":87},[34,121402,30887],{"class":149},[34,121404,121405],{"class":156}," CUDNN_MAJOR",[34,121407,121408],{"class":63}," -A",[34,121410,48374],{"class":63},[108,121412,121413],{},"出现下图这样的就是安装成功了",[108,121415,121416],{},[2122,121417],{"alt":29,"src":121418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[752,121420,121421],{"start":76},[755,121422,121423],{},"软链接(一般不需要)",[24,121425,121427],{"className":119153,"code":121426,"language":119155,"meta":29,"style":29},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[31,121428,121429,121434],{"__ignoreMap":29},[34,121430,121431],{"class":36,"line":37},[34,121432,121433],{"class":205},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[34,121435,121436,121438],{"class":36,"line":51},[34,121437,25229],{"class":149},[34,121439,121440],{"class":156}," ldconfig\n",[108,121442,121443],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[24,121445,121450],{"className":121446,"code":121447,"language":121448,"meta":121449,"style":29},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[31,121451,121452,121457,121462,121467,121472,121477,121482],{"__ignoreMap":29},[34,121453,121454],{"class":36,"line":37},[34,121455,121456],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[34,121458,121459],{"class":36,"line":51},[34,121460,121461],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[34,121463,121464],{"class":36,"line":60},[34,121465,121466],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[34,121468,121469],{"class":36,"line":76},[34,121470,121471],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[34,121473,121474],{"class":36,"line":93},[34,121475,121476],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[34,121478,121479],{"class":36,"line":99},[34,121480,121481],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[34,121483,121484],{"class":36,"line":353},[34,121485,121486],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[108,121488,121489],{},"运行下方的命令",[24,121491,121493],{"className":119153,"code":121492,"language":119155,"meta":29,"style":29},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[31,121494,121495,121500,121507,121512],{"__ignoreMap":29},[34,121496,121497],{"class":36,"line":37},[34,121498,121499],{"class":205},"# cd进入CUDA路径\n",[34,121501,121502,121504],{"class":36,"line":51},[34,121503,101906],{"class":63},[34,121505,121506],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[34,121508,121509],{"class":36,"line":60},[34,121510,121511],{"class":205}," # 查看本路径下的需要软链接的文件名\n",[34,121513,121514],{"class":36,"line":76},[34,121515,121516],{"class":149}," ls\n",[108,121518,121519],{},[2122,121520],{"alt":29,"src":121521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[108,121523,121524,121525,19062,121528,19062,121531,121534],{},"如上图，我需要将",[31,121526,121527],{},"libcudnn_xxx_xxxxx.so.8.9.7",[31,121529,121530],{},"libcudnn_xxx_xxxxx.so.8",[31,121532,121533],{},"libcudnn_xxx_xxxxx.so","软链接",[24,121536,121538],{"className":119153,"code":121537,"language":119155,"meta":29,"style":29},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[31,121539,121540,121545,121561,121575,121589,121603,121617,121631,121645,121650,121656,121661],{"__ignoreMap":29},[34,121541,121542],{"class":36,"line":37},[34,121543,121544],{"class":205},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[34,121546,121547,121549,121552,121555,121558],{"class":36,"line":51},[34,121548,25229],{"class":149},[34,121550,121551],{"class":156}," ln",[34,121553,121554],{"class":63}," -sf",[34,121556,121557],{"class":156}," libcudnn_cnn_train.so.8.9.7",[34,121559,121560],{"class":156}," libcudnn_cnn_train.so.8\n",[34,121562,121563,121565,121567,121569,121572],{"class":36,"line":60},[34,121564,25229],{"class":149},[34,121566,121551],{"class":156},[34,121568,121554],{"class":63},[34,121570,121571],{"class":156}," libcudnn_adv_infer.so.8.9.7",[34,121573,121574],{"class":156}," libcudnn_adv_infer.so.8\n",[34,121576,121577,121579,121581,121583,121586],{"class":36,"line":76},[34,121578,25229],{"class":149},[34,121580,121551],{"class":156},[34,121582,121554],{"class":63},[34,121584,121585],{"class":156}," libcudnn_adv_train.so.8.9.7",[34,121587,121588],{"class":156}," libcudnn_adv_train.so.8\n",[34,121590,121591,121593,121595,121597,121600],{"class":36,"line":93},[34,121592,25229],{"class":149},[34,121594,121551],{"class":156},[34,121596,121554],{"class":63},[34,121598,121599],{"class":156}," libcudnn_cnn_infer.so.8.9.7",[34,121601,121602],{"class":156}," libcudnn_cnn_infer.so.8\n",[34,121604,121605,121607,121609,121611,121614],{"class":36,"line":99},[34,121606,25229],{"class":149},[34,121608,121551],{"class":156},[34,121610,121554],{"class":63},[34,121612,121613],{"class":156}," libcudnn.so.8.9.7",[34,121615,121616],{"class":156}," libcudnn.so.8\n",[34,121618,121619,121621,121623,121625,121628],{"class":36,"line":353},[34,121620,25229],{"class":149},[34,121622,121551],{"class":156},[34,121624,121554],{"class":63},[34,121626,121627],{"class":156}," libcudnn_ops_infer.so.8.9.7",[34,121629,121630],{"class":156}," libcudnn_ops_infer.so.8\n",[34,121632,121633,121635,121637,121639,121642],{"class":36,"line":359},[34,121634,25229],{"class":149},[34,121636,121551],{"class":156},[34,121638,121554],{"class":63},[34,121640,121641],{"class":156}," libcudnn_ops_train.so.8.9.7",[34,121643,121644],{"class":156}," libcudnn_ops_train.so.8\n",[34,121646,121647],{"class":36,"line":579},[34,121648,121649],{"class":205},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[34,121651,121652,121654],{"class":36,"line":589},[34,121653,25229],{"class":149},[34,121655,121440],{"class":156},[34,121657,121658],{"class":36,"line":601},[34,121659,121660],{"class":205},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[34,121662,121663,121665,121668,121671,121673,121676],{"class":36,"line":613},[34,121664,27412],{"class":149},[34,121666,121667],{"class":63}," -l",[34,121669,121670],{"class":156}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[34,121672,1250],{"class":63},[34,121674,121675],{"class":156},".so",[34,121677,119878],{"class":63},[19,121679,121681],{"id":121680},"_355-常见问题","3.5.5 常见问题",[752,121683,121684],{},[755,121685,121686],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[24,121688,121690],{"className":119153,"code":121689,"language":119155,"meta":29,"style":29},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[31,121691,121692],{"__ignoreMap":29},[34,121693,121694,121696,121698],{"class":36,"line":37},[34,121695,25229],{"class":149},[34,121697,119213],{"class":156},[34,121699,121700],{"class":156}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[108,121702,121703],{},"blacklist-nouveau.conf文件内容如下：",[24,121705,121707],{"className":119153,"code":121706,"language":119155,"meta":29,"style":29},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[31,121708,121709,121717,121724,121736,121746],{"__ignoreMap":29},[34,121710,121711,121714],{"class":36,"line":37},[34,121712,121713],{"class":149},"blacklist",[34,121715,121716],{"class":156}," nouveau\n",[34,121718,121719,121721],{"class":36,"line":51},[34,121720,121713],{"class":149},[34,121722,121723],{"class":156}," lbm-nouveau\n",[34,121725,121726,121728,121731,121734],{"class":36,"line":60},[34,121727,116560],{"class":149},[34,121729,121730],{"class":156}," nouveau",[34,121732,121733],{"class":156}," modeset=",[34,121735,3738],{"class":63},[34,121737,121738,121741,121743],{"class":36,"line":76},[34,121739,121740],{"class":63},"alias",[34,121742,121730],{"class":156},[34,121744,121745],{"class":156}," off\n",[34,121747,121748,121750,121753],{"class":36,"line":93},[34,121749,121740],{"class":63},[34,121751,121752],{"class":156}," lbm-nouveau",[34,121754,121745],{"class":156},[108,121756,121757],{},"接着运行下方命令",[24,121759,121761],{"className":119153,"code":121760,"language":119155,"meta":29,"style":29},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[31,121762,121763,121773,121778],{"__ignoreMap":29},[34,121764,121765,121767,121770],{"class":36,"line":37},[34,121766,25229],{"class":149},[34,121768,121769],{"class":156}," update-initramfs",[34,121771,121772],{"class":63}," -u\n",[34,121774,121775],{"class":36,"line":51},[34,121776,121777],{"class":149},"或者\n",[34,121779,121780,121782,121785],{"class":36,"line":60},[34,121781,25229],{"class":149},[34,121783,121784],{"class":156}," dracut",[34,121786,121787],{"class":63}," --force\n",[108,121789,121790],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[24,121792,121794],{"className":119153,"code":121793,"language":119155,"meta":29,"style":29},"lsmod | grep nouveau\n",[31,121795,121796],{"__ignoreMap":29},[34,121797,121798,121801,121803,121805],{"class":36,"line":37},[34,121799,121800],{"class":149},"lsmod",[34,121802,25762],{"class":87},[34,121804,30887],{"class":149},[34,121806,121716],{"class":156},[752,121808,121809],{"start":51},[755,121810,121811],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[24,121813,121815],{"className":119153,"code":121814,"language":119155,"meta":29,"style":29},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[31,121816,121817],{"__ignoreMap":29},[34,121818,121819,121821,121823],{"class":36,"line":37},[34,121820,25229],{"class":149},[34,121822,119213],{"class":156},[34,121824,121825],{"class":156}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[108,121827,121828],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[24,121830,121832],{"className":119153,"code":121831,"language":119155,"meta":29,"style":29},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[31,121833,121834,121842,121850,121858,121865,121873,121883,121891],{"__ignoreMap":29},[34,121835,121836,121839],{"class":36,"line":37},[34,121837,121838],{"class":149},"Section",[34,121840,121841],{"class":156}," \"OutputClass\"\n",[34,121843,121844,121847],{"class":36,"line":51},[34,121845,121846],{"class":149},"   Identifier",[34,121848,121849],{"class":156}," \"nvidia\"\n",[34,121851,121852,121855],{"class":36,"line":60},[34,121853,121854],{"class":149},"   MatchDriver",[34,121856,121857],{"class":156}," \"nvidia-drm\"\n",[34,121859,121860,121863],{"class":36,"line":76},[34,121861,121862],{"class":149},"   Driver",[34,121864,121849],{"class":156},[34,121866,121867,121870],{"class":36,"line":93},[34,121868,121869],{"class":149},"   Option",[34,121871,121872],{"class":156}," \"AllowEmptyInitialConfiguration\"\n",[34,121874,121875,121877,121880],{"class":36,"line":99},[34,121876,121869],{"class":149},[34,121878,121879],{"class":156}," \"PrimaryGPU\"",[34,121881,121882],{"class":156}," \"yes\"\n",[34,121884,121885,121888],{"class":36,"line":353},[34,121886,121887],{"class":149},"   ModulePath",[34,121889,121890],{"class":156}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[34,121892,121893],{"class":36,"line":359},[34,121894,121895],{"class":149},"EndSection\n",[752,121897,121898],{"start":60},[755,121899,121900],{},"安装N卡驱动提示错误",[24,121902,121904],{"className":121446,"code":121903,"language":121448,"meta":121449,"style":29},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[31,121905,121906],{"__ignoreMap":29},[34,121907,121908],{"class":36,"line":37},[34,121909,121903],{},[752,121911,121912],{},[755,121913,121914],{},"检查当前运行的内核版本：",[108,121916,121917],{},"运行以下命令以查看你当前正在使用的内核版本：",[24,121919,121921],{"className":117926,"code":121920,"language":117928,"meta":29,"style":29},"uname -r\n",[31,121922,121923],{"__ignoreMap":29},[34,121924,121925,121927],{"class":36,"line":37},[34,121926,70839],{"class":149},[34,121928,121929],{"class":63}," -r\n",[752,121931,121932],{"start":51},[755,121933,121934],{},"安装内核开发文件：",[108,121936,121937,121938,121941],{},"确保你已经安装了与当前内核版本相匹配的 ",[31,121939,121940],{},"kernel-devel"," 包。运行以下命令来安装：",[24,121943,121945],{"className":117926,"code":121944,"language":117928,"meta":29,"style":29},"sudo dnf install kernel-devel-$(uname -r)\n",[31,121946,121947],{"__ignoreMap":29},[34,121948,121949,121951,121953,121955,121958,121960,121962,121964],{"class":36,"line":37},[34,121950,25229],{"class":149},[34,121952,26967],{"class":156},[34,121954,24486],{"class":156},[34,121956,121957],{"class":156}," kernel-devel-",[34,121959,25752],{"class":40},[34,121961,70839],{"class":149},[34,121963,120269],{"class":63},[34,121965,807],{"class":40},[108,121967,121968],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[752,121970,121971],{"start":60},[755,121972,121973],{},"安装内核源代码（如果需要）：",[108,121975,121976],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[24,121978,121980],{"className":117926,"code":121979,"language":117928,"meta":29,"style":29},"sudo dnf install kernel-headers kernel-source\n",[31,121981,121982],{"__ignoreMap":29},[34,121983,121984,121986,121988,121990,121993],{"class":36,"line":37},[34,121985,25229],{"class":149},[34,121987,26967],{"class":156},[34,121989,24486],{"class":156},[34,121991,121992],{"class":156}," kernel-headers",[34,121994,121995],{"class":156}," kernel-source\n",[752,121997,121998],{"start":76},[755,121999,122000],{},"检查安装：",[108,122002,122003,122004,122007],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[31,122005,122006],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[24,122009,122011],{"className":117926,"code":122010,"language":117928,"meta":29,"style":29},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[31,122012,122013],{"__ignoreMap":29},[34,122014,122015,122017],{"class":36,"line":37},[34,122016,27412],{"class":149},[34,122018,122019],{"class":156}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[108,122021,122022,122023,122026],{},"如果仍然遇到问题，可以通过 ",[31,122024,122025],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[45,122028,122029],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":29,"searchDepth":51,"depth":51,"links":122031},[122032,122036,122046,122050,122051],{"id":119129,"depth":51,"text":119130,"children":122033},[122034,122035],{"id":119139,"depth":60,"text":119140},{"id":119149,"depth":60,"text":119150},{"id":119349,"depth":51,"text":119350,"children":122037},[122038,122039,122040,122041,122042,122043,122044,122045],{"id":119353,"depth":60,"text":119354},{"id":119423,"depth":60,"text":119424},{"id":119512,"depth":60,"text":119513},{"id":119757,"depth":60,"text":119758},{"id":119827,"depth":60,"text":119828},{"id":119894,"depth":60,"text":119895},{"id":119929,"depth":60,"text":119930},{"id":119984,"depth":60,"text":119985},{"id":120035,"depth":51,"text":120036,"children":122047},[122048,122049],{"id":120039,"depth":60,"text":120040},{"id":120119,"depth":60,"text":120120},{"id":120305,"depth":51,"text":120306},{"id":120478,"depth":51,"text":120479,"children":122052},[122053,122054,122055,122056,122057],{"id":120482,"depth":60,"text":120483},{"id":120523,"depth":60,"text":120524},{"id":120810,"depth":60,"text":120811},{"id":121184,"depth":60,"text":121185},{"id":121680,"depth":60,"text":121681},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119121,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122064,"title":122065,"body":122066,"description":723,"extension":724,"meta":122406,"navigation":726,"path":122407,"seo":122408,"stem":122409,"__hash__":122410},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122067,"toc":122404},[122068,122071,122076,122079,122325,122330,122333,122369,122372,122401],[10,122069,122065],{"id":122070},"_4-命令教程长期积累",[752,122072,122073],{},[755,122074,122075],{},"大多数命令",[108,122077,122078],{},"常用 Linux 命令速查：",[24,122080,122082],{"className":117926,"code":122081,"language":117928,"meta":29,"style":29},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[31,122083,122084,122089,122096,122103,122111,122118,122125,122133,122141,122148,122155,122163,122167,122172,122179,122187,122194,122198,122203,122210,122218,122226,122234,122242,122246,122251,122259,122266,122273,122281,122289,122293,122298,122307,122316],{"__ignoreMap":29},[34,122085,122086],{"class":36,"line":37},[34,122087,122088],{"class":205},"# 文件与目录\n",[34,122090,122091,122093],{"class":36,"line":51},[34,122092,27412],{"class":149},[34,122094,122095],{"class":205},"        # 列出目录内容\n",[34,122097,122098,122100],{"class":36,"line":60},[34,122099,101906],{"class":63},[34,122101,122102],{"class":205},"        # 切换目录\n",[34,122104,122105,122108],{"class":36,"line":76},[34,122106,122107],{"class":63},"pwd",[34,122109,122110],{"class":205},"       # 显示当前路径\n",[34,122112,122113,122115],{"class":36,"line":93},[34,122114,101896],{"class":149},[34,122116,122117],{"class":205},"     # 创建目录\n",[34,122119,122120,122122],{"class":36,"line":99},[34,122121,25975],{"class":149},[34,122123,122124],{"class":205},"        # 删除文件或目录\n",[34,122126,122127,122130],{"class":36,"line":353},[34,122128,122129],{"class":149},"cp",[34,122131,122132],{"class":205},"        # 复制文件或目录\n",[34,122134,122135,122138],{"class":36,"line":359},[34,122136,122137],{"class":149},"mv",[34,122139,122140],{"class":205},"        # 移动\u002F重命名文件或目录\n",[34,122142,122143,122145],{"class":36,"line":579},[34,122144,101913],{"class":149},[34,122146,122147],{"class":205},"     # 创建空文件\n",[34,122149,122150,122152],{"class":36,"line":589},[34,122151,121395],{"class":149},[34,122153,122154],{"class":205},"       # 查看文件内容\n",[34,122156,122157,122160],{"class":36,"line":601},[34,122158,122159],{"class":149},"head\u002Ftail",[34,122161,122162],{"class":205}," # 查看文件头部\u002F尾部\n",[34,122164,122165],{"class":36,"line":613},[34,122166,3053],{"emptyLinePlaceholder":726},[34,122168,122169],{"class":36,"line":618},[34,122170,122171],{"class":205},"# 权限管理\n",[34,122173,122174,122176],{"class":36,"line":628},[34,122175,25264],{"class":149},[34,122177,122178],{"class":205},"     # 修改文件权限\n",[34,122180,122181,122184],{"class":36,"line":640},[34,122182,122183],{"class":149},"chown",[34,122185,122186],{"class":205},"     # 修改文件所有者\n",[34,122188,122189,122191],{"class":36,"line":2301},[34,122190,25229],{"class":149},[34,122192,122193],{"class":205},"      # 以管理员身份执行\n",[34,122195,122196],{"class":36,"line":2307},[34,122197,3053],{"emptyLinePlaceholder":726},[34,122199,122200],{"class":36,"line":2328},[34,122201,122202],{"class":205},"# 系统信息\n",[34,122204,122205,122207],{"class":36,"line":2333},[34,122206,70839],{"class":149},[34,122208,122209],{"class":205},"     # 系统信息\n",[34,122211,122212,122215],{"class":36,"line":2347},[34,122213,122214],{"class":149},"df",[34,122216,122217],{"class":205},"        # 磁盘使用情况\n",[34,122219,122220,122223],{"class":36,"line":2352},[34,122221,122222],{"class":149},"free",[34,122224,122225],{"class":205},"      # 内存使用情况\n",[34,122227,122228,122231],{"class":36,"line":2381},[34,122229,122230],{"class":149},"top\u002Fhtop",[34,122232,122233],{"class":205},"  # 进程监控\n",[34,122235,122236,122239],{"class":36,"line":2386},[34,122237,122238],{"class":149},"ps",[34,122240,122241],{"class":205},"        # 查看进程\n",[34,122243,122244],{"class":36,"line":2403},[34,122245,3053],{"emptyLinePlaceholder":726},[34,122247,122248],{"class":36,"line":2408},[34,122249,122250],{"class":205},"# 网络\n",[34,122252,122253,122256],{"class":36,"line":2413},[34,122254,122255],{"class":149},"ping",[34,122257,122258],{"class":205},"      # 测试网络连通性\n",[34,122260,122261,122263],{"class":36,"line":2418},[34,122262,27500],{"class":149},[34,122264,122265],{"class":205},"      # 发送 HTTP 请求\n",[34,122267,122268,122270],{"class":36,"line":2432},[34,122269,120919],{"class":149},[34,122271,122272],{"class":205},"      # 下载文件\n",[34,122274,122275,122278],{"class":36,"line":2437},[34,122276,122277],{"class":149},"ssh",[34,122279,122280],{"class":205},"       # 远程登录\n",[34,122282,122283,122286],{"class":36,"line":3230},[34,122284,122285],{"class":149},"scp",[34,122287,122288],{"class":205},"       # 远程文件传输\n",[34,122290,122291],{"class":36,"line":3244},[34,122292,3053],{"emptyLinePlaceholder":726},[34,122294,122295],{"class":36,"line":3252},[34,122296,122297],{"class":205},"# 包管理（Debian\u002FUbuntu）\n",[34,122299,122300,122302,122304],{"class":36,"line":3257},[34,122301,117998],{"class":149},[34,122303,117977],{"class":156},[34,122305,122306],{"class":205},"   # 更新软件源\n",[34,122308,122309,122311,122313],{"class":36,"line":3263},[34,122310,117998],{"class":149},[34,122312,24486],{"class":156},[34,122314,122315],{"class":205},"  # 安装软件包\n",[34,122317,122318,122320,122322],{"class":36,"line":3269},[34,122319,117998],{"class":149},[34,122321,26731],{"class":156},[34,122323,122324],{"class":205},"   # 卸载软件包\n",[752,122326,122327],{"start":51},[755,122328,122329],{},"KDE Dolphin 以root打开",[108,122331,122332],{},"kde5",[24,122334,122336],{"className":117926,"code":122335,"language":117928,"meta":29,"style":29},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[31,122337,122338],{"__ignoreMap":29},[34,122339,122340,122343,122346,122349,122351,122353,122356,122359,122361,122364,122366],{"class":36,"line":37},[34,122341,122342],{"class":149},"pkexec",[34,122344,122345],{"class":156}," env",[34,122347,122348],{"class":156}," DISPLAY=",[34,122350,28794],{"class":40},[34,122352,28852],{"class":156},[34,122354,122355],{"class":40},"$XAUTHORITY ",[34,122357,122358],{"class":156},"KDE_SESSION_VERSION=",[34,122360,1114],{"class":63},[34,122362,122363],{"class":156}," KDE_FULL_SESSION=",[34,122365,2022],{"class":63},[34,122367,122368],{"class":156}," dolphin\n",[108,122370,122371],{},"kde6",[24,122373,122375],{"className":117926,"code":122374,"language":117928,"meta":29,"style":29},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[31,122376,122377],{"__ignoreMap":29},[34,122378,122379,122381,122383,122385,122387,122389,122391,122393,122395,122397,122399],{"class":36,"line":37},[34,122380,122342],{"class":149},[34,122382,122345],{"class":156},[34,122384,122348],{"class":156},[34,122386,28794],{"class":40},[34,122388,28852],{"class":156},[34,122390,122355],{"class":40},[34,122392,122358],{"class":156},[34,122394,1139],{"class":63},[34,122396,122363],{"class":156},[34,122398,2022],{"class":63},[34,122400,122368],{"class":156},[45,122402,122403],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":29,"searchDepth":51,"depth":51,"links":122405},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122065,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122412,"title":122413,"body":122414,"description":723,"extension":724,"meta":122428,"navigation":726,"path":122429,"seo":122430,"stem":122431,"__hash__":122432},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122415,"toc":122426},[122416,122419],[10,122417,122413],{"id":122418},"_5-各种环境配置",[108,122420,122421],{},[520,122422,122425],{"href":122423,"rel":122424},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24517],"电控组环境搭建大全",{"title":29,"searchDepth":51,"depth":51,"links":122427},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122413,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122434,"title":122435,"body":122436,"description":723,"extension":724,"meta":122784,"navigation":726,"path":122785,"seo":122786,"stem":122787,"__hash__":122788},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122437,"toc":122776},[122438,122441,122445,122449,122453,122458,122465,122469,122762,122766,122773],[10,122439,122435],{"id":122440},"_6-拓展功能",[14,122442,122444],{"id":122443},"_61-wine","6.1 Wine",[14,122446,122448],{"id":122447},"_62-android","6.2 Android",[19,122450,122452],{"id":122451},"_621-i卡a卡","6.2.1 I卡、A卡",[752,122454,122455],{},[755,122456,122457],{},"Wayland-Waydroid(体验超级好)",[108,122459,122460,122461],{},"Waydroid 官网与安装指南：",[520,122462,122463],{"href":122463,"rel":122464},"https:\u002F\u002Fwaydro.id\u002F",[24517],[19,122466,122468],{"id":122467},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[752,122470,122471],{},[755,122472,122473,122474,122476,122477,122481,122483,122486,122491,122688],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54362,122475],{},"BlissOS 官网下载：",[520,122478,122479],{"href":122479,"rel":122480},"https:\u002F\u002Fblissos.org\u002F",[24517],[54362,122482],{},[2122,122484],{"alt":29,"src":122485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[752,122487,122488],{"start":60},[755,122489,122490],{},"比较推荐的配置",[24,122492,122494],{"className":117926,"code":122493,"language":117928,"meta":29,"style":29},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[31,122495,122496,122503,122513,122523,122533,122545,122555,122562,122572,122581,122590,122600,122610,122619,122629,122639,122651,122661,122670,122680],{"__ignoreMap":29},[34,122497,122498,122501],{"class":36,"line":37},[34,122499,122500],{"class":149},"qemu-system-x86_64",[34,122502,25331],{"class":63},[34,122504,122505,122508,122511],{"class":36,"line":51},[34,122506,122507],{"class":63},"        -M",[34,122509,122510],{"class":156}," q35,vmport=off",[34,122512,25331],{"class":63},[34,122514,122515,122518,122521],{"class":36,"line":60},[34,122516,122517],{"class":63},"        -accel",[34,122519,122520],{"class":156}," kvm",[34,122522,25331],{"class":63},[34,122524,122525,122528,122531],{"class":36,"line":76},[34,122526,122527],{"class":63},"        -cpu",[34,122529,122530],{"class":156}," qemu64,+sse3,+sse4.2",[34,122532,25331],{"class":63},[34,122534,122535,122538,122541,122543],{"class":36,"line":93},[34,122536,122537],{"class":63},"        -smp",[34,122539,122540],{"class":156}," 8,cores=",[34,122542,1088],{"class":63},[34,122544,25331],{"class":63},[34,122546,122547,122550,122553],{"class":36,"line":99},[34,122548,122549],{"class":63},"        -m",[34,122551,122552],{"class":156}," 6G",[34,122554,25331],{"class":63},[34,122556,122557,122560],{"class":36,"line":353},[34,122558,122559],{"class":63},"        -usb",[34,122561,25331],{"class":63},[34,122563,122564,122567,122570],{"class":36,"line":359},[34,122565,122566],{"class":63},"        -device",[34,122568,122569],{"class":156}," virtio-tablet",[34,122571,25331],{"class":63},[34,122573,122574,122576,122579],{"class":36,"line":579},[34,122575,122566],{"class":63},[34,122577,122578],{"class":156}," virtio-keyboard",[34,122580,25331],{"class":63},[34,122582,122583,122585,122588],{"class":36,"line":589},[34,122584,122566],{"class":63},[34,122586,122587],{"class":156}," usb-tablet",[34,122589,25331],{"class":63},[34,122591,122592,122595,122598],{"class":36,"line":601},[34,122593,122594],{"class":63},"        -bios",[34,122596,122597],{"class":156}," OVMF-pure-efi64.fd",[34,122599,25331],{"class":63},[34,122601,122602,122605,122608],{"class":36,"line":613},[34,122603,122604],{"class":63},"        -net",[34,122606,122607],{"class":156}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[34,122609,25331],{"class":63},[34,122611,122612,122614,122617],{"class":36,"line":618},[34,122613,122604],{"class":63},[34,122615,122616],{"class":156}," nic,model=virtio",[34,122618,25331],{"class":63},[34,122620,122621,122624,122627],{"class":36,"line":628},[34,122622,122623],{"class":63},"        -audio",[34,122625,122626],{"class":156}," sdl,model=hda",[34,122628,25331],{"class":63},[34,122630,122631,122634,122637],{"class":36,"line":640},[34,122632,122633],{"class":63},"        -display",[34,122635,122636],{"class":156}," sdl,gl=on,show-cursor=on",[34,122638,25331],{"class":63},[34,122640,122641,122643,122646,122649],{"class":36,"line":2301},[34,122642,122566],{"class":63},[34,122644,122645],{"class":156}," virtio-vga-gl,xres=1920,yres=",[34,122647,122648],{"class":63},"1080",[34,122650,25331],{"class":63},[34,122652,122653,122656,122659],{"class":36,"line":2307},[34,122654,122655],{"class":63},"        -drive",[34,122657,122658],{"class":156}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[34,122660,25331],{"class":63},[34,122662,122663,122665,122668],{"class":36,"line":2328},[34,122664,122655],{"class":63},[34,122666,122667],{"class":156}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[34,122669,25331],{"class":63},[34,122671,122672,122675,122678],{"class":36,"line":2333},[34,122673,122674],{"class":63},"        -monitor",[34,122676,122677],{"class":156}," stdio",[34,122679,25331],{"class":63},[34,122681,122682,122685],{"class":36,"line":2347},[34,122683,122684],{"class":63},"        -serial",[34,122686,122687],{"class":156}," none\n",[752,122689,122690],{"start":93},[755,122691,122692,122693],{},"常用操作：",[752,122694,122695,122698,122754],{},[755,122696,122697],{},"全屏：Ctrl+Alt+F",[755,122699,122700,122701,122706],{},"adb调试",[752,122702,122703],{},[755,122704,122705],{},"使Linux与Android用ADB连接。",[24,122707,122709],{"className":117926,"code":122708,"language":117928,"meta":29,"style":29},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[31,122710,122711,122716,122727,122732,122744,122749],{"__ignoreMap":29},[34,122712,122713],{"class":36,"line":37},[34,122714,122715],{"class":205},"# 连接安卓\n",[34,122717,122718,122721,122724],{"class":36,"line":51},[34,122719,122720],{"class":149},"adb",[34,122722,122723],{"class":156}," connect",[34,122725,122726],{"class":63}," 127.0.0.1\n",[34,122728,122729],{"class":36,"line":60},[34,122730,122731],{"class":205},"# 打开shell\n",[34,122733,122734,122736,122738,122741],{"class":36,"line":76},[34,122735,122720],{"class":149},[34,122737,27534],{"class":63},[34,122739,122740],{"class":156}," 127.0.0.1:5555",[34,122742,122743],{"class":156}," shell\n",[34,122745,122746],{"class":36,"line":93},[34,122747,122748],{"class":205},"# 使用root权限\n",[34,122750,122751],{"class":36,"line":99},[34,122752,122753],{"class":149},"su\n",[755,122755,122756,122757],{},"中文输入法",[752,122758,122759],{},[755,122760,122761],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122763,122765],{"id":122764},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[108,122767,122768,122769],{},"rEFInd 官网与文档：",[520,122770,122771],{"href":122771,"rel":122772},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24517],[45,122774,122775],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":122777},[122778,122779,122783],{"id":122443,"depth":51,"text":122444},{"id":122447,"depth":51,"text":122448,"children":122780},[122781,122782],{"id":122451,"depth":60,"text":122452},{"id":122467,"depth":60,"text":122468},{"id":122764,"depth":51,"text":122765},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122435,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122790,"title":122791,"body":122792,"description":723,"extension":724,"meta":126091,"navigation":726,"path":126092,"seo":126093,"stem":126094,"__hash__":126095},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122793,"toc":126065},[122794,122797,122801,122804,122811,123061,123064,123136,123139,123143,123147,123152,123155,123158,123161,123166,123169,123172,123175,123180,123183,123188,123191,123194,123199,123202,123207,123210,123214,123218,123221,123226,123229,123243,123246,123249,123258,123261,123270,123273,123276,123285,123288,123297,123300,123303,123312,123315,123318,123333,123336,123339,123348,123353,123356,123359,123368,123371,123380,123383,123392,123395,123404,123409,123412,123420,123425,123428,123437,123440,123448,123453,123456,123465,123468,123471,123475,123478,123483,123486,123491,123505,123510,123515,123526,123531,123537,123542,123557,123562,123565,123570,123575,123580,123588,123593,123600,123605,123616,123621,123624,123628,123631,123634,123639,123642,123661,123666,123669,123678,123683,123686,123708,123711,123741,123744,123749,123752,123766,123771,123790,123793,123796,123801,123813,123818,123823,123826,123831,123834,123849,123852,123857,123862,123866,123871,123911,123914,123918,123924,123930,123935,123938,123945,123950,123957,123960,123963,123970,123984,123987,124047,124050,124064,124076,124079,124082,124085,124149,124152,124155,124158,124178,124181,124186,124193,124197,124200,124204,124209,124214,124218,124221,124224,124266,124271,124274,124296,124311,124313,124318,124330,124390,124392,124394,124448,124450,124452,124458,124463,124466,124471,124475,124478,124540,124545,124548,124550,124554,124566,124648,124650,124652,124706,124712,124714,124718,124723,124725,124730,124734,124754,124789,124793,124796,124799,124802,124809,124812,124824,124827,124842,124845,124864,124912,124915,124932,124935,124949,124954,124957,124966,124981,124993,125031,125036,125045,125050,125055,125081,125090,125094,125098,125103,125106,125110,125114,125119,125122,125127,125130,125135,125138,125143,125146,125150,125155,125158,125163,125166,125170,125175,125178,125183,125186,125191,125194,125198,125203,125206,125211,125214,125219,125222,125226,125231,125234,125239,125242,125247,125250,125255,125258,125263,125266,125271,125274,125278,125283,125286,125291,125298,125302,125307,125310,125315,125318,125322,125327,125330,125333,125336,125339,125342,125346,125349,125359,125364,125369,125391,125396,125401,125408,125412,125417,125420,125423,125428,125431,125434,125437,125440,125443,125446,125449,125452,125455,125458,125461,125464,125469,125474,125479,125484,125489,125494,125499,125502,125506,125509,125513,125518,125523,125528,125533,125537,125543,125551,125556,125559,125564,125579,125582,125587,125621,125636,125639,125694,125720,125732,125735,125744,125747,125762,125767,125770,125776,125781,125784,125789,125792,125797,125802,125809,125812,125827,125830,125865,125870,125878,125916,125919,125922,125927,125930,125935,125946,125980,125985,125988,125997,126002,126008,126011,126016,126025,126030,126033,126036,126041,126049,126052,126057,126062],[10,122795,122791],{"id":122796},"_7-其他操作",[14,122798,122800],{"id":122799},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[108,122802,122803],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[108,122805,122806,122807,122810],{},"进入工控机的硬盘目录，进入",[31,122808,122809],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[24,122812,122816],{"className":122813,"code":122814,"language":122815,"meta":29,"style":29},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[31,122817,122818,122826,122837,122844,122851,122863,122870,122882,122893,122904,122911,122918,122925,122937,122949,122956,122968,122980,122987,122999,123011,123023,123034,123041,123052],{"__ignoreMap":29},[34,122819,122820,122823],{"class":36,"line":37},[34,122821,122822],{"class":44},"network",[34,122824,122825],{"class":40},": \n",[34,122827,122828,122831,122833,122835],{"class":36,"line":51},[34,122829,122830],{"class":44},"  version",[34,122832,67],{"class":40},[34,122834,875],{"class":63},[34,122836,3327],{"class":40},[34,122838,122839,122842],{"class":36,"line":60},[34,122840,122841],{"class":44},"  wifis",[34,122843,122825],{"class":40},[34,122845,122846,122849],{"class":36,"line":76},[34,122847,122848],{"class":44},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[34,122850,122825],{"class":40},[34,122852,122853,122856,122858,122861],{"class":36,"line":93},[34,122854,122855],{"class":44},"      renderer",[34,122857,67],{"class":40},[34,122859,122860],{"class":156},"NetworkManager",[34,122862,3327],{"class":40},[34,122864,122865,122868],{"class":36,"line":99},[34,122866,122867],{"class":44},"      match",[34,122869,122825],{"class":40},[34,122871,122872,122875,122877,122880],{"class":36,"line":353},[34,122873,122874],{"class":44},"        name",[34,122876,67],{"class":40},[34,122878,122879],{"class":156},"\"wlan0\"",[34,122881,3327],{"class":40},[34,122883,122884,122887,122889,122891],{"class":36,"line":359},[34,122885,122886],{"class":44},"      dhcp4",[34,122888,67],{"class":40},[34,122890,2022],{"class":63},[34,122892,3327],{"class":40},[34,122894,122895,122898,122900,122902],{"class":36,"line":579},[34,122896,122897],{"class":44},"      dhcp6",[34,122899,67],{"class":40},[34,122901,2022],{"class":63},[34,122903,3327],{"class":40},[34,122905,122906,122909],{"class":36,"line":589},[34,122907,122908],{"class":44},"      access-points",[34,122910,122825],{"class":40},[34,122912,122913,122916],{"class":36,"line":601},[34,122914,122915],{"class":156},"        \"EMIS_Vinci_Robocon_5G\"",[34,122917,122825],{"class":40},[34,122919,122920,122923],{"class":36,"line":613},[34,122921,122922],{"class":44},"          auth",[34,122924,122825],{"class":40},[34,122926,122927,122930,122932,122935],{"class":36,"line":618},[34,122928,122929],{"class":44},"            key-management",[34,122931,67],{"class":40},[34,122933,122934],{"class":156},"\"psk\"",[34,122936,3327],{"class":40},[34,122938,122939,122942,122944,122947],{"class":36,"line":628},[34,122940,122941],{"class":44},"            password",[34,122943,67],{"class":40},[34,122945,122946],{"class":156},"\"vinci666\"",[34,122948,3327],{"class":40},[34,122950,122951,122954],{"class":36,"line":640},[34,122952,122953],{"class":44},"          networkmanager",[34,122955,122825],{"class":40},[34,122957,122958,122961,122963,122966],{"class":36,"line":2301},[34,122959,122960],{"class":44},"            uuid",[34,122962,67],{"class":40},[34,122964,122965],{"class":156},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[34,122967,3327],{"class":40},[34,122969,122970,122973,122975,122978],{"class":36,"line":2307},[34,122971,122972],{"class":44},"            name",[34,122974,67],{"class":40},[34,122976,122977],{"class":156},"\"EMIS_Vinci_Robocon_5G\"",[34,122979,3327],{"class":40},[34,122981,122982,122985],{"class":36,"line":2328},[34,122983,122984],{"class":44},"            passthrough",[34,122986,122825],{"class":40},[34,122988,122989,122992,122994,122997],{"class":36,"line":2333},[34,122990,122991],{"class":44},"              wifi-security.auth-alg",[34,122993,67],{"class":40},[34,122995,122996],{"class":156},"\"open\"",[34,122998,3327],{"class":40},[34,123000,123001,123004,123006,123009],{"class":36,"line":2347},[34,123002,123003],{"class":44},"              ipv6.addr-gen-mode",[34,123005,67],{"class":40},[34,123007,123008],{"class":156},"\"default\"",[34,123010,3327],{"class":40},[34,123012,123013,123016,123018,123021],{"class":36,"line":2352},[34,123014,123015],{"class":44},"              ipv6.ip6-privacy",[34,123017,67],{"class":40},[34,123019,123020],{"class":156},"\"-1\"",[34,123022,3327],{"class":40},[34,123024,123025,123028,123030,123032],{"class":36,"line":2381},[34,123026,123027],{"class":44},"              proxy._",[34,123029,67],{"class":40},[34,123031,8305],{"class":156},[34,123033,3327],{"class":40},[34,123035,123036,123039],{"class":36,"line":2386},[34,123037,123038],{"class":44},"      networkmanager",[34,123040,122825],{"class":40},[34,123042,123043,123046,123048,123050],{"class":36,"line":2403},[34,123044,123045],{"class":44},"        uuid",[34,123047,67],{"class":40},[34,123049,122965],{"class":156},[34,123051,3327],{"class":40},[34,123053,123054,123056,123058],{"class":36,"line":2408},[34,123055,122874],{"class":44},[34,123057,67],{"class":40},[34,123059,123060],{"class":156},"\"EMIS_Vinci_Robocon_5G\"\n",[108,123062,123063],{},"将其改为新wifi的名和密码：",[24,123065,123067],{"className":122813,"code":123066,"language":122815,"meta":29,"style":29},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[31,123068,123069,123075,123084,123090,123097,123106,123114,123120,123126],{"__ignoreMap":29},[34,123070,123071,123073],{"class":36,"line":37},[34,123072,122822],{"class":44},[34,123074,4392],{"class":40},[34,123076,123077,123079,123081],{"class":36,"line":51},[34,123078,122830],{"class":44},[34,123080,67],{"class":40},[34,123082,123083],{"class":63},"2\n",[34,123085,123086,123088],{"class":36,"line":60},[34,123087,122841],{"class":44},[34,123089,4392],{"class":40},[34,123091,123092,123095],{"class":36,"line":76},[34,123093,123094],{"class":44},"    wlan0",[34,123096,4392],{"class":40},[34,123098,123099,123101,123103],{"class":36,"line":93},[34,123100,122886],{"class":44},[34,123102,67],{"class":40},[34,123104,123105],{"class":63},"true\n",[34,123107,123108,123110,123112],{"class":36,"line":99},[34,123109,122897],{"class":44},[34,123111,67],{"class":40},[34,123113,123105],{"class":63},[34,123115,123116,123118],{"class":36,"line":353},[34,123117,122908],{"class":44},[34,123119,4392],{"class":40},[34,123121,123122,123124],{"class":36,"line":359},[34,123123,122915],{"class":156},[34,123125,4392],{"class":40},[34,123127,123128,123131,123133],{"class":36,"line":579},[34,123129,123130],{"class":44},"          password",[34,123132,67],{"class":40},[34,123134,123135],{"class":156},"\"vinci666\"\n",[108,123137,123138],{},"工控机开机即可连上网。",[14,123140,123142],{"id":123141},"_72-ssh远程开发","7.2 SSH远程开发",[19,123144,123146],{"id":123145},"_721-环境准备","7.2.1 环境准备",[108,123148,123149],{},[111,123150,123151],{},"1.硬件准备",[108,123153,123154],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[108,123156,123157],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[108,123159,123160],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[108,123162,123163],{},[111,123164,123165],{},"2.设置固定IP",[108,123167,123168],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[108,123170,123171],{},"1.进入设置界面",[108,123173,123174],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[108,123176,123177],{},[2122,123178],{"alt":29,"src":123179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[108,123181,123182],{},"2.配置所连接的网络",[108,123184,123185],{},[2122,123186],{"alt":29,"src":123187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[108,123189,123190],{},"3.设置固定IP",[108,123192,123193],{},"查看当前IP地址。",[108,123195,123196],{},[2122,123197],{"alt":29,"src":123198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[108,123200,123201],{},"设置固定IP。",[108,123203,123204],{},[2122,123205],{"alt":29,"src":123206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[108,123208,123209],{},"至此，IP配置完毕。",[19,123211,123213],{"id":123212},"_722-环境搭建","7.2.2 环境搭建",[108,123215,123216],{},[111,123217,26405],{},[108,123219,123220],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[108,123222,123223],{},[111,123224,123225],{},"实现",[108,123227,123228],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[752,123230,123231,123234,123237,123240],{},[755,123232,123233],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[755,123235,123236],{},"远程主机启动SSH服务；",[755,123238,123239],{},"本地主机登陆远程主机；",[755,123241,123242],{},"实现数据传输。",[108,123244,123245],{},"1.安装SSH客户端与服务端",[108,123247,123248],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[24,123250,123252],{"className":121446,"code":123251,"language":121448,"meta":121449,"style":29}," sudo apt install openssh-server\n",[31,123253,123254],{"__ignoreMap":29},[34,123255,123256],{"class":36,"line":37},[34,123257,123251],{},[108,123259,123260],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[24,123262,123264],{"className":121446,"code":123263,"language":121448,"meta":121449,"style":29},"sudo apt install openssh-client\n",[31,123265,123266],{"__ignoreMap":29},[34,123267,123268],{"class":36,"line":37},[34,123269,123263],{},[108,123271,123272],{},"2.远程主机启动SSH服务",[108,123274,123275],{},"远程主机启动 ssh 服务命令如下：",[24,123277,123279],{"className":121446,"code":123278,"language":121448,"meta":121449,"style":29},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[31,123280,123281],{"__ignoreMap":29},[34,123282,123283],{"class":36,"line":37},[34,123284,123278],{},[108,123286,123287],{},"启动后可使用如下命令查看服务是否正常运行：",[24,123289,123291],{"className":121446,"code":123290,"language":121448,"meta":121449,"style":29},"ps -e | grep ssh\n",[31,123292,123293],{"__ignoreMap":29},[34,123294,123295],{"class":36,"line":37},[34,123296,123290],{},[108,123298,123299],{},"如果启动成功，会包含 sshd 程序。",[108,123301,123302],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[24,123304,123306],{"className":121446,"code":123305,"language":121448,"meta":121449,"style":29},"sudo systemctl enable ssh\n",[31,123307,123308],{"__ignoreMap":29},[34,123309,123310],{"class":36,"line":37},[34,123311,123305],{},[108,123313,123314],{},"3.本地远程登录",[108,123316,123317],{},"登录远程主机可以调用如下命令:",[24,123319,123321],{"className":117926,"code":123320,"language":117928,"meta":29,"style":29},"ssh -X 用户名@ip地址\n",[31,123322,123323],{"__ignoreMap":29},[34,123324,123325,123327,123330],{"class":36,"line":37},[34,123326,122277],{"class":149},[34,123328,123329],{"class":63}," -X",[34,123331,123332],{"class":156}," 用户名@ip地址\n",[108,123334,123335],{},"然后根据提示，录入登陆密码，即可成功登录。",[108,123337,123338],{},"如果退出，可以调用exit命令：",[24,123340,123342],{"className":121446,"code":123341,"language":121448,"meta":121449,"style":29},"exit\n",[31,123343,123344],{"__ignoreMap":29},[34,123345,123346],{"class":36,"line":37},[34,123347,123341],{},[108,123349,123350],{},[111,123351,123352],{},"4.实现数据传输",[108,123354,123355],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[108,123357,123358],{},"上传文件指令格式如下：",[24,123360,123362],{"className":121446,"code":123361,"language":121448,"meta":121449,"style":29},"scp 本地文件路径 账号@ip:路径\n",[31,123363,123364],{"__ignoreMap":29},[34,123365,123366],{"class":36,"line":37},[34,123367,123361],{},[108,123369,123370],{},"上传文件夹指令格式如下：",[24,123372,123374],{"className":121446,"code":123373,"language":121448,"meta":121449,"style":29},"scp -r 本地文件夹路径 账号@ip:路径\n",[31,123375,123376],{"__ignoreMap":29},[34,123377,123378],{"class":36,"line":37},[34,123379,123373],{},[108,123381,123382],{},"下载文件指令格式如下：",[24,123384,123386],{"className":121446,"code":123385,"language":121448,"meta":121449,"style":29},"scp 账号@ip:路径 本地文件夹路径\n",[31,123387,123388],{"__ignoreMap":29},[34,123389,123390],{"class":36,"line":37},[34,123391,123385],{},[108,123393,123394],{},"下载文件夹指令格式如下：",[24,123396,123398],{"className":121446,"code":123397,"language":121448,"meta":121449,"style":29},"scp -r 账号@ip:路径 本地文件夹路径\n",[31,123399,123400],{"__ignoreMap":29},[34,123401,123402],{"class":36,"line":37},[34,123403,123397],{},[108,123405,123406],{},[111,123407,123408],{},"优化",[108,123410,123411],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[752,123413,123414,123417],{},[755,123415,123416],{},"本地生成密钥对；",[755,123418,123419],{},"将公钥上传至远程主机。",[108,123421,123422],{},[111,123423,123424],{},"1.生成密钥对",[108,123426,123427],{},"本地客户端生成公私钥：（一路回车默认即可）",[24,123429,123431],{"className":121446,"code":123430,"language":121448,"meta":121449,"style":29},"ssh-keygen\n",[31,123432,123433],{"__ignoreMap":29},[34,123434,123435],{"class":36,"line":37},[34,123436,123430],{},[108,123438,123439],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[752,123441,123442,123445],{},[755,123443,123444],{},"id_rsa （私钥）；",[755,123446,123447],{},"id_rsa.pub (公钥)。",[108,123449,123450],{},[111,123451,123452],{},"2.公钥上传",[108,123454,123455],{},"上传指令如下：",[24,123457,123459],{"className":121446,"code":123458,"language":121448,"meta":121449,"style":29},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[31,123460,123461],{"__ignoreMap":29},[34,123462,123463],{"class":36,"line":37},[34,123464,123458],{},[108,123466,123467],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[108,123469,123470],{},"以后再远程登录就无需录入密码了。",[19,123472,123474],{"id":123473},"_723-使用vscode优化","7.2.3 使用VScode优化",[108,123476,123477],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[108,123479,123480],{},[111,123481,123482],{},"1.准备工作",[108,123484,123485],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[108,123487,123488],{},[111,123489,123490],{},"2.为VScode安装远程开发插件",[108,123492,123493,123494,123497,123498,123501,123502,29036],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[31,123495,123496],{},"扩展：商店","的搜索栏输入",[31,123499,123500],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[31,123503,123504],{},"安装",[108,123506,123507],{},[2122,123508],{"alt":29,"src":123509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[108,123511,123512],{},[111,123513,123514],{},"3.配置远程连接",[108,123516,123517,123518,123521,123522,123525],{},"步骤1：使用快捷键",[31,123519,123520],{},"ctrl + shift + p","打开命令输入窗口，并输入",[31,123523,123524],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[108,123527,123528],{},[2122,123529],{"alt":29,"src":123530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[108,123532,123533,123534,29036],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[31,123535,123536],{},"Add New SSH Host",[108,123538,123539],{},[2122,123540],{"alt":29,"src":123541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[108,123543,123544,123545,123548,123549,123552,123553,123556],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[31,123546,123547],{},"ssh +X ubuntu@192.168.43.164","，其中，",[31,123550,123551],{},"ubuntu","需要替换为你的登录用户名，",[31,123554,123555],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[108,123558,123559],{},[2122,123560],{"alt":29,"src":123561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[108,123563,123564],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[108,123566,123567],{},[2122,123568],{"alt":29,"src":123569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[108,123571,123572],{},[2122,123573],{"alt":29,"src":123574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[108,123576,123577],{},[111,123578,123579],{},"4.使用",[108,123581,123582,123583,123521,123585,123587],{},"步骤1：继续使用快捷键",[31,123584,123520],{},[31,123586,123524],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[108,123589,123590],{},[2122,123591],{"alt":29,"src":123592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[108,123594,123595,123596,123599],{},"或者，也可以点击侧边栏的",[31,123597,123598],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[108,123601,123602],{},[2122,123603],{"alt":29,"src":123604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[108,123606,123607,123608,123611,123612,123615],{},"步骤2：选择菜单栏的",[31,123609,123610],{},"文件","下的",[31,123613,123614],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[108,123617,123618],{},[2122,123619],{"alt":29,"src":123620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[108,123622,123623],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123625,123627],{"id":123626},"_73-远程桌面","7.3 远程桌面",[108,123629,123630],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[108,123632,123633],{},"我们选择使用VNC来看。",[752,123635,123636],{},[755,123637,123638],{},"安装VNC服务器：",[108,123640,123641],{},"这里以TigerVNC为例进行安装：",[24,123643,123645],{"className":117926,"code":123644,"language":117928,"meta":29,"style":29},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[31,123646,123647],{"__ignoreMap":29},[34,123648,123649,123651,123653,123655,123658],{"class":36,"line":37},[34,123650,25229],{"class":149},[34,123652,117947],{"class":156},[34,123654,24486],{"class":156},[34,123656,123657],{"class":156}," tigervnc-standalone-server",[34,123659,123660],{"class":156}," tigervnc-common\n",[752,123662,123663],{"start":51},[755,123664,123665],{},"设置VNC密码：",[108,123667,123668],{},"为VNC用户设置密码，运行以下命令：",[24,123670,123672],{"className":117926,"code":123671,"language":117928,"meta":29,"style":29},"vncpasswd\n",[31,123673,123674],{"__ignoreMap":29},[34,123675,123676],{"class":36,"line":37},[34,123677,123671],{"class":149},[752,123679,123680],{"start":60},[755,123681,123682],{},"配置VNC启动脚本:",[108,123684,123685],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[24,123687,123689],{"className":117926,"code":123688,"language":117928,"meta":29,"style":29},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[31,123690,123691,123700],{"__ignoreMap":29},[34,123692,123693,123695,123697],{"class":36,"line":37},[34,123694,101896],{"class":149},[34,123696,29867],{"class":63},[34,123698,123699],{"class":156}," ~\u002F.vnc\n",[34,123701,123702,123705],{"class":36,"line":51},[34,123703,123704],{"class":149},"nano",[34,123706,123707],{"class":156}," ~\u002F.vnc\u002Fxstartup\n",[108,123709,123710],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[24,123712,123714],{"className":117926,"code":123713,"language":117928,"meta":29,"style":29},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[31,123715,123716,123721,123729,123736],{"__ignoreMap":29},[34,123717,123718],{"class":36,"line":37},[34,123719,123720],{"class":205},"#!\u002Fbin\u002Fsh\n",[34,123722,123723,123726],{"class":36,"line":51},[34,123724,123725],{"class":63},"unset",[34,123727,123728],{"class":156}," SESSION_MANAGER\n",[34,123730,123731,123733],{"class":36,"line":60},[34,123732,123725],{"class":63},[34,123734,123735],{"class":156}," DBUS_SESSION_BUS_ADDRESS\n",[34,123737,123738],{"class":36,"line":76},[34,123739,123740],{"class":149},"gnome-session\n",[108,123742,123743],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[752,123745,123746],{"start":76},[755,123747,123748],{},"给予执行权限：",[108,123750,123751],{},"为xstartup文件设置执行权限：",[24,123753,123755],{"className":117926,"code":123754,"language":117928,"meta":29,"style":29},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[31,123756,123757],{"__ignoreMap":29},[34,123758,123759,123761,123764],{"class":36,"line":37},[34,123760,25264],{"class":149},[34,123762,123763],{"class":156}," +x",[34,123765,123707],{"class":156},[752,123767,123768],{"start":93},[755,123769,123770],{},"启动VNC服务器：",[24,123772,123774],{"className":117926,"code":123773,"language":117928,"meta":29,"style":29},"vncserver -geometry 1920x1080 -localhost=0\n",[31,123775,123776],{"__ignoreMap":29},[34,123777,123778,123781,123784,123787],{"class":36,"line":37},[34,123779,123780],{"class":149},"vncserver",[34,123782,123783],{"class":63}," -geometry",[34,123785,123786],{"class":156}," 1920x1080",[34,123788,123789],{"class":63}," -localhost=0\n",[108,123791,123792],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[108,123794,123795],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[752,123797,123798],{"start":99},[755,123799,123800],{},"查看已开启的VNC服务器：",[24,123802,123804],{"className":117926,"code":123803,"language":117928,"meta":29,"style":29},"vncserver -list\n",[31,123805,123806],{"__ignoreMap":29},[34,123807,123808,123810],{"class":36,"line":37},[34,123809,123780],{"class":149},[34,123811,123812],{"class":63}," -list\n",[108,123814,123815],{},[2122,123816],{"alt":29,"src":123817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[752,123819,123820],{"start":353},[755,123821,123822],{},"连接到VNC服务器：",[108,123824,123825],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[752,123827,123828],{"start":359},[755,123829,123830],{},"停止VNC服务器：",[108,123832,123833],{},"如果需要停止VNC服务器，可以使用以下命令：",[24,123835,123837],{"className":117926,"code":123836,"language":117928,"meta":29,"style":29},"vncserver -kill :1\n",[31,123838,123839],{"__ignoreMap":29},[34,123840,123841,123843,123846],{"class":36,"line":37},[34,123842,123780],{"class":149},[34,123844,123845],{"class":63}," -kill",[34,123847,123848],{"class":156}," :1\n",[108,123850,123851],{},"将:1替换为你实际使用的显示编号。",[108,123853,123854],{},[2122,123855],{"alt":29,"src":123856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[108,123858,123859],{},[2122,123860],{"alt":29,"src":123861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123863,123865],{"id":123864},"_74-usb端口设置","7.4 USB端口设置",[108,123867,123868],{},[111,123869,123870],{},"首先先配置好权限",[24,123872,123874],{"className":117926,"code":123873,"language":117928,"meta":29,"style":29},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[31,123875,123876,123881,123894,123901,123906],{"__ignoreMap":29},[34,123877,123878],{"class":36,"line":37},[34,123879,123880],{"class":205},"# 将用户权限提高\n",[34,123882,123883,123885,123887,123889,123892],{"class":36,"line":51},[34,123884,25229],{"class":149},[34,123886,27225],{"class":156},[34,123888,27228],{"class":63},[34,123890,123891],{"class":156}," dialout",[34,123893,27233],{"class":40},[34,123895,123896,123898],{"class":36,"line":60},[34,123897,27252],{"class":149},[34,123899,123900],{"class":156}," dialout\n",[34,123902,123903],{"class":36,"line":76},[34,123904,123905],{"class":205},"# 查看下面命令是否输出dialout（若输出才正常）\n",[34,123907,123908],{"class":36,"line":93},[34,123909,123910],{"class":149},"groups\n",[108,123912,123913],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[19,123915,123917],{"id":123916},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[108,123919,123920,123923],{},[111,123921,123922],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[108,123925,123926,123929],{},[111,123927,123928],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[108,123931,123932],{},[111,123933,123934],{},"流程如下：",[108,123936,123937],{},"（1）.查找设备idVendor和idProduct",[108,123939,123940,123941,123944],{},"接入两个USB设备，在终端调用指令",[31,123942,123943],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[108,123946,123947],{},[2122,123948],{"alt":29,"src":123949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[108,123951,123952,123953,123956],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[31,123954,123955],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[108,123958,123959],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[108,123961,123962],{},"（2）.编写映射规则",[108,123964,123965,123966,123969],{},"在",[31,123967,123968],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[24,123971,123973],{"className":117926,"code":123972,"language":117928,"meta":29,"style":29},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[31,123974,123975],{"__ignoreMap":29},[34,123976,123977,123979,123981],{"class":36,"line":37},[34,123978,25229],{"class":149},[34,123980,119213],{"class":156},[34,123982,123983],{"class":156}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[108,123985,123986],{},"输入如下内容：",[24,123988,123990],{"className":117926,"code":123989,"language":117928,"meta":29,"style":29},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[31,123991,123992,124022],{"__ignoreMap":29},[34,123993,123994,123997,123999,124002,124005,124008,124011,124013,124016,124019],{"class":36,"line":37},[34,123995,123996],{"class":40},"KERNEL",[34,123998,153],{"class":87},[34,124000,124001],{"class":156},"=\"ttyUSB*\",",[34,124003,124004],{"class":149}," ATTRS",[34,124006,124007],{"class":156},"{idVendor}==",[34,124009,124010],{"class":149},"\"10c4\"",[34,124012,1173],{"class":149},[34,124014,124015],{"class":156}," ATTRS{idProduct}==\"ea60\",",[34,124017,124018],{"class":156}," MODE:=\"0777\",",[34,124020,124021],{"class":156}," SYMLINK+=\"mylidar\"\n",[34,124023,124024,124026,124028,124030,124032,124034,124037,124039,124042,124044],{"class":36,"line":51},[34,124025,123996],{"class":40},[34,124027,153],{"class":87},[34,124029,124001],{"class":156},[34,124031,124004],{"class":149},[34,124033,124007],{"class":156},[34,124035,124036],{"class":149},"\"1a86\"",[34,124038,1173],{"class":149},[34,124040,124041],{"class":156}," ATTRS{idProduct}==\"7523\",",[34,124043,124018],{"class":156},[34,124045,124046],{"class":156}," SYMLINK+=\"mycar\"\n",[108,124048,124049],{},"代码解释：",[1800,124051,124052,124055,124058,124061],{},[755,124053,124054],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[755,124056,124057],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[755,124059,124060],{},"SYMLINK是符号连接，即绑定的别名；",[755,124062,124063],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[108,124065,124066,124067,124070,124073],{},"***小提示：***",[24205,124068,124069],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[31,124071,124072],{},"\u002Fetc\u002Fudev\u002Frule.d",[24205,124074,124075],{},"目录即可。",[108,124077,124078],{},"表格 还在加载中，请等待加载完成后再尝试复制",[108,124080,124081],{},"（3）.使规则生效",[108,124083,124084],{},"在终端下输入如下指令：",[24,124086,124088],{"className":117926,"code":124087,"language":117928,"meta":29,"style":29},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[31,124089,124090,124095,124107,124118,124122,124127,124140],{"__ignoreMap":29},[34,124091,124092],{"class":36,"line":37},[34,124093,124094],{"class":205},"# Ubuntu用下方命令\n",[34,124096,124097,124099,124101,124104],{"class":36,"line":51},[34,124098,25229],{"class":149},[34,124100,120678],{"class":156},[34,124102,124103],{"class":156}," udev",[34,124105,124106],{"class":156}," reload\n",[34,124108,124109,124111,124113,124115],{"class":36,"line":60},[34,124110,25229],{"class":149},[34,124112,120678],{"class":156},[34,124114,124103],{"class":156},[34,124116,124117],{"class":156}," restart\n",[34,124119,124120],{"class":36,"line":76},[34,124121,3053],{"emptyLinePlaceholder":726},[34,124123,124124],{"class":36,"line":93},[34,124125,124126],{"class":205},"#Fedora用下方命令\n",[34,124128,124129,124131,124134,124137],{"class":36,"line":99},[34,124130,25229],{"class":149},[34,124132,124133],{"class":156}," udevadm",[34,124135,124136],{"class":156}," control",[34,124138,124139],{"class":63}," --reload\n",[34,124141,124142,124144,124146],{"class":36,"line":353},[34,124143,25229],{"class":149},[34,124145,124133],{"class":156},[34,124147,124148],{"class":156}," trigger\n",[108,124150,124151],{},"再重新插拔设备即可。",[108,124153,124154],{},"（4）.测试",[108,124156,124157],{},"终端下输入如下指令",[24,124159,124161],{"className":117926,"code":124160,"language":117928,"meta":29,"style":29},"ll \u002Fdev | grep ttyUSB\n",[31,124162,124163],{"__ignoreMap":29},[34,124164,124165,124168,124171,124173,124175],{"class":36,"line":37},[34,124166,124167],{"class":149},"ll",[34,124169,124170],{"class":156}," \u002Fdev",[34,124172,25762],{"class":87},[34,124174,30887],{"class":149},[34,124176,124177],{"class":156}," ttyUSB\n",[108,124179,124180],{},"运行结果如下：",[108,124182,124183],{},[2122,124184],{"alt":29,"src":124185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[108,124187,124188,124189,124192],{},"也可以多次插拔USB设备，会发现设备端口",[31,124190,124191],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[108,124194,124195],{},[111,124196,118594],{},[108,124198,124199],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[19,124201,124203],{"id":124202},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[108,124205,124206,124208],{},[111,124207,123922],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[108,124210,124211,124213],{},[111,124212,123928],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[108,124215,124216],{},[111,124217,123934],{},[108,124219,124220],{},"（1）.查看所连接的主机USB接口的KERNELS",[108,124222,124223],{},"调用如下指令查看第一台雷达的USB信息：",[24,124225,124227],{"className":117926,"code":124226,"language":117928,"meta":29,"style":29},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[31,124228,124229,124249],{"__ignoreMap":29},[34,124230,124231,124234,124236,124239,124242,124244,124246],{"class":36,"line":37},[34,124232,124233],{"class":149},"udevadm",[34,124235,70456],{"class":156},[34,124237,124238],{"class":63}," --attribute-walk",[34,124240,124241],{"class":63}," --name=\u002Fdev\u002FttyUSB0",[34,124243,25762],{"class":87},[34,124245,30887],{"class":149},[34,124247,124248],{"class":156}," KERNELS\n",[34,124250,124251,124253,124255,124257,124260,124262,124264],{"class":36,"line":51},[34,124252,124233],{"class":149},[34,124254,70456],{"class":156},[34,124256,124238],{"class":63},[34,124258,124259],{"class":63}," --name=\u002Fdev\u002FttyACM0",[34,124261,25762],{"class":87},[34,124263,30887],{"class":149},[34,124265,124248],{"class":156},[108,124267,124268],{},[2122,124269],{"alt":29,"src":124270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[108,124272,124273],{},"调用如下指令查看第二台雷达的USB信息：",[24,124275,124277],{"className":117926,"code":124276,"language":117928,"meta":29,"style":29},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[31,124278,124279],{"__ignoreMap":29},[34,124280,124281,124283,124285,124287,124290,124292,124294],{"class":36,"line":37},[34,124282,124233],{"class":149},[34,124284,70456],{"class":156},[34,124286,124238],{"class":63},[34,124288,124289],{"class":63}," --name=\u002Fdev\u002FttyUSB1",[34,124291,25762],{"class":87},[34,124293,30887],{"class":149},[34,124295,124248],{"class":156},[108,124297,124298,124299,124302,124303,124306,124307,124310],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[31,124300,124301],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[31,124304,124305],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[111,124308,124309],{},"唯一性标识","”。",[108,124312,123962],{},[108,124314,123965,124315,124317],{},[31,124316,123968],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[24,124319,124320],{"className":117926,"code":123972,"language":117928,"meta":29,"style":29},[31,124321,124322],{"__ignoreMap":29},[34,124323,124324,124326,124328],{"class":36,"line":37},[34,124325,25229],{"class":149},[34,124327,119213],{"class":156},[34,124329,123983],{"class":156},[24,124331,124333],{"className":117926,"code":124332,"language":117928,"meta":29,"style":29},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[31,124334,124335,124364],{"__ignoreMap":29},[34,124336,124337,124339,124341,124343,124346,124348,124351,124354,124356,124359,124361],{"class":36,"line":37},[34,124338,123996],{"class":40},[34,124340,153],{"class":87},[34,124342,124001],{"class":156},[34,124344,124345],{"class":40}," KERNELS",[34,124347,153],{"class":87},[34,124349,124350],{"class":156},"=\"1-1.3:1.0\",",[34,124352,124353],{"class":149}," MODE:",[34,124355,153],{"class":156},[34,124357,124358],{"class":149},"\"0777\"",[34,124360,1173],{"class":149},[34,124362,124363],{"class":156}," SYMLINK+=\"rplidar_front\"\n",[34,124365,124366,124368,124370,124372,124374,124376,124379,124381,124383,124385,124387],{"class":36,"line":51},[34,124367,123996],{"class":40},[34,124369,153],{"class":87},[34,124371,124001],{"class":156},[34,124373,124345],{"class":40},[34,124375,153],{"class":87},[34,124377,124378],{"class":156},"=\"1-1.4:1.0\",",[34,124380,124353],{"class":149},[34,124382,153],{"class":156},[34,124384,124358],{"class":149},[34,124386,1173],{"class":149},[34,124388,124389],{"class":156}," SYMLINK+=\"rplidar_back\"\n",[108,124391,124081],{},[108,124393,124084],{},[24,124395,124396],{"className":117926,"code":124087,"language":117928,"meta":29,"style":29},[31,124397,124398,124402,124412,124422,124426,124430,124440],{"__ignoreMap":29},[34,124399,124400],{"class":36,"line":37},[34,124401,124094],{"class":205},[34,124403,124404,124406,124408,124410],{"class":36,"line":51},[34,124405,25229],{"class":149},[34,124407,120678],{"class":156},[34,124409,124103],{"class":156},[34,124411,124106],{"class":156},[34,124413,124414,124416,124418,124420],{"class":36,"line":60},[34,124415,25229],{"class":149},[34,124417,120678],{"class":156},[34,124419,124103],{"class":156},[34,124421,124117],{"class":156},[34,124423,124424],{"class":36,"line":76},[34,124425,3053],{"emptyLinePlaceholder":726},[34,124427,124428],{"class":36,"line":93},[34,124429,124126],{"class":205},[34,124431,124432,124434,124436,124438],{"class":36,"line":99},[34,124433,25229],{"class":149},[34,124435,124133],{"class":156},[34,124437,124136],{"class":156},[34,124439,124139],{"class":63},[34,124441,124442,124444,124446],{"class":36,"line":353},[34,124443,25229],{"class":149},[34,124445,124133],{"class":156},[34,124447,124148],{"class":156},[108,124449,124151],{},[108,124451,124154],{},[108,124453,124157,124454,124457],{},[31,124455,124456],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[108,124459,124460],{},[2122,124461],{"alt":29,"src":124462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[108,124464,124465],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[108,124467,124468,124470],{},[111,124469,118594],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[19,124472,124474],{"id":124473},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[108,124476,124477],{},"（1）.查看所连接的主机USB接口的信息",[24,124479,124481],{"className":117926,"code":124480,"language":117928,"meta":29,"style":29},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[31,124482,124483,124513],{"__ignoreMap":29},[34,124484,124485,124487,124489,124492,124494,124496,124498,124500,124503,124506,124508,124511],{"class":36,"line":37},[34,124486,124233],{"class":149},[34,124488,70456],{"class":156},[34,124490,124491],{"class":63}," -a",[34,124493,29867],{"class":63},[34,124495,29073],{"class":40},[34,124497,124233],{"class":149},[34,124499,70456],{"class":156},[34,124501,124502],{"class":63}," -q",[34,124504,124505],{"class":156}," path",[34,124507,25768],{"class":63},[34,124509,124510],{"class":156}," \u002Fdev\u002FttyACM0",[34,124512,807],{"class":40},[34,124514,124515,124517,124519,124521,124523,124525,124527,124529,124531,124533,124535,124538],{"class":36,"line":51},[34,124516,124233],{"class":149},[34,124518,70456],{"class":156},[34,124520,124491],{"class":63},[34,124522,29867],{"class":63},[34,124524,29073],{"class":40},[34,124526,124233],{"class":149},[34,124528,70456],{"class":156},[34,124530,124502],{"class":63},[34,124532,124505],{"class":156},[34,124534,25768],{"class":63},[34,124536,124537],{"class":156}," \u002Fdev\u002FttyUSB0",[34,124539,807],{"class":40},[108,124541,124542],{},[2122,124543],{"alt":29,"src":124544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[108,124546,124547],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[108,124549,123962],{},[108,124551,123965,124552,124317],{},[31,124553,123968],{},[24,124555,124556],{"className":117926,"code":123972,"language":117928,"meta":29,"style":29},[31,124557,124558],{"__ignoreMap":29},[34,124559,124560,124562,124564],{"class":36,"line":37},[34,124561,25229],{"class":149},[34,124563,119213],{"class":156},[34,124565,123983],{"class":156},[24,124567,124569],{"className":117926,"code":124568,"language":117928,"meta":29,"style":29},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[31,124570,124571,124599,124625],{"__ignoreMap":29},[34,124572,124573,124575,124577,124580,124582,124584,124586,124588,124591,124594,124596],{"class":36,"line":37},[34,124574,123996],{"class":40},[34,124576,153],{"class":87},[34,124578,124579],{"class":156},"=\"ttyACM*\",",[34,124581,124004],{"class":149},[34,124583,124007],{"class":156},[34,124585,124036],{"class":149},[34,124587,1173],{"class":149},[34,124589,124590],{"class":156}," ATTRS{idProduct}==\"55d4\",",[34,124592,124593],{"class":156}," ATTRS{serial}==\"0001\",",[34,124595,124018],{"class":156},[34,124597,124598],{"class":156}," SYMLINK+=\"ttyACM_MCU\"\n",[34,124600,124601,124603,124605,124607,124609,124611,124613,124615,124617,124620,124622],{"class":36,"line":51},[34,124602,123996],{"class":40},[34,124604,153],{"class":87},[34,124606,124579],{"class":156},[34,124608,124004],{"class":149},[34,124610,124007],{"class":156},[34,124612,124036],{"class":149},[34,124614,1173],{"class":149},[34,124616,124590],{"class":156},[34,124618,124619],{"class":156}," ATTRS{serial}==\"0002\",",[34,124621,124018],{"class":156},[34,124623,124624],{"class":156}," SYMLINK+=\"ttyACM_Lidar\"\n",[34,124626,124627,124629,124631,124633,124635,124637,124639,124641,124643,124645],{"class":36,"line":60},[34,124628,123996],{"class":40},[34,124630,153],{"class":87},[34,124632,124001],{"class":156},[34,124634,124004],{"class":149},[34,124636,124007],{"class":156},[34,124638,124036],{"class":149},[34,124640,1173],{"class":149},[34,124642,124041],{"class":156},[34,124644,124018],{"class":156},[34,124646,124647],{"class":156}," SYMLINK+=\"ttyUSB_IMU\"\n",[108,124649,124081],{},[108,124651,124084],{},[24,124653,124654],{"className":117926,"code":124087,"language":117928,"meta":29,"style":29},[31,124655,124656,124660,124670,124680,124684,124688,124698],{"__ignoreMap":29},[34,124657,124658],{"class":36,"line":37},[34,124659,124094],{"class":205},[34,124661,124662,124664,124666,124668],{"class":36,"line":51},[34,124663,25229],{"class":149},[34,124665,120678],{"class":156},[34,124667,124103],{"class":156},[34,124669,124106],{"class":156},[34,124671,124672,124674,124676,124678],{"class":36,"line":60},[34,124673,25229],{"class":149},[34,124675,120678],{"class":156},[34,124677,124103],{"class":156},[34,124679,124117],{"class":156},[34,124681,124682],{"class":36,"line":76},[34,124683,3053],{"emptyLinePlaceholder":726},[34,124685,124686],{"class":36,"line":93},[34,124687,124126],{"class":205},[34,124689,124690,124692,124694,124696],{"class":36,"line":99},[34,124691,25229],{"class":149},[34,124693,124133],{"class":156},[34,124695,124136],{"class":156},[34,124697,124139],{"class":63},[34,124699,124700,124702,124704],{"class":36,"line":353},[34,124701,25229],{"class":149},[34,124703,124133],{"class":156},[34,124705,124148],{"class":156},[108,124707,124708,124709],{},"再重新插拔设备即可，或者 ",[111,124710,124711],{},"直接重启系统。",[108,124713,124154],{},[108,124715,124157,124716,124457],{},[31,124717,124456],{},[108,124719,124720],{},[2122,124721],{"alt":29,"src":124722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[108,124724,124465],{},[108,124726,124727,124729],{},[111,124728,118594],{}," 一些设备可能没有串口号等。",[19,124731,124733],{"id":124732},"_744-其他注意事项","7.4.4 其他注意事项",[108,124735,124736,124737,124739,124740,124743,124744,19062,124747,124750,124751,124753],{},"并非所有的USB设备端口号都是",[31,124738,124191],{},"的格式，比如Arduino的端口号可能是",[31,124741,124742],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[31,124745,124746],{},"videon",[31,124748,124749],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[31,124752,124746],{},"端口，绑定时需要关联的也是该接口。",[108,124755,124756,124757,124760,124761,124764,124765,124767,124768,124771,124772,124775,124776,124779,124780,124779,124783,124779,124786,29036],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[31,124758,124759],{},"KERNEL==\"ttyUSB*\"","修改为",[31,124762,124763],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[31,124766,124759],{},"修改为类似于",[31,124769,124770],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[31,124773,124774],{},"video[0,2,4,6]","表示可以绑定的端口为",[31,124777,124778],{},"video0","或",[31,124781,124782],{},"video2",[31,124784,124785],{},"video4",[31,124787,124788],{},"video6",[14,124790,124792],{"id":124791},"_75-挂载内网网页","7.5 挂载内网网页",[108,124794,124795],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[108,124797,124798],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[108,124800,124801],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[108,124803,124804,124805],{},"Termux 下载地址（F-Droid）：",[520,124806,124807],{"href":124807,"rel":124808},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24517],[108,124810,124811],{},"首先打开app后，先更新软件缓存：",[24,124813,124815],{"className":117926,"code":124814,"language":117928,"meta":29,"style":29},"pkg update\n",[31,124816,124817],{"__ignoreMap":29},[34,124818,124819,124822],{"class":36,"line":37},[34,124820,124821],{"class":149},"pkg",[34,124823,26894],{"class":156},[108,124825,124826],{},"然后换源",[24,124828,124830],{"className":117926,"code":124829,"language":117928,"meta":29,"style":29},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[31,124831,124832],{"__ignoreMap":29},[34,124833,124834,124836,124839],{"class":36,"line":37},[34,124835,123704],{"class":149},[34,124837,124838],{"class":40}," $PREFIX",[34,124840,124841],{"class":156},"\u002Fetc\u002Fapt\u002Fsources.list\n",[108,124843,124844],{},"将该文件内容替换为下面：",[24,124846,124848],{"className":117926,"code":124847,"language":117928,"meta":29,"style":29},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[31,124849,124850],{"__ignoreMap":29},[34,124851,124852,124855,124858,124861],{"class":36,"line":37},[34,124853,124854],{"class":149},"deb",[34,124856,124857],{"class":156}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[34,124859,124860],{"class":156}," stable",[34,124862,124863],{"class":156}," main\n",[1800,124865,124866,124893],{},[755,124867,124868,124869,124871,124872],{},"如果你使用的是",[31,124870,123704],{},"编辑器：",[1800,124873,124874,124881,124887],{},[755,124875,124876,124877,124880],{},"按 ",[31,124878,124879],{},"Ctrl+O"," 保存文件。",[755,124882,124876,124883,124886],{},[31,124884,124885],{},"Enter"," 确认文件名。",[755,124888,124876,124889,124892],{},[31,124890,124891],{},"Ctrl+X"," 退出编辑器。",[755,124894,124868,124895,124871,124898],{},[31,124896,124897],{},"vim",[1800,124899,124900,124906],{},[755,124901,124876,124902,124905],{},[31,124903,124904],{},"Esc"," 退出编辑模式。",[755,124907,124908,124909,124911],{},"输入 ",[31,124910,119851],{}," 保存并退出。",[108,124913,124914],{},"接下来重新更新软件源：",[24,124916,124918],{"className":117926,"code":124917,"language":117928,"meta":29,"style":29},"pkg update && pkg upgrade\n",[31,124919,124920],{"__ignoreMap":29},[34,124921,124922,124924,124926,124928,124930],{"class":36,"line":37},[34,124923,124821],{"class":149},[34,124925,117977],{"class":156},[34,124927,26842],{"class":40},[34,124929,124821],{"class":149},[34,124931,117963],{"class":156},[108,124933,124934],{},"安装python：",[24,124936,124938],{"className":117926,"code":124937,"language":117928,"meta":29,"style":29},"pkg install python\n",[31,124939,124940],{"__ignoreMap":29},[34,124941,124942,124944,124946],{"class":36,"line":37},[34,124943,124821],{"class":149},[34,124945,24486],{"class":156},[34,124947,124948],{"class":156}," python\n",[108,124950,124951,114],{},[111,124952,124953],{},"通过Termux访问设备存储",[108,124955,124956],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[24,124958,124960],{"className":117926,"code":124959,"language":117928,"meta":29,"style":29},"termux-setup-storage\n",[31,124961,124962],{"__ignoreMap":29},[34,124963,124964],{"class":36,"line":37},[34,124965,124959],{"class":149},[752,124967,124968],{},[755,124969,124970,114,124973],{},[111,124971,124972],{},"进入HTML文件所在的目录",[752,124974,124975],{},[755,124976,124977,124978,124980],{},"使用",[31,124979,101906],{},"命令进入HTML文件所在的目录：",[24,124982,124984],{"className":117926,"code":124983,"language":117928,"meta":29,"style":29},"cd ~\u002Fyour_html_folder\n",[31,124985,124986],{"__ignoreMap":29},[34,124987,124988,124990],{"class":36,"line":37},[34,124989,101906],{"class":63},[34,124991,124992],{"class":156}," ~\u002Fyour_html_folder\n",[752,124994,124995],{"start":51},[755,124996,124997,114,125000,125005,125022],{},[111,124998,124999],{},"启动Python HTTP服务器",[752,125001,125002],{},[755,125003,125004],{},"运行以下命令启动一个简单的HTTP服务器：",[24,125006,125008],{"className":117926,"code":125007,"language":117928,"meta":29,"style":29},"python -m http.server 8000\n",[31,125009,125010],{"__ignoreMap":29},[34,125011,125012,125014,125016,125019],{"class":36,"line":37},[34,125013,31031],{"class":149},[34,125015,101512],{"class":63},[34,125017,125018],{"class":156}," http.server",[34,125020,125021],{"class":63}," 8000\n",[752,125023,125024],{"start":60},[755,125025,125026,125027,125030],{},"这会在端口",[31,125028,125029],{},"8000","上启动一个Web服务器。",[1800,125032,125033],{},[755,125034,125035],{},"启动服务器后，Termux会显示日志信息，例如：",[24,125037,125039],{"className":121446,"code":125038,"language":121448,"meta":121449,"style":29},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[31,125040,125041],{"__ignoreMap":29},[34,125042,125043],{"class":36,"line":37},[34,125044,125038],{},[1800,125046,125047],{},[755,125048,125049],{},"这表示服务器已成功启动。",[108,125051,125052],{},[111,125053,125054],{},"在浏览器中访问HTML文件",[752,125056,125057],{},[755,125058,125059,114,125062,125067],{},[111,125060,125061],{},"在同一设备上访问",[752,125063,125064],{},[755,125065,125066],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[24,125068,125071],{"className":125069,"code":125070,"language":72295,"meta":29,"style":29},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[31,125072,125073],{"__ignoreMap":29},[34,125074,125075,125078],{"class":36,"line":37},[34,125076,125077],{"class":40},"http:",[34,125079,125080],{"class":205},"\u002F\u002Flocalhost:8000\n",[1800,125082,125083],{},[755,125084,125085,125086,125089],{},"如果HTML文件中有",[31,125087,125088],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125091,125093],{"id":125092},"_76-linux重点知识","7.6 Linux重点知识",[19,125095,125097],{"id":125096},"_761-关于点的说明","7.6.1 关于点的说明",[108,125099,125100],{},[2122,125101],{"alt":29,"src":125102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[108,125104,125105],{},"一点本目录，两点上目录",[19,125107,125109],{"id":125108},"_762-目录","7.6.2 目录",[22650,125111,125113],{"id":125112},"_7621-系统启动必须","7.6.2.1 系统启动必须",[108,125115,125116],{},[111,125117,125118],{},"\u002Fboot:",[108,125120,125121],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[108,125123,125124],{},[111,125125,125126],{},"\u002Fetc:",[108,125128,125129],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[108,125131,125132],{},[111,125133,125134],{},"\u002Flib：",[108,125136,125137],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[108,125139,125140],{},[111,125141,125142],{},"\u002Fsys:",[108,125144,125145],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22650,125147,125149],{"id":125148},"_7622-指令集合","7.6.2.2 指令集合",[108,125151,125152],{},[111,125153,125154],{},"\u002Fbin:",[108,125156,125157],{},"为二进制文件的缩写，存放最经常使用的命令",[108,125159,125160],{},[111,125161,125162],{},"\u002Fsbin:",[108,125164,125165],{},"只有系统管理员才能使用的程序和指令",[22650,125167,125169],{"id":125168},"_7623-外部文件管理","7.6.2.3 外部文件管理",[108,125171,125172],{},[111,125173,125174],{},"\u002Fdev:",[108,125176,125177],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[108,125179,125180],{},[111,125181,125182],{},"\u002Fmedia:",[108,125184,125185],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[108,125187,125188],{},[111,125189,125190],{},"\u002Fmnt:",[108,125192,125193],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22650,125195,125197],{"id":125196},"_7624-临时文件","7.6.2.4 临时文件",[108,125199,125200],{},[111,125201,125202],{},"\u002Frun:",[108,125204,125205],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[108,125207,125208],{},[111,125209,125210],{},"\u002Flost+found:",[108,125212,125213],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[108,125215,125216],{},[111,125217,125218],{},"\u002Ftmp:",[108,125220,125221],{},"这个目录是用来存放一些临时文件的",[22650,125223,125225],{"id":125224},"_7625-账户","7.6.2.5 账户",[108,125227,125228],{},[111,125229,125230],{},"\u002Froot：",[108,125232,125233],{},"系统管理员的用户主目录",[108,125235,125236,114],{},[111,125237,125238],{},"\u002Fhome",[108,125240,125241],{},"用户的主目录，以用户的账号命名的",[108,125243,125244,114],{},[111,125245,125246],{},"\u002Fusr",[108,125248,125249],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[108,125251,125252],{},[111,125253,125254],{},"\u002Fusr\u002Fbin：",[108,125256,125257],{},"系统用户使用的应用程序与指令",[108,125259,125260],{},[111,125261,125262],{},"\u002Fusr\u002Fsbin：",[108,125264,125265],{},"超级用户使用的比较高级的管理程序和系统守护程序",[108,125267,125268],{},[111,125269,125270],{},"\u002Fusr\u002Fsrc：",[108,125272,125273],{},"内核源代码默认的放置目录",[22650,125275,125277],{"id":125276},"_7626-运行过程要用","7.6.2.6 运行过程要用",[108,125279,125280],{},[111,125281,125282],{},"\u002Fvar：",[108,125284,125285],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[108,125287,125288],{},[111,125289,125290],{},"\u002Fproc:",[108,125292,125293,125294,125297],{},"管理 ",[111,125295,125296],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22650,125299,125301],{"id":125300},"_7627-扩展用的","7.6.2.7 扩展用的",[108,125303,125304],{},[111,125305,125306],{},"\u002Fopt:",[108,125308,125309],{},"默认是空的，我们安装额外软件可以放在这个里面",[108,125311,125312],{},[111,125313,125314],{},"\u002Fsrv:",[108,125316,125317],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[19,125319,125321],{"id":125320},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[108,125323,125324],{},[2122,125325],{"alt":29,"src":125326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[108,125328,125329],{},"windows-->linux:",[108,125331,125332],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[108,125334,125335],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[108,125337,125338],{},"linux传输文件到windows",[108,125340,125341],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[19,125343,125345],{"id":125344},"_764-易忘知识","7.6.4 易忘知识",[108,125347,125348],{},"操作系统内核查看",[24,125350,125351],{"className":117926,"code":121920,"language":117928,"meta":29,"style":29},[31,125352,125353],{"__ignoreMap":29},[34,125354,125355,125357],{"class":36,"line":37},[34,125356,70839],{"class":149},[34,125358,121929],{"class":63},[108,125360,125361],{},[2122,125362],{"alt":29,"src":125363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[108,125365,125366],{},[2122,125367],{"alt":29,"src":125368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[24,125370,125372],{"className":117926,"code":125371,"language":117928,"meta":29,"style":29},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[31,125373,125374,125386],{"__ignoreMap":29},[34,125375,125376,125378,125381,125384],{"class":36,"line":37},[34,125377,122137],{"class":149},[34,125379,125380],{"class":156}," mvtest",[34,125382,125383],{"class":156}," mvtest2",[34,125385,3327],{"class":40},[34,125387,125388],{"class":36,"line":51},[34,125389,125390],{"class":149},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[108,125392,125393],{},[2122,125394],{"alt":29,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[108,125397,125398],{},[2122,125399],{"alt":29,"src":125400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[108,125402,125403,125404,125407],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[31,125405,125406],{},"du -a"," 可以快速查看磁盘使用细节。",[19,125409,125411],{"id":125410},"_765-vim","7.6.5 Vim",[108,125413,125414],{},[2122,125415],{"alt":29,"src":125416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[108,125418,125419],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[108,125421,125422],{},"一开始进去为命令模式，此时点击输入的字母为命令",[108,125424,125425],{},[111,125426,125427],{},"1.命令模式：",[108,125429,125430],{},"i 切换到输入模式，在光标当前位置开始输入文本",[108,125432,125433],{},"x 删除当前光标所在处的字符",[108,125435,125436],{},"：切换到底线命令模式，以在最底一行输入命令",[108,125438,125439],{},"a 进行插入模式，在光标下一个位置输入文本",[108,125441,125442],{},"o 在当前的下方插入一个新行，并进入插入模式",[108,125444,125445],{},"0 在当前行的上方插入一个新行，并进入插入模式",[108,125447,125448],{},"dd 剪切当前行",[108,125450,125451],{},"yy 复制当前行",[108,125453,125454],{},"p 粘贴剪贴板内容到光标下方",[108,125456,125457],{},"P 粘贴剪贴板内容到光标上方",[108,125459,125460],{},"u 撤销上一次操作",[108,125462,125463],{},"ctrl+r 重做上一次操作",[108,125465,125466,125468],{},[1590,125467],{}," 保存文件",[108,125470,125471,125473],{},[1440,125472],{}," 退出Vim编辑器",[108,125475,125476,125478],{},[1440,125477],{},"! 强制退出Vim编辑器，不保存修改",[108,125480,125481],{},[111,125482,125483],{},"2.输入模式：",[108,125485,125486],{},[2122,125487],{"alt":29,"src":125488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[108,125490,125491],{},[111,125492,125493],{},"3.底线命令模式：",[108,125495,125496],{},[2122,125497],{"alt":29,"src":125498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[108,125500,125501],{},"按下esc可以退出底线命令模式",[19,125503,125505],{"id":125504},"_766-apt","7.6.6 apt",[108,125507,125508],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[19,125510,125512],{"id":125511},"_767-home与root的区别","7.6.7 home与root的区别",[108,125514,125515],{},[2122,125516],{"alt":29,"src":125517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[108,125519,125520],{},[2122,125521],{"alt":29,"src":125522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[108,125524,125525],{},[2122,125526],{"alt":29,"src":125527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[108,125529,125530],{},[2122,125531],{"alt":29,"src":125532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[19,125534,125536],{"id":125535},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[108,125538,125539],{},[520,125540,125541],{"href":125541,"rel":125542},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24517],[752,125544,125545,125548],{},[755,125546,125547],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[755,125549,125550],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[108,125552,125553],{},[2122,125554],{"alt":29,"src":125555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[108,125557,125558],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[108,125560,125561],{},[2122,125562],{"alt":29,"src":125563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[24,125565,125567],{"className":121446,"code":125566,"language":121448,"meta":121449,"style":29},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[31,125568,125569,125574],{"__ignoreMap":29},[34,125570,125571],{"class":36,"line":37},[34,125572,125573],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[34,125575,125576],{"class":36,"line":51},[34,125577,125578],{},".\u002Fpycharm.sh\n",[108,125580,125581],{},"3️⃣创建.desktop文件",[108,125583,125584],{},[111,125585,125586],{},"原理：",[1800,125588,125589,125599],{},[755,125590,125591,125592,125598],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[111,125593,125594,125597],{},[31,125595,125596],{},".desktop"," 文件"," 来识别应用。",[755,125600,125601,125603,125604],{},[31,125602,125596],{}," 文件相当于一个“应用注册表”，告诉系统：",[1800,125605,125606,125609,125612,125615,125618],{},[755,125607,125608],{},"应用名字（Name）",[755,125610,125611],{},"图标（Icon）",[755,125613,125614],{},"执行命令（Exec）",[755,125616,125617],{},"分类（Categories）",[755,125619,125620],{},"是否需要终端（Terminal）",[24,125622,125624],{"className":121446,"code":125623,"language":121448,"meta":121449,"style":29},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[31,125625,125626,125631],{"__ignoreMap":29},[34,125627,125628],{"class":36,"line":37},[34,125629,125630],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[34,125632,125633],{"class":36,"line":51},[34,125634,125635],{},"nano pycharm.desktop\n",[108,125637,125638],{},"nano是一个命令行下的编辑器，也可以使用vim",[24,125640,125642],{"className":121446,"code":125641,"language":121448,"meta":121449,"style":29},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[31,125643,125644,125649,125654,125659,125664,125669,125674,125679,125684,125689],{"__ignoreMap":29},[34,125645,125646],{"class":36,"line":37},[34,125647,125648],{},"[Desktop Entry]\n",[34,125650,125651],{"class":36,"line":51},[34,125652,125653],{},"Version=1.0\n",[34,125655,125656],{"class":36,"line":60},[34,125657,125658],{},"Type=Application\n",[34,125660,125661],{"class":36,"line":76},[34,125662,125663],{},"Name=PyCharm\n",[34,125665,125666],{"class":36,"line":93},[34,125667,125668],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[34,125670,125671],{"class":36,"line":99},[34,125672,125673],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[34,125675,125676],{"class":36,"line":353},[34,125677,125678],{},"Comment=JetBrains PyCharm IDE\n",[34,125680,125681],{"class":36,"line":359},[34,125682,125683],{},"Categories=Development;IDE;\n",[34,125685,125686],{"class":36,"line":579},[34,125687,125688],{},"Terminal=false\n",[34,125690,125691],{"class":36,"line":589},[34,125692,125693],{},"StartupWMClass=jetbrains-pycharm\n",[1800,125695,125696,125702,125708,125714],{},[755,125697,125698,125701],{},[31,125699,125700],{},"Exec"," → 点击图标时执行的命令",[755,125703,125704,125707],{},[31,125705,125706],{},"Icon"," → 显示在菜单和桌面上的图标",[755,125709,125710,125713],{},[31,125711,125712],{},"Terminal=false"," → 不打开终端",[755,125715,125716,125719],{},[31,125717,125718],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125721,125722,125723],"blockquote",{},[108,125724,125725,125726,125728,125729],{},"可以理解成 ",[31,125727,125596],{}," 文件是 Linux 的 ",[111,125730,125731],{},"快捷方式配置文件",[108,125733,125734],{},"4️⃣设置可执行权限",[24,125736,125738],{"className":121446,"code":125737,"language":121448,"meta":121449,"style":29},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[31,125739,125740],{"__ignoreMap":29},[34,125741,125742],{"class":36,"line":37},[34,125743,125737],{},[108,125745,125746],{},"5️⃣桌面图标启动的话如下：",[24,125748,125750],{"className":121446,"code":125749,"language":121448,"meta":121449,"style":29},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[31,125751,125752,125757],{"__ignoreMap":29},[34,125753,125754],{"class":36,"line":37},[34,125755,125756],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[34,125758,125759],{"class":36,"line":51},[34,125760,125761],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[752,125763,125764],{"start":60},[755,125765,125766],{},"下载Appimage文件实现软件的安装",[108,125768,125769],{},"1️⃣先下载appimage",[108,125771,125772],{},[520,125773,125774],{"href":125774,"rel":125775},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24517],[108,125777,125778],{},[2122,125779],{"alt":29,"src":125780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[108,125782,125783],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[108,125785,125786],{},[2122,125787],{"alt":29,"src":125788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[108,125790,125791],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[108,125793,125794],{},[2122,125795],{"alt":29,"src":125796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[108,125798,125799],{},[2122,125800],{"alt":29,"src":125801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[108,125803,125804,125805,125808],{},"3️⃣给他们放在",[31,125806,125807],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[108,125810,125811],{},"4️⃣给软件执行权限",[24,125813,125815],{"className":121446,"code":125814,"language":121448,"meta":121449,"style":29},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[31,125816,125817,125822],{"__ignoreMap":29},[34,125818,125819],{"class":36,"line":37},[34,125820,125821],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[34,125823,125824],{"class":36,"line":51},[34,125825,125826],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[108,125828,125829],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[24,125831,125833],{"className":117926,"code":125832,"language":117928,"meta":29,"style":29},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[31,125834,125835,125842,125849,125855],{"__ignoreMap":29},[34,125836,125837,125839],{"class":36,"line":37},[34,125838,101906],{"class":63},[34,125840,125841],{"class":156}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[34,125843,125844,125846],{"class":36,"line":51},[34,125845,101913],{"class":149},[34,125847,125848],{"class":156}," .\u002Fqqmusic.desktop\n",[34,125850,125851,125853],{"class":36,"line":60},[34,125852,124897],{"class":149},[34,125854,125848],{"class":156},[34,125856,125857,125859,125861,125863],{"class":36,"line":76},[34,125858,25229],{"class":149},[34,125860,25232],{"class":156},[34,125862,123763],{"class":156},[34,125864,125848],{"class":156},[108,125866,125867,125869],{},[31,125868,101913],{},"：一个 Linux 命令，主要功能是：",[1800,125871,125872,125875],{},[755,125873,125874],{},"如果文件不存在，就创建一个新的空文件",[755,125876,125877],{},"如果文件已存在，就更新该文件的最后修改时间",[24,125879,125881],{"className":121446,"code":125880,"language":121448,"meta":121449,"style":29},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[31,125882,125883,125887,125892,125897,125902,125906,125911],{"__ignoreMap":29},[34,125884,125885],{"class":36,"line":37},[34,125886,125648],{},[34,125888,125889],{"class":36,"line":51},[34,125890,125891],{},"Name=QQ音乐\n",[34,125893,125894],{"class":36,"line":60},[34,125895,125896],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[34,125898,125899],{"class":36,"line":76},[34,125900,125901],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[34,125903,125904],{"class":36,"line":93},[34,125905,125658],{},[34,125907,125908],{"class":36,"line":99},[34,125909,125910],{},"Categories=Audio;Music;Player;\n",[34,125912,125913],{"class":36,"line":353},[34,125914,125915],{},"Comment=QQ Music Client for Linux\n",[108,125917,125918],{},"将文件复制进去",[108,125920,125921],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[108,125923,125924],{},[2122,125925],{"alt":29,"src":125926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[108,125928,125929],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[108,125931,125932],{},[2122,125933],{"alt":29,"src":125934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[108,125936,125937,125938,125941,125942,125945],{},"如果你用的不是KDE，那么也可以直接修改",[31,125939,125940],{},"qqmuic.desktop","：在exec的末尾加上",[31,125943,125944],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[24,125947,125949],{"className":121446,"code":125948,"language":121448,"meta":121449,"style":29},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[31,125950,125951,125955,125959,125964,125968,125972,125976],{"__ignoreMap":29},[34,125952,125953],{"class":36,"line":37},[34,125954,125648],{},[34,125956,125957],{"class":36,"line":51},[34,125958,125891],{},[34,125960,125961],{"class":36,"line":60},[34,125962,125963],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[34,125965,125966],{"class":36,"line":76},[34,125967,125901],{},[34,125969,125970],{"class":36,"line":93},[34,125971,125658],{},[34,125973,125974],{"class":36,"line":99},[34,125975,125910],{},[34,125977,125978],{"class":36,"line":353},[34,125979,125915],{},[108,125981,125982],{},[2122,125983],{"alt":29,"src":125984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[108,125986,125987],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[24,125989,125991],{"className":121446,"code":125990,"language":121448,"meta":121449,"style":29},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[31,125992,125993],{"__ignoreMap":29},[34,125994,125995],{"class":36,"line":37},[34,125996,125990],{},[752,125998,125999],{"start":76},[755,126000,126001],{},"去Flathub上安装软件",[108,126003,126004],{},[520,126005,126006],{"href":126006,"rel":126007},"https:\u002F\u002Fflathub.org\u002F",[24517],[108,126009,126010],{},"1️⃣去上面的官网搜索软件+下载软件",[108,126012,126013],{},[2122,126014],{"alt":29,"src":126015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[24,126017,126019],{"className":121446,"code":126018,"language":121448,"meta":121449,"style":29},"flatpak install flathub com.obsproject.Studio\n",[31,126020,126021],{"__ignoreMap":29},[34,126022,126023],{"class":36,"line":37},[34,126024,126018],{},[108,126026,126027],{},[2122,126028],{"alt":29,"src":126029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[108,126031,126032],{},"2️⃣运行软件",[108,126034,126035],{},"a.官方方式：",[108,126037,126038],{},[2122,126039],{"alt":29,"src":126040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[24,126042,126043],{"className":121446,"code":126018,"language":121448,"meta":121449,"style":29},[31,126044,126045],{"__ignoreMap":29},[34,126046,126047],{"class":36,"line":37},[34,126048,126018],{},[108,126050,126051],{},"b.当普通软件运行：",[108,126053,126054],{},[2122,126055],{"alt":29,"src":126056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[108,126058,126059],{},[2122,126060],{"alt":29,"src":126061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[45,126063,126064],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":29,"searchDepth":51,"depth":51,"links":126066},[126067,126068,126073,126074,126080,126081],{"id":122799,"depth":51,"text":122800},{"id":123141,"depth":51,"text":123142,"children":126069},[126070,126071,126072],{"id":123145,"depth":60,"text":123146},{"id":123212,"depth":60,"text":123213},{"id":123473,"depth":60,"text":123474},{"id":123626,"depth":51,"text":123627},{"id":123864,"depth":51,"text":123865,"children":126075},[126076,126077,126078,126079],{"id":123916,"depth":60,"text":123917},{"id":124202,"depth":60,"text":124203},{"id":124473,"depth":60,"text":124474},{"id":124732,"depth":60,"text":124733},{"id":124791,"depth":51,"text":124792},{"id":125092,"depth":51,"text":125093,"children":126082},[126083,126084,126085,126086,126087,126088,126089,126090],{"id":125096,"depth":60,"text":125097},{"id":125108,"depth":60,"text":125109},{"id":125320,"depth":60,"text":125321},{"id":125344,"depth":60,"text":125345},{"id":125410,"depth":60,"text":125411},{"id":125504,"depth":60,"text":125505},{"id":125511,"depth":60,"text":125512},{"id":125535,"depth":60,"text":125536},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122791,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126097,"title":126098,"body":126099,"description":723,"extension":724,"meta":126103,"navigation":726,"path":126104,"seo":126105,"stem":126106,"__hash__":126107},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126100,"toc":126101},[],{"title":29,"searchDepth":51,"depth":51,"links":126102},[],{"category":30914},"\u002Fwiki\u002F2025-01-27-linux",{"title":126098,"description":723},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126109,"title":126110,"body":126111,"description":126115,"extension":724,"meta":126506,"navigation":726,"path":126507,"seo":126508,"stem":126509,"__hash__":126510},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126112,"toc":126504},[126113,126116,126120,126137,126140,126193,126197,126199,126239,126248,126252,126255,126496,126501],[108,126114,126115],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126117,126119],{"id":126118},"_1ubuntu环境配置","1.Ubuntu环境配置",[752,126121,126122,126125,126128,126131,126134],{},[755,126123,126124],{},"ubuntu环境换源",[755,126126,126127],{},"安装cuda",[755,126129,126130],{},"安装miniconda",[755,126132,126133],{},"安装pytorch",[755,126135,126136],{},"安装genesis",[108,126138,126139],{},"参考链接：",[24,126141,126143],{"className":24474,"code":126142,"language":24476,"meta":29,"style":29},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[31,126144,126145],{"__ignoreMap":29},[34,126146,126147,126150,126153,126156,126158,126161,126164,126166,126169,126172,126174,126177,126180,126182,126185,126188,126190],{"class":36,"line":37},[34,126148,126149],{"class":149},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[34,126151,126152],{"class":156},"=blogdetail",[34,126154,126155],{"class":40},"&sharetype",[34,126157,153],{"class":87},[34,126159,126160],{"class":156},"blogdetail",[34,126162,126163],{"class":40},"&sharerId",[34,126165,153],{"class":87},[34,126167,126168],{"class":156},"144728092",[34,126170,126171],{"class":40},"&sharerefer",[34,126173,153],{"class":87},[34,126175,126176],{"class":156},"PC",[34,126178,126179],{"class":40},"&sharesource",[34,126181,153],{"class":87},[34,126183,126184],{"class":156},"qq_69379513",[34,126186,126187],{"class":40},"&sharefrom",[34,126189,153],{"class":87},[34,126191,126192],{"class":156},"from_link\n",[10,126194,126196],{"id":126195},"_2genesis-报错issue","2.Genesis 报错issue",[108,126198,126139],{},[24,126200,126201],{"className":24474,"code":126142,"language":24476,"meta":29,"style":29},[31,126202,126203],{"__ignoreMap":29},[34,126204,126205,126207,126209,126211,126213,126215,126217,126219,126221,126223,126225,126227,126229,126231,126233,126235,126237],{"class":36,"line":37},[34,126206,126149],{"class":149},[34,126208,126152],{"class":156},[34,126210,126155],{"class":40},[34,126212,153],{"class":87},[34,126214,126160],{"class":156},[34,126216,126163],{"class":40},[34,126218,153],{"class":87},[34,126220,126168],{"class":156},[34,126222,126171],{"class":40},[34,126224,153],{"class":87},[34,126226,126176],{"class":156},[34,126228,126179],{"class":40},[34,126230,153],{"class":87},[34,126232,126184],{"class":156},[34,126234,126187],{"class":40},[34,126236,153],{"class":87},[34,126238,126192],{"class":156},[24,126240,126242],{"className":24474,"code":126241,"language":24476,"meta":29,"style":29},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[31,126243,126244],{"__ignoreMap":29},[34,126245,126246],{"class":36,"line":37},[34,126247,126241],{"class":149},[10,126249,126251],{"id":126250},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[108,126253,126254],{},"hello_robot.py",[24,126256,126258],{"className":31029,"code":126257,"language":31031,"meta":29,"style":29},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[31,126259,126260,126266,126281,126285,126297,126309,126313,126326,126330,126349,126359,126369,126383,126387,126391,126396,126400,126410,126417,126431,126438,126448,126453,126457,126475,126480,126484,126491],{"__ignoreMap":29},[34,126261,126262,126264],{"class":36,"line":37},[34,126263,31043],{"class":87},[34,126265,45956],{"class":40},[34,126267,126268,126271,126274,126276,126278],{"class":36,"line":51},[34,126269,126270],{"class":40},"os.environ[",[34,126272,126273],{"class":156},"'PYOPENGL_PLATFORM'",[34,126275,5096],{"class":40},[34,126277,153],{"class":87},[34,126279,126280],{"class":156}," 'glx'\n",[34,126282,126283],{"class":36,"line":60},[34,126284,3053],{"emptyLinePlaceholder":726},[34,126286,126287,126289,126292,126294],{"class":36,"line":76},[34,126288,31043],{"class":87},[34,126290,126291],{"class":40}," genesis ",[34,126293,32034],{"class":87},[34,126295,126296],{"class":40}," gs\n",[34,126298,126299,126301,126304,126306],{"class":36,"line":93},[34,126300,31388],{"class":87},[34,126302,126303],{"class":40}," pynput ",[34,126305,31043],{"class":87},[34,126307,126308],{"class":40}," keyboard\n",[34,126310,126311],{"class":36,"line":99},[34,126312,3053],{"emptyLinePlaceholder":726},[34,126314,126315,126318,126321,126323],{"class":36,"line":353},[34,126316,126317],{"class":40},"gs.init(",[34,126319,126320],{"class":5869},"backend",[34,126322,153],{"class":87},[34,126324,126325],{"class":40},"gs.gpu)\n",[34,126327,126328],{"class":36,"line":359},[34,126329,3053],{"emptyLinePlaceholder":726},[34,126331,126332,126335,126337,126340,126343,126345,126347],{"class":36,"line":579},[34,126333,126334],{"class":40},"scene ",[34,126336,153],{"class":87},[34,126338,126339],{"class":40}," gs.Scene(",[34,126341,126342],{"class":5869},"show_viewer",[34,126344,153],{"class":87},[34,126346,32127],{"class":63},[34,126348,807],{"class":40},[34,126350,126351,126354,126356],{"class":36,"line":589},[34,126352,126353],{"class":40},"plane ",[34,126355,153],{"class":87},[34,126357,126358],{"class":40}," scene.add_entity(gs.morphs.Plane())\n",[34,126360,126361,126364,126366],{"class":36,"line":601},[34,126362,126363],{"class":40},"franka ",[34,126365,153],{"class":87},[34,126367,126368],{"class":40}," scene.add_entity(\n",[34,126370,126371,126374,126376,126378,126381],{"class":36,"line":613},[34,126372,126373],{"class":40},"    gs.morphs.MJCF(",[34,126375,46005],{"class":5869},[34,126377,153],{"class":87},[34,126379,126380],{"class":156},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[34,126382,38698],{"class":40},[34,126384,126385],{"class":36,"line":618},[34,126386,807],{"class":40},[34,126388,126389],{"class":36,"line":628},[34,126390,3053],{"emptyLinePlaceholder":726},[34,126392,126393],{"class":36,"line":640},[34,126394,126395],{"class":40},"scene.build()\n",[34,126397,126398],{"class":36,"line":2301},[34,126399,3053],{"emptyLinePlaceholder":726},[34,126401,126402,126404,126407],{"class":36,"line":2307},[34,126403,32598],{"class":87},[34,126405,126406],{"class":149}," on_press",[34,126408,126409],{"class":40},"(key):\n",[34,126411,126412,126415],{"class":36,"line":2328},[34,126413,126414],{"class":87},"    try",[34,126416,4392],{"class":40},[34,126418,126419,126421,126424,126426,126429],{"class":36,"line":2333},[34,126420,3150],{"class":87},[34,126422,126423],{"class":40}," key.char ",[34,126425,3602],{"class":87},[34,126427,126428],{"class":156}," 'q'",[34,126430,4392],{"class":40},[34,126432,126433,126435],{"class":36,"line":2347},[34,126434,16384],{"class":87},[34,126436,126437],{"class":63}," False\n",[34,126439,126440,126443,126446],{"class":36,"line":2352},[34,126441,126442],{"class":87},"    except",[34,126444,126445],{"class":63}," AttributeError",[34,126447,4392],{"class":40},[34,126449,126450],{"class":36,"line":2381},[34,126451,126452],{"class":87},"        pass\n",[34,126454,126455],{"class":36,"line":2386},[34,126456,3053],{"emptyLinePlaceholder":726},[34,126458,126459,126462,126464,126467,126470,126472],{"class":36,"line":2403},[34,126460,126461],{"class":40},"listener ",[34,126463,153],{"class":87},[34,126465,126466],{"class":40}," keyboard.Listener(",[34,126468,126469],{"class":5869},"on_press",[34,126471,153],{"class":87},[34,126473,126474],{"class":40},"on_press)\n",[34,126476,126477],{"class":36,"line":2408},[34,126478,126479],{"class":40},"listener.start()\n",[34,126481,126482],{"class":36,"line":2413},[34,126483,3053],{"emptyLinePlaceholder":726},[34,126485,126486,126488],{"class":36,"line":2418},[34,126487,109293],{"class":87},[34,126489,126490],{"class":40}," listener.running:\n",[34,126492,126493],{"class":36,"line":2432},[34,126494,126495],{"class":40},"    scene.step()\n",[108,126497,126498],{},[2122,126499],{"alt":29,"src":126500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[45,126502,126503],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":29,"searchDepth":51,"depth":51,"links":126505},[],{"category":24030},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126110,"description":126115},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126512,"title":126513,"body":126514,"description":723,"extension":724,"meta":126529,"navigation":726,"path":126530,"seo":126531,"stem":126532,"__hash__":126533},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126515,"toc":126526},[126516,126519,126523],[10,126517,126513],{"id":126518},"_1-基础知识",[14,126520,126522],{"id":126521},"_11-js的组成","1.1 js的组成",[108,126524,126525],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":29,"searchDepth":51,"depth":51,"links":126527},[126528],{"id":126521,"depth":51,"text":126522},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126513,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126535,"title":126536,"body":126537,"description":723,"extension":724,"meta":126676,"navigation":726,"path":126677,"seo":126678,"stem":126679,"__hash__":126680},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126538,"toc":126664},[126539,126542,126546,126549,126553,126563,126567,126570,126573,126576,126580,126587,126593,126597,126603,126614,126618,126621,126625,126628,126632,126635,126639,126642,126646,126649,126652,126655,126658,126661],[10,126540,126536],{"id":126541},"_2-vscode必备内容",[14,126543,126545],{"id":126544},"_21-标签分类","2.1 标签分类",[108,126547,126548],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126550,126552],{"id":126551},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[108,126554,126555,126556,126558,126559,126562],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[31,126557,1022],{}," 然后按 ",[31,126560,126561],{},"Tab","，快速自动生成基本结构。",[14,126564,126566],{"id":126565},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[108,126568,126569],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[108,126571,126572],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[108,126574,126575],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126577,126579],{"id":126578},"_24-视图缩放","2.4 视图缩放",[108,126581,126582,126583,126586],{},"缩放视图 ",[31,126584,126585],{},"ctrl+"," 可实现代码增大。",[108,126588,126589,126592],{},[31,126590,126591],{},"ctrl-"," 可实现代码减小。",[14,126594,126596],{"id":126595},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[108,126598,126599,126600,29036],{},"VSCode 新建文件快捷键为 ",[31,126601,126602],{},"ctrl+N",[108,126604,126605,126606,126609,126610,126613],{},"保存快捷键为 ",[31,126607,126608],{},"ctrl+S","，将文本保存为 ",[31,126611,126612],{},".html"," 文件。",[14,126615,126617],{"id":126616},"_26-auto-rename-tag","2.6 Auto Rename Tag",[108,126619,126620],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126622,126624],{"id":126623},"_27-vscode-icons","2.7 vscode-icons",[108,126626,126627],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126629,126631],{"id":126630},"_28-easy-less","2.8 Easy LESS",[108,126633,126634],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126636,126638],{"id":126637},"_29-会了吧插件","2.9 会了吧插件",[108,126640,126641],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126643,126645],{"id":126644},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[108,126647,126648],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[108,126650,126651],{},"②选定多个相同的单词:ctrl+D",[108,126653,126654],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[108,126656,126657],{},"④全局替换某些单词:ctrl+h",[108,126659,126660],{},"⑤快速定位到某一行:ctrl+g",[108,126662,126663],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":29,"searchDepth":51,"depth":51,"links":126665},[126666,126667,126668,126669,126670,126671,126672,126673,126674,126675],{"id":126544,"depth":51,"text":126545},{"id":126551,"depth":51,"text":126552},{"id":126565,"depth":51,"text":126566},{"id":126578,"depth":51,"text":126579},{"id":126595,"depth":51,"text":126596},{"id":126616,"depth":51,"text":126617},{"id":126623,"depth":51,"text":126624},{"id":126630,"depth":51,"text":126631},{"id":126637,"depth":51,"text":126638},{"id":126644,"depth":51,"text":126645},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126536,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126682,"title":126683,"body":126684,"description":723,"extension":724,"meta":126843,"navigation":726,"path":126844,"seo":126845,"stem":126846,"__hash__":126847},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126685,"toc":126835},[126686,126689,126693,126703,126709,126715,126719,126728,126732,126737,126740,126743,126747,126750,126760,126769,126778,126787,126797,126804,126809,126814,126827],[10,126687,126683],{"id":126688},"_3-html文本与容器标签",[14,126690,126692],{"id":126691},"_31-标题标签","3.1 标题标签",[108,126694,126695,126698,126699,126702],{},[31,126696,126697],{},"\u003Ch1>","我是一级标签",[31,126700,126701],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[108,126704,126705,126698,126707],{},[31,126706,126697],{},[31,126708,126701],{},[108,126710,123965,126711,126714],{},[31,126712,126713],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126716,126718],{"id":126717},"_32-段落标签","3.2 段落标签",[108,126720,126721,126724,126725],{},[31,126722,126723],{},"\u003Cp>","....",[31,126726,126727],{},"\u003C\u002Fp>",[14,126729,126731],{"id":126730},"_33-换行标签","3.3 换行标签",[108,126733,126734],{},[31,126735,126736],{},"\u003Cbr \u002F>",[108,126738,126739],{},"具有强制换行的作用",[108,126741,126742],{},"单标签",[14,126744,126746],{"id":126745},"_34-文本格式化标签","3.4 文本格式化标签",[108,126748,126749],{},"提供粗体、斜体和下划线等效果",[108,126751,126752,126753,83169,126756,126759],{},"加粗：",[31,126754,126755],{},"\u003Cstrong>...\u003C\u002Fstrong>",[31,126757,126758],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[108,126761,126762,126763,83169,126766,126759],{},"斜体：",[31,126764,126765],{},"\u003Cem>...\u003C\u002Fem>",[31,126767,126768],{},"\u003Ci>...\u003C\u002Fi>",[108,126770,126771,126772,83169,126775,126759],{},"删除线：",[31,126773,126774],{},"\u003Cdel>...\u003C\u002Fdel>",[31,126776,126777],{},"\u003Cs>...\u003C\u002Fs>",[108,126779,126780,126781,83169,126784,126759],{},"下划线：",[31,126782,126783],{},"\u003Cins>...\u003C\u002Fins>",[31,126785,126786],{},"\u003Cu>...\u003C\u002Fu>",[14,126788,126790,126791,19062,126794,103323],{"id":126789},"_35-div和span标签","3.5 ",[31,126792,126793],{},"\u003Cdiv>",[31,126795,126796],{},"\u003Cspan>",[108,126798,126799,101648,126801,126803],{},[31,126800,126793],{},[31,126802,126796],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[108,126805,126806],{},[31,126807,126808],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[108,126810,126811],{},[31,126812,126813],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[108,126815,126816,126817,126819,126820,126822,126823,126826],{},"两者特点：①",[31,126818,126793],{}," 标签用来布局，但一行通常只放一个 ",[31,126821,126793],{},"。可以理解为一个大盒子，独占一行，在 ",[31,126824,126825],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[108,126828,77879,126829,126831,126832,126834],{},[31,126830,126796],{}," 标签也可用于布局，一行可以放多个 ",[31,126833,126796],{},"，可理解为小盒子。",{"title":29,"searchDepth":51,"depth":51,"links":126836},[126837,126838,126839,126840,126841],{"id":126691,"depth":51,"text":126692},{"id":126717,"depth":51,"text":126718},{"id":126730,"depth":51,"text":126731},{"id":126745,"depth":51,"text":126746},{"id":126789,"depth":51,"text":126842},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126683,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126849,"title":126850,"body":126851,"description":723,"extension":724,"meta":127048,"navigation":726,"path":127049,"seo":127050,"stem":127051,"__hash__":127052},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126852,"toc":127040},[126853,126856,126860,126863,126869,126876,126882,126888,126891,126894,126897,126900,126903,126906,126909,126913,126916,126919,126922,126928,126934,126940,126947,126951,126957,126963,126966,126969,126975,126981,126987,126990,126993,126997,127000,127010,127016,127020,127029,127033,127036],[10,126854,126850],{"id":126855},"_4-html图像与链接",[14,126857,126859],{"id":126858},"_41-图像标签","4.1 图像标签",[108,126861,126862],{},"（1）标签",[108,126864,126865,126868],{},[31,126866,126867],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[108,126870,126871,126872,126875],{},"src是",[31,126873,126874],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[108,126877,126878,126879],{},"alt:文本，替换文本。图像不能显示的文字 ",[31,126880,126881],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[108,126883,126884,126885],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[31,126886,126887],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[108,126889,126890],{},"width:像素，设置图像的宽度",[108,126892,126893],{},"height:像素，设置图像的高度",[108,126895,126896],{},"border：像素，设置图像的边框粗细",[108,126898,126899],{},"（2）图像标签属性的注意点：",[108,126901,126902],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[108,126904,126905],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[108,126907,126908],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126910,126912],{"id":126911},"_42-路径注意要点","4.2 路径注意要点：",[108,126914,126915],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[108,126917,126918],{},"（2）根目录：就是打开文件夹的第一层根目录",[108,126920,126921],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[108,126923,126924,126925],{},"①同一级路径：图像文件位于HTML文件同一级，如",[31,126926,126927],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[108,126929,126930,126931],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[31,126932,126933],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[108,126935,126936,126937],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[31,126938,126939],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[108,126941,126942,126943,1046],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[520,126944,126945],{"href":126945,"rel":126946},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24517],[14,126948,126950],{"id":126949},"_43-超链接标签","4.3 超链接标签",[108,126952,126953,126956],{},[31,126954,126955],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[108,126958,126959,126960],{},"①语法格式：",[31,126961,126962],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[108,126964,126965],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[108,126967,126968],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[108,126970,126971,126972],{},"③链接分类：外部链接：",[31,126973,126974],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[108,126976,126977,126978],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[31,126979,126980],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[108,126982,126983,126984],{},"空链接：如果当时没有确定链接目标时，",[31,126985,126986],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[108,126988,126989],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[108,126991,126992],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126994,126996],{"id":126995},"_44-锚点链接","4.4 锚点链接",[108,126998,126999],{},"点我们点击链接，可以快速定位到页面中的某个位置",[108,127001,127002,127003,127006,127007],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[31,127004,127005],{},"\u003Ca href=\"#two\">","第二级",[31,127008,127009],{},"\u003C\u002Fa>",[108,127011,127012,127013],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[31,127014,127015],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127017,127019],{"id":127018},"_45-注释标签","4.5 注释标签",[108,127021,127022,127025,127026],{},[31,127023,127024],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[31,127027,127028],{},"ctrl+\u002F",[14,127030,127032],{"id":127031},"_46-特殊字符","4.6 特殊字符",[108,127034,127035],{},"可以实现添加多个空格",[2122,127037],{"style":127038,"src":127039},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":29,"searchDepth":51,"depth":51,"links":127041},[127042,127043,127044,127045,127046,127047],{"id":126858,"depth":51,"text":126859},{"id":126911,"depth":51,"text":126912},{"id":126949,"depth":51,"text":126950},{"id":126995,"depth":51,"text":126996},{"id":127018,"depth":51,"text":127019},{"id":127031,"depth":51,"text":127032},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126850,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127054,"title":127055,"body":127056,"description":723,"extension":724,"meta":127345,"navigation":726,"path":127346,"seo":127347,"stem":127348,"__hash__":127349},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127057,"toc":127336},[127058,127061,127065,127068,127071,127074,127077,127080,127083,127086,127089,127092,127112,127118,127122,127125,127128,127131,127134,127137,127140,127144,127147,127150,127153,127156,127169,127174,127177,127180,127193,127196,127199,127202,127205,127208,127212,127215,127222,127225,127228,127231,127234,127237,127242,127245,127248,127254,127257,127260,127263,127268,127271,127274,127288,127295,127298,127301,127308,127317,127320,127323,127326,127330,127333],[10,127059,127055],{"id":127060},"_5-html表格列表与表单",[14,127062,127064],{"id":127063},"_51-表格标签","5.1 表格标签",[108,127066,127067],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[108,127069,127070],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[108,127072,127073],{},"②表格基本语法：",[2122,127075],{"style":127038,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[108,127078,127079],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2122,127081],{"style":127038,"src":127082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[108,127084,127085],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2122,127087],{"style":127038,"src":127088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[108,127090,127091],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[108,127093,127094,127097,127098,127100,127101,127104,127105,127107,127108,127111],{},[31,127095,127096],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[31,127099,127096],{},"内部必须拥有",[31,127102,127103],{},"\u003Ctr>","标签，一般位于第一行，",[31,127106,127096],{},"比",[31,127109,127110],{},"\u003Cth>","范围广",[108,127113,127114,127117],{},[31,127115,127116],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127119,127121],{"id":127120},"_52-合并单元格","5.2 合并单元格",[108,127123,127124],{},"（1）合并单元格方式：",[108,127126,127127],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[108,127129,127130],{},"②跨列合并：colspan=\"合并单元格的个数\"",[108,127132,127133],{},"（2）目标单元格：",[108,127135,127136],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[108,127138,127139],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127141,127143],{"id":127142},"_53-列表标签","5.3 列表标签",[108,127145,127146],{},"（1）分类：无序列表、有序列表、自定义列表",[108,127148,127149],{},"①无序列表：",[2122,127151],{"style":127038,"src":127152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[108,127154,127155],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[108,127157,127158,127161,127162,127165,127166,127168],{},[31,127159,127160],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[31,127163,127164],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[31,127167,127160],{},"中输入其他标签或文字是不对的",[108,127170,127171,127173],{},[31,127172,127164],{},"之间相当于一个容器，可以容纳所有元素",[108,127175,127176],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[108,127178,127179],{},"在css中去除前边的小圆点采用如下代码:",[24,127181,127183],{"className":196,"code":127182,"language":198,"meta":29,"style":29},"list-style: none;\n",[31,127184,127185],{"__ignoreMap":29},[34,127186,127187,127190],{"class":36,"line":37},[34,127188,127189],{"class":44},"list-style",[34,127191,127192],{"class":40},": none;\n",[108,127194,127195],{},"②有序列表：",[2122,127197],{"style":127038,"src":127198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[108,127200,127201],{},"③自定义列表：",[2122,127203],{"style":127038,"src":127204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2122,127206],{"style":127038,"src":127207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127209,127211],{"id":127210},"_54-表单标签","5.4 表单标签",[108,127213,127214],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[108,127216,127217,127218,127221],{},"（1）表单域：包含单元素的区域，",[31,127219,127220],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2122,127223],{"style":127038,"src":127224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[108,127226,127227],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[108,127229,127230],{},"表单元素提交必须有name属性",[108,127232,127233],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[108,127235,127236],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[108,127238,117,127239,127241],{},[31,127240,658],{},"输入表单元素",[2122,127243],{"style":127038,"src":127244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2122,127246],{"style":127038,"src":127247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[108,127249,127250,127251],{},"单选按钮：",[31,127252,127253],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2122,127255],{"style":127038,"src":127256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[108,127258,127259],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2122,127261],{"style":127038,"src":127262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[108,127264,127265,127267],{},[111,127266,113],{}," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[108,127269,127270],{},"②select下拉表单元素：可以节约页面控件",[2122,127272],{"style":127038,"src":127273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[108,127275,127276,14448,127278,127281,127282,127284,127285,127287],{},[111,127277,830],{},[31,127279,127280],{},"\u003Cselect>","中至少包含一对",[31,127283,103344],{},"；在",[31,127286,103344],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[108,127289,127290,127291,127294],{},"③",[31,127292,127293],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2122,127296],{"style":127038,"src":127297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[108,127299,127300],{},"3行20列",[14,127302,127304,127305,103323],{"id":127303},"_55-lable标签","5.5 ",[31,127306,127307],{},"\u003Clable>",[108,127309,127310,127311,127313,127314,127316],{},"它不是表单标签，但常常与表单标签搭配使用，",[31,127312,127307],{},"标签用于绑定一个表单标签，当点击",[31,127315,127307],{},"标签内的文本",[108,127318,127319],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2122,127321],{"style":127038,"src":127322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2122,127324],{"style":127038,"src":127325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127327,127329],{"id":127328},"_56-实例","5.6 实例",[2122,127331],{"style":127038,"src":127332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[45,127334,127335],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":127337},[127338,127339,127340,127341,127342,127344],{"id":127063,"depth":51,"text":127064},{"id":127120,"depth":51,"text":127121},{"id":127142,"depth":51,"text":127143},{"id":127210,"depth":51,"text":127211},{"id":127303,"depth":51,"text":127343},"5.5 \u003Clable>标签",{"id":127328,"depth":51,"text":127329},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127055,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127351,"title":127352,"body":127353,"description":723,"extension":724,"meta":127901,"navigation":726,"path":127902,"seo":127903,"stem":127904,"__hash__":127905},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127354,"toc":127876},[127355,127358,127362,127365,127368,127372,127375,127378,127381,127384,127387,127390,127393,127397,127400,127404,127407,127410,127413,127417,127420,127423,127426,127432,127435,127438,127441,127444,127447,127450,127453,127486,127490,127493,127496,127499,127503,127506,127509,127512,127515,127518,127522,127525,127528,127531,127535,127538,127542,127545,127549,127552,127557,127561,127564,127568,127571,127574,127577,127580,127607,127610,127614,127617,127620,127625,127628,127631,127635,127638,127643,127646,127649,127652,127656,127659,127662,127665,127669,127672,127675,127678,127682,127686,127689,127729,127732,127736,127743,127746,127750,127753,127798,127802,127805,127808,127811,127839,127843,127846,127873],[10,127356,127352],{"id":127357},"_6-css语法与文本样式",[14,127359,127361],{"id":127360},"_61-css语法规范","6.1 css语法规范",[108,127363,127364],{},"由两部分组成，选择器及一条或多条声明",[2122,127366],{"style":127038,"src":127367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[108,127369,127370],{},[111,127371,830],{},[108,127373,127374],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[108,127376,127377],{},"②属性与属性值以“键值对”的形式出现",[108,127379,127380],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[108,127382,127383],{},"④属性和属性值之间用英文“;”分开",[2122,127385],{"style":127038,"src":127386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2122,127388],{"style":127038,"src":127389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2122,127391],{"style":127038,"src":127392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127394,127396],{"id":127395},"_62-css选择器","6.2 css选择器",[108,127398,127399],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[19,127401,127403],{"id":127402},"_621-标签选择器","6.2.1 标签选择器",[108,127405,127406],{},"①优点：能快速为页面中同类型的标签统一设置样式",[108,127408,127409],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2122,127411],{"style":127038,"src":127412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[19,127414,127416],{"id":127415},"_622-类选择器","6.2.2 类选择器",[108,127418,127419],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[108,127421,127422],{},"②样例",[2122,127424],{"style":127038,"src":127425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[108,127427,127428,127429,127431],{},"③ ",[111,127430,113],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[108,127433,127434],{},"可以理解为给这个标签起了个名字，来表示；",[108,127436,127437],{},"长名称或词组可以使用横线来为选择器命名；",[108,127439,127440],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[108,127442,127443],{},"命名要有意义；",[2122,127445],{"style":127038,"src":127446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[108,127448,127449],{},"类选择器也可以指定特殊的元素p.center{}",[108,127451,127452],{},"p.center和.center都对",[24,127454,127456],{"className":196,"code":127455,"language":198,"meta":29,"style":29},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[31,127457,127458,127463,127472,127482],{"__ignoreMap":29},[34,127459,127460],{"class":36,"line":37},[34,127461,127462],{"class":205},"\u002F* 类选择器指定特殊元素 *\u002F\n",[34,127464,127465,127467,127470],{"class":36,"line":51},[34,127466,108],{"class":44},[34,127468,127469],{"class":149},".center",[34,127471,57],{"class":40},[34,127473,127474,127476,127478,127480],{"class":36,"line":60},[34,127475,71160],{"class":63},[34,127477,67],{"class":40},[34,127479,52239],{"class":63},[34,127481,73],{"class":40},[34,127483,127484],{"class":36,"line":76},[34,127485,241],{"class":40},[19,127487,127489],{"id":127488},"_623-多类名使用","6.2.3 多类名使用",[108,127491,127492],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2122,127494],{"style":127038,"src":127495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[108,127497,127498],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[19,127500,127502],{"id":127501},"_624-id选择器","6.2.4 id选择器",[108,127504,127505],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[108,127507,127508],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2122,127510],{"style":127038,"src":127511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[108,127513,127514],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[108,127516,127517],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[19,127519,127521],{"id":127520},"_625-通配符选择器","6.2.5 通配符选择器",[108,127523,127524],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[108,127526,127527],{},"* {",[108,127529,127530],{},"color=\"red\"}",[19,127532,127534],{"id":127533},"_626-总结","6.2.6 总结",[2122,127536],{"style":127038,"src":127537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127539,127541],{"id":127540},"_63-css字体属性","6.3 css字体属性",[108,127543,127544],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[19,127546,127548],{"id":127547},"_631-字体系列","6.3.1 字体系列",[108,127550,127551],{},"font-family: '宋体';",[108,127553,127554,127556],{},[111,127555,830],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[19,127558,127560],{"id":127559},"_632-字体大小","6.3.2 字体大小",[108,127562,127563],{},"font-size: 20px",[108,127565,127566,114],{},[111,127567,113],{},[108,127569,127570],{},"①px（像素）大小是网页的最常用单位",[108,127572,127573],{},"②谷歌浏览器默认为16px",[108,127575,127576],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[108,127578,127579],{},"④可以给body指定整个页面的大小：会自动引用",[24,127581,127583],{"className":196,"code":127582,"language":198,"meta":29,"style":29},"body {\n  font-size: 16px;\n}\n",[31,127584,127585,127591,127603],{"__ignoreMap":29},[34,127586,127587,127589],{"class":36,"line":37},[34,127588,52446],{"class":44},[34,127590,57],{"class":40},[34,127592,127593,127595,127597,127599,127601],{"class":36,"line":51},[34,127594,228],{"class":63},[34,127596,67],{"class":40},[34,127598,1396],{"class":63},[34,127600,88],{"class":87},[34,127602,73],{"class":40},[34,127604,127605],{"class":36,"line":60},[34,127606,241],{"class":40},[108,127608,127609],{},"⑤标题标签比较特殊，需要单独指定大小",[19,127611,127613],{"id":127612},"_633-字体粗细","6.3.3 字体粗细",[108,127615,127616],{},"font-weight: bold;",[108,127618,127619],{},"font-weight: 100；",[108,127621,127622,127624],{},[111,127623,830],{}," ①粗体文字变细：尽量别用normal，多用数字",[108,127626,127627],{},"font-weight= 400;",[108,127629,127630],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[19,127632,127634],{"id":127633},"_634-文字样式","6.3.4 文字样式",[108,127636,127637],{},"font-style: normal；",[108,127639,127640,114],{},[111,127641,127642],{},"属性值",[108,127644,127645],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[108,127647,127648],{},"②italic：浏览器会显示斜体的字体样式",[2122,127650],{"style":127038,"src":127651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[19,127653,127655],{"id":127654},"_635-字体符合属性","6.3.5 字体符合属性",[2122,127657],{"style":127038,"src":127658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2122,127660],{"style":127038,"src":127661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[108,127663,127664],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[108,127666,127667,114],{},[111,127668,113],{},[108,127670,127671],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[108,127673,127674],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[108,127676,127677],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127679,127681],{"id":127680},"_64-css-test文本属性","6.4 css test文本属性",[19,127683,127685],{"id":127684},"_641-文本颜色","6.4.1 文本颜色",[108,127687,127688],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[24,127690,127692],{"className":196,"code":127691,"language":198,"meta":29,"style":29},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[31,127693,127694,127699,127705,127715,127720,127725],{"__ignoreMap":29},[34,127695,127696],{"class":36,"line":37},[34,127697,127698],{"class":205},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[34,127700,127701,127703],{"class":36,"line":51},[34,127702,108],{"class":44},[34,127704,57],{"class":40},[34,127706,127707,127709,127711,127713],{"class":36,"line":60},[34,127708,217],{"class":63},[34,127710,67],{"class":40},[34,127712,58064],{"class":63},[34,127714,73],{"class":40},[34,127716,127717],{"class":36,"line":76},[34,127718,127719],{"class":205},"  \u002F* color: #ff0000; *\u002F\n",[34,127721,127722],{"class":36,"line":93},[34,127723,127724],{"class":205},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[34,127726,127727],{"class":36,"line":99},[34,127728,241],{"class":40},[2122,127730],{"style":127038,"src":127731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[19,127733,127735],{"id":127734},"_642-对齐文本","6.4.2 对齐文本",[108,127737,127738,127739,127742],{},"text-align属于用于设置元素内文本内容的 ",[111,127740,127741],{},"水平对齐"," 方式",[108,127744,127745],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[19,127747,127749],{"id":127748},"_643-装饰文本","6.4.3 装饰文本",[108,127751,127752],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[24,127754,127756],{"className":196,"code":127755,"language":198,"meta":29,"style":29},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[31,127757,127758,127764,127774,127778,127784,127794],{"__ignoreMap":29},[34,127759,127760,127762],{"class":36,"line":37},[34,127761,520],{"class":44},[34,127763,57],{"class":40},[34,127765,127766,127768,127770,127772],{"class":36,"line":51},[34,127767,541],{"class":63},[34,127769,67],{"class":40},[34,127771,546],{"class":63},[34,127773,73],{"class":40},[34,127775,127776],{"class":36,"line":60},[34,127777,241],{"class":40},[34,127779,127780,127782],{"class":36,"line":76},[34,127781,108],{"class":44},[34,127783,57],{"class":40},[34,127785,127786,127788,127790,127792],{"class":36,"line":93},[34,127787,541],{"class":63},[34,127789,67],{"class":40},[34,127791,608],{"class":63},[34,127793,73],{"class":40},[34,127795,127796],{"class":36,"line":99},[34,127797,241],{"class":40},[19,127799,127801],{"id":127800},"_644-文本缩进","6.4.4 文本缩进",[108,127803,127804],{},"实现文本的第一行首行缩进自己指定的距离",[108,127806,127807],{},"20px往右边走；-20px往左边走",[108,127809,127810],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[24,127812,127814],{"className":196,"code":127813,"language":198,"meta":29,"style":29},"p {\n  text-indent: 2em;\n}\n",[31,127815,127816,127822,127835],{"__ignoreMap":29},[34,127817,127818,127820],{"class":36,"line":37},[34,127819,108],{"class":44},[34,127821,57],{"class":40},[34,127823,127824,127827,127829,127831,127833],{"class":36,"line":51},[34,127825,127826],{"class":63},"  text-indent",[34,127828,67],{"class":40},[34,127830,875],{"class":63},[34,127832,24205],{"class":87},[34,127834,73],{"class":40},[34,127836,127837],{"class":36,"line":60},[34,127838,241],{"class":40},[19,127840,127842],{"id":127841},"_645-行间距","6.4.5 行间距",[108,127844,127845],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[24,127847,127849],{"className":196,"code":127848,"language":198,"meta":29,"style":29},"p {\n  line-height: 1.6;\n}\n",[31,127850,127851,127857,127869],{"__ignoreMap":29},[34,127852,127853,127855],{"class":36,"line":37},[34,127854,108],{"class":44},[34,127856,57],{"class":40},[34,127858,127859,127862,127864,127867],{"class":36,"line":51},[34,127860,127861],{"class":63},"  line-height",[34,127863,67],{"class":40},[34,127865,127866],{"class":63},"1.6",[34,127868,73],{"class":40},[34,127870,127871],{"class":36,"line":60},[34,127872,241],{"class":40},[45,127874,127875],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":127877},[127878,127879,127887,127894],{"id":127360,"depth":51,"text":127361},{"id":127395,"depth":51,"text":127396,"children":127880},[127881,127882,127883,127884,127885,127886],{"id":127402,"depth":60,"text":127403},{"id":127415,"depth":60,"text":127416},{"id":127488,"depth":60,"text":127489},{"id":127501,"depth":60,"text":127502},{"id":127520,"depth":60,"text":127521},{"id":127533,"depth":60,"text":127534},{"id":127540,"depth":51,"text":127541,"children":127888},[127889,127890,127891,127892,127893],{"id":127547,"depth":60,"text":127548},{"id":127559,"depth":60,"text":127560},{"id":127612,"depth":60,"text":127613},{"id":127633,"depth":60,"text":127634},{"id":127654,"depth":60,"text":127655},{"id":127680,"depth":51,"text":127681,"children":127895},[127896,127897,127898,127899,127900],{"id":127684,"depth":60,"text":127685},{"id":127734,"depth":60,"text":127735},{"id":127748,"depth":60,"text":127749},{"id":127800,"depth":60,"text":127801},{"id":127841,"depth":60,"text":127842},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127352,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":4,"title":5,"body":127907,"description":723,"extension":724,"meta":128437,"navigation":726,"path":727,"seo":128438,"stem":729,"__hash__":730},{"type":7,"value":127908,"toc":128419},[127909,127911,127913,127915,127967,127971,127977,127979,127981,127983,128005,128009,128011,128013,128015,128017,128019,128021,128023,128025,128065,128067,128091,128095,128097,128099,128101,128105,128107,128109,128111,128113,128115,128117,128153,128155,128157,128159,128161,128163,128189,128191,128195,128197,128199,128201,128203,128205,128209,128211,128213,128215,128217,128219,128223,128225,128227,128229,128231,128235,128239,128245,128247,128249,128251,128253,128255,128371,128375,128381,128417],[10,127910,5],{"id":12},[14,127912,17],{"id":16},[19,127914,22],{"id":21},[24,127916,127917],{"className":26,"code":27,"language":28,"meta":29,"style":29},[31,127918,127919,127927,127933,127943,127955,127959],{"__ignoreMap":29},[34,127920,127921,127923,127925],{"class":36,"line":37},[34,127922,41],{"class":40},[34,127924,45],{"class":44},[34,127926,48],{"class":40},[34,127928,127929,127931],{"class":36,"line":51},[34,127930,54],{"class":44},[34,127932,57],{"class":40},[34,127934,127935,127937,127939,127941],{"class":36,"line":60},[34,127936,64],{"class":63},[34,127938,67],{"class":40},[34,127940,70],{"class":63},[34,127942,73],{"class":40},[34,127944,127945,127947,127949,127951,127953],{"class":36,"line":76},[34,127946,79],{"class":63},[34,127948,67],{"class":40},[34,127950,84],{"class":63},[34,127952,88],{"class":87},[34,127954,73],{"class":40},[34,127956,127957],{"class":36,"line":93},[34,127958,96],{"class":40},[34,127960,127961,127963,127965],{"class":36,"line":99},[34,127962,102],{"class":40},[34,127964,45],{"class":44},[34,127966,48],{"class":40},[108,127968,127969,114],{},[111,127970,113],{},[108,127972,117,127973,121,127975,125],{},[31,127974,120],{},[31,127976,124],{},[108,127978,128],{},[108,127980,131],{},[19,127982,135],{"id":134},[24,127984,127985],{"className":26,"code":138,"language":28,"meta":29,"style":29},[31,127986,127987],{"__ignoreMap":29},[34,127988,127989,127991,127993,127995,127997,127999,128001,128003],{"class":36,"line":37},[34,127990,41],{"class":40},[34,127992,108],{"class":44},[34,127994,150],{"class":149},[34,127996,153],{"class":40},[34,127998,157],{"class":156},[34,128000,160],{"class":40},[34,128002,108],{"class":44},[34,128004,48],{"class":40},[108,128006,128007,114],{},[111,128008,113],{},[108,128010,171],{},[108,128012,174],{},[108,128014,177],{},[108,128016,180],{},[108,128018,183],{},[19,128020,187],{"id":186},[108,128022,190],{},[108,128024,193],{},[24,128026,128027],{"className":196,"code":197,"language":198,"meta":29,"style":29},[31,128028,128029,128033,128039,128049,128061],{"__ignoreMap":29},[34,128030,128031],{"class":36,"line":37},[34,128032,206],{"class":205},[34,128034,128035,128037],{"class":36,"line":51},[34,128036,10],{"class":44},[34,128038,57],{"class":40},[34,128040,128041,128043,128045,128047],{"class":36,"line":60},[34,128042,217],{"class":63},[34,128044,67],{"class":40},[34,128046,70],{"class":63},[34,128048,73],{"class":40},[34,128050,128051,128053,128055,128057,128059],{"class":36,"line":76},[34,128052,228],{"class":63},[34,128054,67],{"class":40},[34,128056,84],{"class":63},[34,128058,88],{"class":87},[34,128060,73],{"class":40},[34,128062,128063],{"class":36,"line":93},[34,128064,241],{"class":40},[108,128066,244],{},[24,128068,128069],{"className":26,"code":247,"language":28,"meta":29,"style":29},[31,128070,128071],{"__ignoreMap":29},[34,128072,128073,128075,128077,128079,128081,128083,128085,128087,128089],{"class":36,"line":37},[34,128074,41],{"class":40},[34,128076,256],{"class":44},[34,128078,259],{"class":149},[34,128080,153],{"class":40},[34,128082,264],{"class":156},[34,128084,267],{"class":149},[34,128086,153],{"class":40},[34,128088,272],{"class":156},[34,128090,48],{"class":40},[108,128092,128093,280],{},[31,128094,279],{},[108,128096,283],{},[14,128098,287],{"id":286},[19,128100,291],{"id":290},[108,128102,294,128103],{},[31,128104,297],{},[108,128106,300],{},[108,128108,303],{},[108,128110,306],{},[108,128112,309],{},[108,128114,312],{},[108,128116,315],{},[24,128118,128119],{"className":26,"code":318,"language":28,"meta":29,"style":29},[31,128120,128121,128125,128129,128133,128137,128141,128145,128149],{"__ignoreMap":29},[34,128122,128123],{"class":36,"line":37},[34,128124,325],{"class":205},[34,128126,128127],{"class":36,"line":51},[34,128128,330],{"class":205},[34,128130,128131],{"class":36,"line":60},[34,128132,335],{"class":205},[34,128134,128135],{"class":36,"line":76},[34,128136,340],{"class":205},[34,128138,128139],{"class":36,"line":93},[34,128140,345],{"class":205},[34,128142,128143],{"class":36,"line":99},[34,128144,350],{"class":205},[34,128146,128147],{"class":36,"line":353},[34,128148,356],{"class":205},[34,128150,128151],{"class":36,"line":359},[34,128152,362],{"class":205},[19,128154,366],{"id":365},[108,128156,369],{},[108,128158,372],{},[14,128160,376],{"id":375},[19,128162,380],{"id":379},[24,128164,128165],{"className":196,"code":383,"language":198,"meta":29,"style":29},[31,128166,128167,128175,128185],{"__ignoreMap":29},[34,128168,128169,128171,128173],{"class":36,"line":37},[34,128170,390],{"class":149},[34,128172,393],{"class":149},[34,128174,57],{"class":40},[34,128176,128177,128179,128181,128183],{"class":36,"line":51},[34,128178,217],{"class":63},[34,128180,67],{"class":40},[34,128182,70],{"class":63},[34,128184,73],{"class":40},[34,128186,128187],{"class":36,"line":60},[34,128188,241],{"class":40},[108,128190,412],{},[108,128192,128193],{},[111,128194,417],{},[108,128196,420],{},[108,128198,423],{},[108,128200,426],{},[108,128202,429],{},[19,128204,433],{"id":432},[108,128206,128207],{},[111,128208,417],{},[108,128210,440],{},[108,128212,423],{},[108,128214,445],{},[19,128216,449],{"id":448},[108,128218,452],{},[108,128220,128221],{},[111,128222,417],{},[108,128224,459],{},[108,128226,462],{},[108,128228,465],{},[19,128230,469],{"id":468},[108,128232,128233],{},[111,128234,417],{},[108,128236,476,128237,479],{},[256,128238],{},[108,128240,482,128241,486,128243,490],{},[484,128242],{},[488,128244],{},[108,128246,493],{},[108,128248,496],{},[108,128250,499],{},[108,128252,502],{},[108,128254,505],{},[24,128256,128257],{"className":196,"code":508,"language":198,"meta":29,"style":29},[31,128258,128259,128263,128271,128281,128291,128295,128303,128313,128317,128325,128335,128345,128349,128357,128367],{"__ignoreMap":29},[34,128260,128261],{"class":36,"line":37},[34,128262,515],{"class":205},[34,128264,128265,128267,128269],{"class":36,"line":51},[34,128266,520],{"class":44},[34,128268,523],{"class":149},[34,128270,57],{"class":40},[34,128272,128273,128275,128277,128279],{"class":36,"line":60},[34,128274,217],{"class":63},[34,128276,67],{"class":40},[34,128278,534],{"class":63},[34,128280,73],{"class":40},[34,128282,128283,128285,128287,128289],{"class":36,"line":76},[34,128284,541],{"class":63},[34,128286,67],{"class":40},[34,128288,546],{"class":63},[34,128290,73],{"class":40},[34,128292,128293],{"class":36,"line":93},[34,128294,241],{"class":40},[34,128296,128297,128299,128301],{"class":36,"line":99},[34,128298,520],{"class":44},[34,128300,559],{"class":149},[34,128302,57],{"class":40},[34,128304,128305,128307,128309,128311],{"class":36,"line":353},[34,128306,217],{"class":63},[34,128308,67],{"class":40},[34,128310,570],{"class":63},[34,128312,73],{"class":40},[34,128314,128315],{"class":36,"line":359},[34,128316,241],{"class":40},[34,128318,128319,128321,128323],{"class":36,"line":579},[34,128320,520],{"class":44},[34,128322,584],{"class":149},[34,128324,57],{"class":40},[34,128326,128327,128329,128331,128333],{"class":36,"line":589},[34,128328,217],{"class":63},[34,128330,67],{"class":40},[34,128332,596],{"class":63},[34,128334,73],{"class":40},[34,128336,128337,128339,128341,128343],{"class":36,"line":601},[34,128338,541],{"class":63},[34,128340,67],{"class":40},[34,128342,608],{"class":63},[34,128344,73],{"class":40},[34,128346,128347],{"class":36,"line":613},[34,128348,241],{"class":40},[34,128350,128351,128353,128355],{"class":36,"line":618},[34,128352,520],{"class":44},[34,128354,623],{"class":149},[34,128356,57],{"class":40},[34,128358,128359,128361,128363,128365],{"class":36,"line":628},[34,128360,217],{"class":63},[34,128362,67],{"class":40},[34,128364,635],{"class":63},[34,128366,73],{"class":40},[34,128368,128369],{"class":36,"line":640},[34,128370,241],{"class":40},[19,128372,646,128373,650],{"id":645},[648,128374],{},[108,128376,128377,655,128379,659],{},[648,128378],{},[31,128380,658],{},[24,128382,128383],{"className":196,"code":662,"language":198,"meta":29,"style":29},[31,128384,128385,128393,128403,128413],{"__ignoreMap":29},[34,128386,128387,128389,128391],{"class":36,"line":37},[34,128388,669],{"class":44},[34,128390,672],{"class":149},[34,128392,57],{"class":40},[34,128394,128395,128397,128399,128401],{"class":36,"line":51},[34,128396,679],{"class":63},[34,128398,67],{"class":40},[34,128400,596],{"class":63},[34,128402,73],{"class":40},[34,128404,128405,128407,128409,128411],{"class":36,"line":60},[34,128406,690],{"class":63},[34,128408,67],{"class":40},[34,128410,546],{"class":63},[34,128412,73],{"class":40},[34,128414,128415],{"class":36,"line":76},[34,128416,241],{"class":40},[45,128418,703],{},{"title":29,"searchDepth":51,"depth":51,"links":128420},[128421,128426,128430],{"id":16,"depth":51,"text":17,"children":128422},[128423,128424,128425],{"id":21,"depth":60,"text":22},{"id":134,"depth":60,"text":135},{"id":186,"depth":60,"text":187},{"id":286,"depth":51,"text":287,"children":128427},[128428,128429],{"id":290,"depth":60,"text":291},{"id":365,"depth":60,"text":366},{"id":375,"depth":51,"text":376,"children":128431},[128432,128433,128434,128435,128436],{"id":379,"depth":60,"text":380},{"id":432,"depth":60,"text":433},{"id":448,"depth":60,"text":449},{"id":468,"depth":60,"text":469},{"id":645,"depth":60,"text":722},{},{"title":5,"description":723},{"id":128440,"title":128441,"body":128442,"description":723,"extension":724,"meta":130365,"navigation":726,"path":130366,"seo":130367,"stem":130368,"__hash__":130369},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128443,"toc":130339},[128444,128447,128451,128460,128464,128490,128495,128498,128501,128504,128507,128511,128514,128524,128532,128536,128571,128576,128579,128582,128585,128588,128592,128595,128604,128608,128621,128626,128629,128632,128635,128639,128642,128646,128649,128704,128707,128738,128741,128795,128799,128802,128968,129091,129094,129097,129100,129103,129107,129110,129114,129117,129120,129124,129127,129158,129185,129213,129216,129220,129246,129289,129293,129387,129390,129417,129420,129423,129426,129429,129432,129435,129438,129441,129444,129448,129505,129532,129536,129584,129588,129629,129631,129634,129637,129640,129643,129647,129739,129742,129745,129748,129752,129875,130076,130080,130084,130087,130090,130093,130097,130100,130103,130128,130131,130134,130137,130140,130143,130147,130155,130217,130220,130278,130281,130284,130287,130290,130293,130296,130299,130336],[10,128445,128441],{"id":128446},"_8-css显示模式与背景特性",[14,128448,128450],{"id":128449},"_81-css元素显示模式","8.1 css元素显示模式",[108,128452,128453,128454,128456,128457,128459],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[31,128455,126793],{},"自己占一行，比如一行可以放多个",[31,128458,126796],{},"，HTML 元素一般分为块元素和行内元素两种类型",[19,128461,128463],{"id":128462},"_811-块元素","8.1.1 块元素",[108,128465,128466,128467,128469,128470,1008,128473,1008,128475,1008,128477,1008,128480,1008,128483,128486,128487,128489],{},"常见的块元素有",[31,128468,126697],{},"~",[31,128471,128472],{},"\u003Ch6>",[31,128474,126723],{},[31,128476,126793],{},[31,128478,128479],{},"\u003Cul>",[31,128481,128482],{},"\u003Col>",[31,128484,128485],{},"\u003Cli>","等，其中 ",[31,128488,126793],{}," 标签是最典型的块元素",[108,128491,128492],{},[111,128493,128494],{},"块级元素的特点：",[108,128496,128497],{},"① 比较霸道，自己独占一行。",[108,128499,128500],{},"② 高度，宽度、外边距以及内边距都可以控制。",[108,128502,128503],{},"③ 宽度默认是容器（父级宽度）的100%。",[108,128505,128506],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[108,128508,128509],{},[111,128510,830],{},[108,128512,128513],{},"①文字类的元素内不能使用块级元素",[108,128515,77879,128516,128518,128519,128521,128522],{},[31,128517,126723],{}," 标签主要用于存放文字，因此 ",[31,128520,126723],{}," 里面不能放块级元素，特别是不能放",[31,128523,126793],{},[108,128525,128526,128527,128469,128529,128531],{},"⑥同理， ",[31,128528,126697],{},[31,128530,128472],{},"等都是文字类块级标签，里面也不能放其他块级元素",[19,128533,128535],{"id":128534},"_812-行内元素","8.1.2 行内元素",[108,128537,128538,128539,1008,128541,1008,128544,1008,128547,1008,128550,1008,128553,1008,128556,1008,128559,1008,128562,1008,128565,128567,128568,128570],{},"常见的行内元素有 ",[31,128540,126955],{},[31,128542,128543],{},"\u003Cstrong>",[31,128545,128546],{},"\u003Cb>",[31,128548,128549],{},"\u003Cem>",[31,128551,128552],{},"\u003Ci>",[31,128554,128555],{},"\u003Cdel>",[31,128557,128558],{},"\u003Cs>",[31,128560,128561],{},"\u003Cins>",[31,128563,128564],{},"\u003Cu>",[31,128566,126796],{}," 等，其中 ",[31,128569,126796],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[108,128572,128573],{},[111,128574,128575],{},"特点：",[108,128577,128578],{},"① 相邻行内元素在一行上，一行可以显示多个。",[108,128580,128581],{},"② 高、宽直接设置是无效的。",[108,128583,128584],{},"③ 默认宽度就是它本身内容的宽度。",[108,128586,128587],{},"④ 行内元素只能容纳文本或其他行内元素。",[108,128589,128590],{},[111,128591,830],{},[108,128593,128594],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[108,128596,128597,128598,128600,128601,128603],{},"②特殊情况链接 ",[31,128599,126955],{}," 里面可以放块级元素，但是给 ",[31,128602,126955],{}," 转换一下块级模式最安全",[19,128605,128607],{"id":128606},"_813-行内块元素","8.1.3 行内块元素",[108,128609,128610,128611,1008,128614,1008,128617,128620],{},"在行内元素中有几个特殊的标签 —— ",[31,128612,128613],{},"\u003Cimg \u002F>",[31,128615,128616],{},"\u003Cinput \u002F>",[31,128618,128619],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[108,128622,128623],{},[111,128624,128625],{},"行内块元素的特点：",[108,128627,128628],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[108,128630,128631],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[108,128633,128634],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[19,128636,128638],{"id":128637},"_814-总结","8.1.4 总结",[2122,128640],{"style":127038,"src":128641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[19,128643,128645],{"id":128644},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[108,128647,128648],{},"①转换为块元素：display:block;",[24,128650,128652],{"className":196,"code":128651,"language":198,"meta":29,"style":29},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[31,128653,128654,128659,128665,128676,128688,128700],{"__ignoreMap":29},[34,128655,128656],{"class":36,"line":37},[34,128657,128658],{"class":205},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[34,128660,128661,128663],{"class":36,"line":51},[34,128662,520],{"class":44},[34,128664,57],{"class":40},[34,128666,128667,128670,128672,128674],{"class":36,"line":60},[34,128668,128669],{"class":63},"  display",[34,128671,67],{"class":40},[34,128673,61512],{"class":63},[34,128675,73],{"class":40},[34,128677,128678,128680,128682,128684,128686],{"class":36,"line":76},[34,128679,71202],{"class":63},[34,128681,67],{"class":40},[34,128683,1106],{"class":63},[34,128685,88],{"class":87},[34,128687,73],{"class":40},[34,128689,128690,128692,128694,128696,128698],{"class":36,"line":93},[34,128691,71421],{"class":63},[34,128693,67],{"class":40},[34,128695,1196],{"class":63},[34,128697,88],{"class":87},[34,128699,73],{"class":40},[34,128701,128702],{"class":36,"line":99},[34,128703,241],{"class":40},[108,128705,128706],{},"②转换为行内元素：display:inline;",[24,128708,128710],{"className":196,"code":128709,"language":198,"meta":29,"style":29},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[31,128711,128712,128717,128723,128734],{"__ignoreMap":29},[34,128713,128714],{"class":36,"line":37},[34,128715,128716],{"class":205},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[34,128718,128719,128721],{"class":36,"line":51},[34,128720,52258],{"class":44},[34,128722,57],{"class":40},[34,128724,128725,128727,128729,128732],{"class":36,"line":60},[34,128726,128669],{"class":63},[34,128728,67],{"class":40},[34,128730,128731],{"class":63},"inline",[34,128733,73],{"class":40},[34,128735,128736],{"class":36,"line":76},[34,128737,241],{"class":40},[108,128739,128740],{},"③转换为行内块：display:inline-block;",[24,128742,128744],{"className":196,"code":128743,"language":198,"meta":29,"style":29},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[31,128745,128746,128751,128757,128767,128779,128791],{"__ignoreMap":29},[34,128747,128748],{"class":36,"line":37},[34,128749,128750],{"class":205},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[34,128752,128753,128755],{"class":36,"line":51},[34,128754,34],{"class":44},[34,128756,57],{"class":40},[34,128758,128759,128761,128763,128765],{"class":36,"line":60},[34,128760,128669],{"class":63},[34,128762,67],{"class":40},[34,128764,73014],{"class":63},[34,128766,73],{"class":40},[34,128768,128769,128771,128773,128775,128777],{"class":36,"line":76},[34,128770,71202],{"class":63},[34,128772,67],{"class":40},[34,128774,1407],{"class":63},[34,128776,88],{"class":87},[34,128778,73],{"class":40},[34,128780,128781,128783,128785,128787,128789],{"class":36,"line":93},[34,128782,71421],{"class":63},[34,128784,67],{"class":40},[34,128786,1744],{"class":63},[34,128788,88],{"class":87},[34,128790,73],{"class":40},[34,128792,128793],{"class":36,"line":99},[34,128794,241],{"class":40},[19,128796,128798],{"id":128797},"_816-小米侧边栏","8.1.6 小米侧边栏",[2122,128800],{"style":127038,"src":128801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[24,128803,128805],{"className":26,"code":128804,"language":28,"meta":29,"style":29},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[31,128806,128807,128812,128827,128846,128865,128884,128903,128922,128941,128960],{"__ignoreMap":29},[34,128808,128809],{"class":36,"line":37},[34,128810,128811],{"class":205},"\u003C!-- 小米侧边栏案例 -->\n",[34,128813,128814,128816,128818,128820,128822,128825],{"class":36,"line":51},[34,128815,41],{"class":40},[34,128817,52258],{"class":44},[34,128819,54132],{"class":149},[34,128821,153],{"class":40},[34,128823,128824],{"class":156},"\"sidebar\"",[34,128826,48],{"class":40},[34,128828,128829,128831,128833,128835,128837,128839,128842,128844],{"class":36,"line":60},[34,128830,52790],{"class":40},[34,128832,520],{"class":44},[34,128834,267],{"class":149},[34,128836,153],{"class":40},[34,128838,61703],{"class":156},[34,128840,128841],{"class":40},">手机 电话卡\u003C\u002F",[34,128843,520],{"class":44},[34,128845,48],{"class":40},[34,128847,128848,128850,128852,128854,128856,128858,128861,128863],{"class":36,"line":76},[34,128849,52790],{"class":40},[34,128851,520],{"class":44},[34,128853,267],{"class":149},[34,128855,153],{"class":40},[34,128857,61703],{"class":156},[34,128859,128860],{"class":40},">电视 盒子\u003C\u002F",[34,128862,520],{"class":44},[34,128864,48],{"class":40},[34,128866,128867,128869,128871,128873,128875,128877,128880,128882],{"class":36,"line":93},[34,128868,52790],{"class":40},[34,128870,520],{"class":44},[34,128872,267],{"class":149},[34,128874,153],{"class":40},[34,128876,61703],{"class":156},[34,128878,128879],{"class":40},">笔记本 平板\u003C\u002F",[34,128881,520],{"class":44},[34,128883,48],{"class":40},[34,128885,128886,128888,128890,128892,128894,128896,128899,128901],{"class":36,"line":99},[34,128887,52790],{"class":40},[34,128889,520],{"class":44},[34,128891,267],{"class":149},[34,128893,153],{"class":40},[34,128895,61703],{"class":156},[34,128897,128898],{"class":40},">出行 穿戴\u003C\u002F",[34,128900,520],{"class":44},[34,128902,48],{"class":40},[34,128904,128905,128907,128909,128911,128913,128915,128918,128920],{"class":36,"line":353},[34,128906,52790],{"class":40},[34,128908,520],{"class":44},[34,128910,267],{"class":149},[34,128912,153],{"class":40},[34,128914,61703],{"class":156},[34,128916,128917],{"class":40},">智能 路由器\u003C\u002F",[34,128919,520],{"class":44},[34,128921,48],{"class":40},[34,128923,128924,128926,128928,128930,128932,128934,128937,128939],{"class":36,"line":359},[34,128925,52790],{"class":40},[34,128927,520],{"class":44},[34,128929,267],{"class":149},[34,128931,153],{"class":40},[34,128933,61703],{"class":156},[34,128935,128936],{"class":40},">健康 儿童\u003C\u002F",[34,128938,520],{"class":44},[34,128940,48],{"class":40},[34,128942,128943,128945,128947,128949,128951,128953,128956,128958],{"class":36,"line":579},[34,128944,52790],{"class":40},[34,128946,520],{"class":44},[34,128948,267],{"class":149},[34,128950,153],{"class":40},[34,128952,61703],{"class":156},[34,128954,128955],{"class":40},">耳机 音响\u003C\u002F",[34,128957,520],{"class":44},[34,128959,48],{"class":40},[34,128961,128962,128964,128966],{"class":36,"line":589},[34,128963,102],{"class":40},[34,128965,52258],{"class":44},[34,128967,48],{"class":40},[24,128969,128971],{"className":196,"code":128970,"language":198,"meta":29,"style":29},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[31,128972,128973,128982,128992,129005,129017,129029,129041,129051,129062,129066,129076,129087],{"__ignoreMap":29},[34,128974,128975,128978,128980],{"class":36,"line":37},[34,128976,128977],{"class":149},".sidebar",[34,128979,2058],{"class":44},[34,128981,57],{"class":40},[34,128983,128984,128986,128988,128990],{"class":36,"line":51},[34,128985,128669],{"class":63},[34,128987,67],{"class":40},[34,128989,61512],{"class":63},[34,128991,73],{"class":40},[34,128993,128994,128996,128998,129001,129003],{"class":36,"line":60},[34,128995,71202],{"class":63},[34,128997,67],{"class":40},[34,128999,129000],{"class":63},"234",[34,129002,88],{"class":87},[34,129004,73],{"class":40},[34,129006,129007,129009,129011,129013,129015],{"class":36,"line":76},[34,129008,71421],{"class":63},[34,129010,67],{"class":40},[34,129012,1247],{"class":63},[34,129014,88],{"class":87},[34,129016,73],{"class":40},[34,129018,129019,129021,129023,129025,129027],{"class":36,"line":93},[34,129020,127861],{"class":63},[34,129022,67],{"class":40},[34,129024,1247],{"class":63},[34,129026,88],{"class":87},[34,129028,73],{"class":40},[34,129030,129031,129033,129035,129037,129039],{"class":36,"line":99},[34,129032,71455],{"class":63},[34,129034,67],{"class":40},[34,129036,1744],{"class":63},[34,129038,88],{"class":87},[34,129040,73],{"class":40},[34,129042,129043,129045,129047,129049],{"class":36,"line":353},[34,129044,217],{"class":63},[34,129046,67],{"class":40},[34,129048,61485],{"class":63},[34,129050,73],{"class":40},[34,129052,129053,129055,129057,129060],{"class":36,"line":359},[34,129054,71510],{"class":63},[34,129056,67],{"class":40},[34,129058,129059],{"class":63},"#55585a",[34,129061,73],{"class":40},[34,129063,129064],{"class":36,"line":579},[34,129065,241],{"class":40},[34,129067,129068,129070,129072,129074],{"class":36,"line":589},[34,129069,128977],{"class":149},[34,129071,2058],{"class":44},[34,129073,584],{"class":149},[34,129075,57],{"class":40},[34,129077,129078,129080,129082,129085],{"class":36,"line":601},[34,129079,71510],{"class":63},[34,129081,67],{"class":40},[34,129083,129084],{"class":63},"#ff6700",[34,129086,73],{"class":40},[34,129088,129089],{"class":36,"line":613},[34,129090,241],{"class":40},[2122,129092],{"style":127038,"src":129093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[108,129095,129096],{},"行高=盒子高度：实现文字的垂直居中",[108,129098,129099],{},"原理讲解：",[2122,129101],{"style":127038,"src":129102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129104,129106],{"id":129105},"_82-css背景","8.2 css背景",[108,129108,129109],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[19,129111,129113],{"id":129112},"_821-背景颜色","8.2.1 背景颜色",[108,129115,129116],{},"background-color:颜色值;",[108,129118,129119],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[19,129121,129123],{"id":129122},"_822-背景图片","8.2.2 背景图片",[108,129125,129126],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[24,129128,129130],{"className":196,"code":129129,"language":198,"meta":29,"style":29},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[31,129131,129132,129138,129154],{"__ignoreMap":29},[34,129133,129134,129136],{"class":36,"line":37},[34,129135,52258],{"class":44},[34,129137,57],{"class":40},[34,129139,129140,129143,129145,129147,129149,129152],{"class":36,"line":51},[34,129141,129142],{"class":63},"  background-image",[34,129144,67],{"class":40},[34,129146,62367],{"class":63},[34,129148,801],{"class":40},[34,129150,129151],{"class":5869},"images\u002Fbg.png",[34,129153,3372],{"class":40},[34,129155,129156],{"class":36,"line":60},[34,129157,241],{"class":40},[934,129159,129160,129169],{},[937,129161,129162],{},[940,129163,129164,129167],{},[943,129165,129166],{"align":24388},"参数值",[943,129168,103326],{"align":24388},[980,129170,129171,129178],{},[940,129172,129173,129175],{},[985,129174,546],{"align":24388},[985,129176,129177],{"align":24388},"无背景图（默认的）",[940,129179,129180,129182],{},[985,129181,62367],{"align":24388},[985,129183,129184],{"align":24388},"使用绝对或相对地址指定背景图像",[24,129186,129187],{"className":196,"code":129129,"language":198,"meta":29,"style":29},[31,129188,129189,129195,129209],{"__ignoreMap":29},[34,129190,129191,129193],{"class":36,"line":37},[34,129192,52258],{"class":44},[34,129194,57],{"class":40},[34,129196,129197,129199,129201,129203,129205,129207],{"class":36,"line":51},[34,129198,129142],{"class":63},[34,129200,67],{"class":40},[34,129202,62367],{"class":63},[34,129204,801],{"class":40},[34,129206,129151],{"class":5869},[34,129208,3372],{"class":40},[34,129210,129211],{"class":36,"line":60},[34,129212,241],{"class":40},[108,129214,129215],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[19,129217,129219],{"id":129218},"_823-背景平铺","8.2.3 背景平铺",[24,129221,129223],{"className":196,"code":129222,"language":198,"meta":29,"style":29},"div {\n  background-repeat: no-repeat;\n}\n",[31,129224,129225,129231,129242],{"__ignoreMap":29},[34,129226,129227,129229],{"class":36,"line":37},[34,129228,52258],{"class":44},[34,129230,57],{"class":40},[34,129232,129233,129236,129238,129240],{"class":36,"line":51},[34,129234,129235],{"class":63},"  background-repeat",[34,129237,67],{"class":40},[34,129239,62377],{"class":63},[34,129241,73],{"class":40},[34,129243,129244],{"class":36,"line":60},[34,129245,241],{"class":40},[934,129247,129248,129256],{},[937,129249,129250],{},[940,129251,129252,129254],{},[943,129253,129166],{"align":24388},[943,129255,103326],{"align":24388},[980,129257,129258,129266,129273,129281],{},[940,129259,129260,129263],{},[985,129261,129262],{"align":24388},"repeat",[985,129264,129265],{"align":24388},"背景图像在纵向和横向上平铺（默认的）",[940,129267,129268,129270],{},[985,129269,62377],{"align":24388},[985,129271,129272],{"align":24388},"背景图像不平铺",[940,129274,129275,129278],{},[985,129276,129277],{"align":24388},"repeat-x",[985,129279,129280],{"align":24388},"背景图像在横向上平铺",[940,129282,129283,129286],{},[985,129284,129285],{"align":24388},"repeat-y",[985,129287,129288],{"align":24388},"背景图像在纵向平铺",[19,129290,129292],{"id":129291},"_824-背景图片位置","8.2.4 背景图片位置",[24,129294,129296],{"className":196,"code":129295,"language":198,"meta":29,"style":29},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[31,129297,129298,129303,129309,129323,129327,129332,129338,129354,129358,129363,129369,129383],{"__ignoreMap":29},[34,129299,129300],{"class":36,"line":37},[34,129301,129302],{"class":205},"\u002F* 方位名词 *\u002F\n",[34,129304,129305,129307],{"class":36,"line":51},[34,129306,52258],{"class":44},[34,129308,57],{"class":40},[34,129310,129311,129314,129316,129318,129321],{"class":36,"line":60},[34,129312,129313],{"class":63},"  background-position",[34,129315,67],{"class":40},[34,129317,52239],{"class":63},[34,129319,129320],{"class":63}," top",[34,129322,73],{"class":40},[34,129324,129325],{"class":36,"line":76},[34,129326,241],{"class":40},[34,129328,129329],{"class":36,"line":93},[34,129330,129331],{"class":205},"\u002F* 精确单位 *\u002F\n",[34,129333,129334,129336],{"class":36,"line":99},[34,129335,52258],{"class":44},[34,129337,57],{"class":40},[34,129339,129340,129342,129344,129346,129348,129350,129352],{"class":36,"line":353},[34,129341,129313],{"class":63},[34,129343,67],{"class":40},[34,129345,1495],{"class":63},[34,129347,88],{"class":87},[34,129349,58147],{"class":63},[34,129351,88],{"class":87},[34,129353,73],{"class":40},[34,129355,129356],{"class":36,"line":359},[34,129357,241],{"class":40},[34,129359,129360],{"class":36,"line":579},[34,129361,129362],{"class":205},"\u002F* 混合单位 *\u002F\n",[34,129364,129365,129367],{"class":36,"line":589},[34,129366,52258],{"class":44},[34,129368,57],{"class":40},[34,129370,129371,129373,129375,129377,129379,129381],{"class":36,"line":601},[34,129372,129313],{"class":63},[34,129374,67],{"class":40},[34,129376,1495],{"class":63},[34,129378,88],{"class":87},[34,129380,17796],{"class":63},[34,129382,73],{"class":40},[34,129384,129385],{"class":36,"line":613},[34,129386,241],{"class":40},[108,129388,129389],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[934,129391,129392,129400],{},[937,129393,129394],{},[940,129395,129396,129398],{},[943,129397,129166],{"align":24388},[943,129399,26521],{"align":24388},[980,129401,129402,129409],{},[940,129403,129404,129406],{},[985,129405,52614],{"align":24388},[985,129407,129408],{"align":24388},"百分数|由浮点数和单位标识符组成的长度值",[940,129410,129411,129414],{},[985,129412,129413],{"align":24388},"position",[985,129415,129416],{"align":24388},"top|center|bottom|left|center|right 方位名词",[108,129418,129419],{},"其他说明：",[108,129421,129422],{},"①参数是方位名词",[108,129424,129425],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[108,129427,129428],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[108,129430,129431],{},"②参数是精确单位",[108,129433,129434],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[108,129436,129437],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[108,129439,129440],{},"③参数是混合单位",[108,129442,129443],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[19,129445,129447],{"id":129446},"_825-背景图片固定","8.2.5 背景图片固定",[24,129449,129451],{"className":196,"code":129450,"language":198,"meta":29,"style":29},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[31,129452,129453,129458,129464,129476,129480,129485,129491,129501],{"__ignoreMap":29},[34,129454,129455],{"class":36,"line":37},[34,129456,129457],{"class":205},"\u002F* 背景滚动（默认） *\u002F\n",[34,129459,129460,129462],{"class":36,"line":51},[34,129461,52258],{"class":44},[34,129463,57],{"class":40},[34,129465,129466,129469,129471,129474],{"class":36,"line":60},[34,129467,129468],{"class":63},"  background-attachment",[34,129470,67],{"class":40},[34,129472,129473],{"class":63},"scroll",[34,129475,73],{"class":40},[34,129477,129478],{"class":36,"line":76},[34,129479,241],{"class":40},[34,129481,129482],{"class":36,"line":93},[34,129483,129484],{"class":205},"\u002F* 背景固定 *\u002F\n",[34,129486,129487,129489],{"class":36,"line":99},[34,129488,52258],{"class":44},[34,129490,57],{"class":40},[34,129492,129493,129495,129497,129499],{"class":36,"line":353},[34,129494,129468],{"class":63},[34,129496,67],{"class":40},[34,129498,86863],{"class":63},[34,129500,73],{"class":40},[34,129502,129503],{"class":36,"line":359},[34,129504,241],{"class":40},[934,129506,129507,129516],{},[937,129508,129509],{},[940,129510,129511,129514],{},[943,129512,129513],{"align":24388},"参数",[943,129515,103326],{"align":24388},[980,129517,129518,129525],{},[940,129519,129520,129522],{},[985,129521,129473],{"align":24388},[985,129523,129524],{"align":24388},"背景图像是随对象内容滚动",[940,129526,129527,129529],{},[985,129528,86863],{"align":24388},[985,129530,129531],{"align":24388},"背景图像固定",[19,129533,129535],{"id":129534},"_826-背景样式合写","8.2.6 背景样式合写",[24,129537,129539],{"className":196,"code":129538,"language":198,"meta":29,"style":29},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[31,129540,129541,129546,129552,129580],{"__ignoreMap":29},[34,129542,129543],{"class":36,"line":37},[34,129544,129545],{"class":205},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[34,129547,129548,129550],{"class":36,"line":51},[34,129549,52258],{"class":44},[34,129551,57],{"class":40},[34,129553,129554,129556,129558,129560,129563,129565,129567,129569,129571,129574,129576,129578],{"class":36,"line":60},[34,129555,71245],{"class":63},[34,129557,67],{"class":40},[34,129559,61485],{"class":63},[34,129561,129562],{"class":63}," url",[34,129564,801],{"class":40},[34,129566,129151],{"class":5869},[34,129568,14367],{"class":40},[34,129570,62377],{"class":63},[34,129572,129573],{"class":63}," fixed",[34,129575,17796],{"class":63},[34,129577,129320],{"class":63},[34,129579,73],{"class":40},[34,129581,129582],{"class":36,"line":76},[34,129583,241],{"class":40},[19,129585,129587],{"id":129586},"_827-背景色半透明","8.2.7 背景色半透明",[24,129589,129591],{"className":196,"code":129590,"language":198,"meta":29,"style":29},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[31,129592,129593,129599,129625],{"__ignoreMap":29},[34,129594,129595,129597],{"class":36,"line":37},[34,129596,52258],{"class":44},[34,129598,57],{"class":40},[34,129600,129601,129603,129605,129607,129609,129611,129613,129615,129617,129619,129621,129623],{"class":36,"line":51},[34,129602,71245],{"class":63},[34,129604,67],{"class":40},[34,129606,55753],{"class":63},[34,129608,801],{"class":40},[34,129610,987],{"class":63},[34,129612,13088],{"class":40},[34,129614,987],{"class":63},[34,129616,13088],{"class":40},[34,129618,987],{"class":63},[34,129620,13088],{"class":40},[34,129622,101151],{"class":63},[34,129624,3372],{"class":40},[34,129626,129627],{"class":36,"line":60},[34,129628,241],{"class":40},[108,129630,100026],{},[108,129632,129633],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[108,129635,129636],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[108,129638,129639],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[108,129641,129642],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[19,129644,129646],{"id":129645},"_828-总结","8.2.8 总结",[934,129648,129649,129660],{},[937,129650,129651],{},[940,129652,129653,129656,129658],{},[943,129654,129655],{"align":24388},"属性",[943,129657,103326],{"align":24388},[943,129659,948],{"align":24388},[980,129661,129662,129673,129684,129695,129706,129717,129728],{},[940,129663,129664,129667,129670],{},[985,129665,129666],{"align":24388},"background-color",[985,129668,129669],{"align":24388},"背景颜色",[985,129671,129672],{"align":24388},"预定义的颜色值\u002F十六进制\u002FRGB代码",[940,129674,129675,129678,129681],{},[985,129676,129677],{"align":24388},"background-image",[985,129679,129680],{"align":24388},"背景图片",[985,129682,129683],{"align":24388},"url(图片路径)",[940,129685,129686,129689,129692],{},[985,129687,129688],{"align":24388},"background-repeat",[985,129690,129691],{"align":24388},"是否平铺",[985,129693,129694],{"align":24388},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[940,129696,129697,129700,129703],{},[985,129698,129699],{"align":24388},"background-position",[985,129701,129702],{"align":24388},"背景位置",[985,129704,129705],{"align":24388},"length\u002Fposition 分别是x和y坐标",[940,129707,129708,129711,129714],{},[985,129709,129710],{"align":24388},"background-attachment",[985,129712,129713],{"align":24388},"背景附着",[985,129715,129716],{"align":24388},"scroll(背景滚动) \u002Ffixed (背景固定)",[940,129718,129719,129722,129725],{},[985,129720,129721],{"align":24388},"背景简写",[985,129723,129724],{"align":24388},"书写更简单",[985,129726,129727],{"align":24388},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[940,129729,129730,129733,129736],{},[985,129731,129732],{"align":24388},"背景半透明",[985,129734,129735],{"align":24388},"背景颜色半透明",[985,129737,129738],{"align":24388},"background: rgba(0,0,0.3); 后面必须是4个值",[108,129740,129741],{},"颜色渐变：",[2122,129743],{"style":127038,"src":129744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2122,129746],{"style":127038,"src":129747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[19,129749,129751],{"id":129750},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[24,129753,129755],{"className":26,"code":129754,"language":28,"meta":29,"style":29},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[31,129756,129757,129772,129791,129810,129829,129848,129867],{"__ignoreMap":29},[34,129758,129759,129761,129763,129765,129767,129770],{"class":36,"line":37},[34,129760,41],{"class":40},[34,129762,52258],{"class":44},[34,129764,54132],{"class":149},[34,129766,153],{"class":40},[34,129768,129769],{"class":156},"\"nav\"",[34,129771,48],{"class":40},[34,129773,129774,129776,129778,129780,129782,129784,129787,129789],{"class":36,"line":51},[34,129775,52790],{"class":40},[34,129777,520],{"class":44},[34,129779,267],{"class":149},[34,129781,153],{"class":40},[34,129783,61703],{"class":156},[34,129785,129786],{"class":40},">五彩导航1\u003C\u002F",[34,129788,520],{"class":44},[34,129790,48],{"class":40},[34,129792,129793,129795,129797,129799,129801,129803,129806,129808],{"class":36,"line":60},[34,129794,52790],{"class":40},[34,129796,520],{"class":44},[34,129798,267],{"class":149},[34,129800,153],{"class":40},[34,129802,61703],{"class":156},[34,129804,129805],{"class":40},">五彩导航2\u003C\u002F",[34,129807,520],{"class":44},[34,129809,48],{"class":40},[34,129811,129812,129814,129816,129818,129820,129822,129825,129827],{"class":36,"line":76},[34,129813,52790],{"class":40},[34,129815,520],{"class":44},[34,129817,267],{"class":149},[34,129819,153],{"class":40},[34,129821,61703],{"class":156},[34,129823,129824],{"class":40},">五彩导航3\u003C\u002F",[34,129826,520],{"class":44},[34,129828,48],{"class":40},[34,129830,129831,129833,129835,129837,129839,129841,129844,129846],{"class":36,"line":93},[34,129832,52790],{"class":40},[34,129834,520],{"class":44},[34,129836,267],{"class":149},[34,129838,153],{"class":40},[34,129840,61703],{"class":156},[34,129842,129843],{"class":40},">五彩导航4\u003C\u002F",[34,129845,520],{"class":44},[34,129847,48],{"class":40},[34,129849,129850,129852,129854,129856,129858,129860,129863,129865],{"class":36,"line":99},[34,129851,52790],{"class":40},[34,129853,520],{"class":44},[34,129855,267],{"class":149},[34,129857,153],{"class":40},[34,129859,61703],{"class":156},[34,129861,129862],{"class":40},">五彩导航5\u003C\u002F",[34,129864,520],{"class":44},[34,129866,48],{"class":40},[34,129868,129869,129871,129873],{"class":36,"line":353},[34,129870,102],{"class":40},[34,129872,52258],{"class":44},[34,129874,48],{"class":40},[24,129876,129878],{"className":196,"code":129877,"language":198,"meta":29,"style":29},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[31,129879,129880,129889,129899,129911,129923,129933,129945,129955,129959,129984,130007,130030,130053],{"__ignoreMap":29},[34,129881,129882,129885,129887],{"class":36,"line":37},[34,129883,129884],{"class":149},".nav",[34,129886,2058],{"class":44},[34,129888,57],{"class":40},[34,129890,129891,129893,129895,129897],{"class":36,"line":51},[34,129892,128669],{"class":63},[34,129894,67],{"class":40},[34,129896,73014],{"class":63},[34,129898,73],{"class":40},[34,129900,129901,129903,129905,129907,129909],{"class":36,"line":60},[34,129902,71202],{"class":63},[34,129904,67],{"class":40},[34,129906,1611],{"class":63},[34,129908,88],{"class":87},[34,129910,73],{"class":40},[34,129912,129913,129915,129917,129919,129921],{"class":36,"line":76},[34,129914,71421],{"class":63},[34,129916,67],{"class":40},[34,129918,1650],{"class":63},[34,129920,88],{"class":87},[34,129922,73],{"class":40},[34,129924,129925,129927,129929,129931],{"class":36,"line":93},[34,129926,71160],{"class":63},[34,129928,67],{"class":40},[34,129930,52239],{"class":63},[34,129932,73],{"class":40},[34,129934,129935,129937,129939,129941,129943],{"class":36,"line":99},[34,129936,127861],{"class":63},[34,129938,67],{"class":40},[34,129940,1650],{"class":63},[34,129942,88],{"class":87},[34,129944,73],{"class":40},[34,129946,129947,129949,129951,129953],{"class":36,"line":353},[34,129948,217],{"class":63},[34,129950,67],{"class":40},[34,129952,61485],{"class":63},[34,129954,73],{"class":40},[34,129956,129957],{"class":36,"line":359},[34,129958,241],{"class":40},[34,129960,129961,129963,129965,129968,129970,129972,129975,129977,129979,129981],{"class":36,"line":579},[34,129962,129884],{"class":149},[34,129964,2058],{"class":44},[34,129966,129967],{"class":149},":nth-child",[34,129969,801],{"class":40},[34,129971,1013],{"class":63},[34,129973,129974],{"class":40},") { ",[34,129976,129666],{"class":63},[34,129978,67],{"class":40},[34,129980,129084],{"class":63},[34,129982,129983],{"class":40},"; }\n",[34,129985,129986,129988,129990,129992,129994,129996,129998,130000,130002,130005],{"class":36,"line":589},[34,129987,129884],{"class":149},[34,129989,2058],{"class":44},[34,129991,129967],{"class":149},[34,129993,801],{"class":40},[34,129995,875],{"class":63},[34,129997,129974],{"class":40},[34,129999,129666],{"class":63},[34,130001,67],{"class":40},[34,130003,130004],{"class":63},"#ff0000",[34,130006,129983],{"class":40},[34,130008,130009,130011,130013,130015,130017,130019,130021,130023,130025,130028],{"class":36,"line":601},[34,130010,129884],{"class":149},[34,130012,2058],{"class":44},[34,130014,129967],{"class":149},[34,130016,801],{"class":40},[34,130018,869],{"class":63},[34,130020,129974],{"class":40},[34,130022,129666],{"class":63},[34,130024,67],{"class":40},[34,130026,130027],{"class":63},"#00a4ff",[34,130029,129983],{"class":40},[34,130031,130032,130034,130036,130038,130040,130042,130044,130046,130048,130051],{"class":36,"line":613},[34,130033,129884],{"class":149},[34,130035,2058],{"class":44},[34,130037,129967],{"class":149},[34,130039,801],{"class":40},[34,130041,1088],{"class":63},[34,130043,129974],{"class":40},[34,130045,129666],{"class":63},[34,130047,67],{"class":40},[34,130049,130050],{"class":63},"#ff00ff",[34,130052,129983],{"class":40},[34,130054,130055,130057,130059,130061,130063,130065,130067,130069,130071,130074],{"class":36,"line":618},[34,130056,129884],{"class":149},[34,130058,2058],{"class":44},[34,130060,129967],{"class":149},[34,130062,801],{"class":40},[34,130064,1114],{"class":63},[34,130066,129974],{"class":40},[34,130068,129666],{"class":63},[34,130070,67],{"class":40},[34,130072,130073],{"class":63},"#00ff00",[34,130075,129983],{"class":40},[14,130077,130079],{"id":130078},"_83-css三大特性","8.3 css三大特性",[19,130081,130083],{"id":130082},"_831-层叠性","8.3.1 层叠性",[108,130085,130086],{},"为了解决样式冲突问题",[108,130088,130089],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[108,130091,130092],{},"   ②样式不冲突，不会层叠",[19,130094,130096],{"id":130095},"_832-继承性","8.3.2 继承性",[108,130098,130099],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[108,130101,130102],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[24,130104,130106],{"className":196,"code":130105,"language":198,"meta":29,"style":29},"p {\n  color: #333;\n}\n",[31,130107,130108,130114,130124],{"__ignoreMap":29},[34,130109,130110,130112],{"class":36,"line":37},[34,130111,108],{"class":44},[34,130113,57],{"class":40},[34,130115,130116,130118,130120,130122],{"class":36,"line":51},[34,130117,217],{"class":63},[34,130119,67],{"class":40},[34,130121,534],{"class":63},[34,130123,73],{"class":40},[34,130125,130126],{"class":36,"line":60},[34,130127,241],{"class":40},[2122,130129],{"style":127038,"src":130130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[108,130132,130133],{},"解释：①行高可以跟单位也可以不跟单位",[108,130135,130136],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[108,130138,130139],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[108,130141,130142],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[19,130144,130146],{"id":130145},"_833-优先级","8.3.3 优先级",[752,130148,130149,130152],{},[755,130150,130151],{},"选择器相同，则执行层叠性",[755,130153,130154],{},"选择器不同，则根据选择器权重执行",[934,130156,130157,130167],{},[937,130158,130159],{},[940,130160,130161,130164],{},[943,130162,130163],{"align":24388},"选择器",[943,130165,130166],{"align":24388},"选择器权重",[980,130168,130169,130177,130185,130193,130201,130209],{},[940,130170,130171,130174],{},[985,130172,130173],{"align":24388},"继承 或者*",[985,130175,130176],{"align":24388},"0，0，0，0",[940,130178,130179,130182],{},[985,130180,130181],{"align":24388},"标签选择器",[985,130183,130184],{"align":24388},"0，0，0，1",[940,130186,130187,130190],{},[985,130188,130189],{"align":24388},"类选择器，伪类选择器",[985,130191,130192],{"align":24388},"0，0，1，0",[940,130194,130195,130198],{},[985,130196,130197],{"align":24388},"ID选择器",[985,130199,130200],{"align":24388},"0，1，0，0",[940,130202,130203,130206],{},[985,130204,130205],{"align":24388},"行内样式",[985,130207,130208],{"align":24388},"1，0，0，0",[940,130210,130211,130214],{},[985,130212,130213],{"align":24388},"！important",[985,130215,130216],{"align":24388},"无穷大",[108,130218,130219],{},"! important用法：",[24,130221,130223],{"className":196,"code":130222,"language":198,"meta":29,"style":29},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[31,130224,130225,130230,130236,130249,130253,130258,130264,130274],{"__ignoreMap":29},[34,130226,130227],{"class":36,"line":37},[34,130228,130229],{"class":205},"\u002F* !important 拥有最高优先级 *\u002F\n",[34,130231,130232,130234],{"class":36,"line":51},[34,130233,52258],{"class":44},[34,130235,57],{"class":40},[34,130237,130238,130240,130242,130244,130247],{"class":36,"line":60},[34,130239,217],{"class":63},[34,130241,67],{"class":40},[34,130243,52292],{"class":63},[34,130245,130246],{"class":87}," !important",[34,130248,73],{"class":40},[34,130250,130251],{"class":36,"line":76},[34,130252,241],{"class":40},[34,130254,130255],{"class":36,"line":93},[34,130256,130257],{"class":205},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[34,130259,130260,130262],{"class":36,"line":99},[34,130261,52258],{"class":44},[34,130263,57],{"class":40},[34,130265,130266,130268,130270,130272],{"class":36,"line":353},[34,130267,217],{"class":63},[34,130269,67],{"class":40},[34,130271,58064],{"class":63},[34,130273,73],{"class":40},[34,130275,130276],{"class":36,"line":359},[34,130277,241],{"class":40},[108,130279,130280],{},"优先级注意点：",[108,130282,130283],{},"①权重是有4组数字组成,但是不会有进位",[108,130285,130286],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[108,130288,130289],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[108,130291,130292],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[108,130294,130295],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[108,130297,130298],{},"⑥复合选择器",[934,130300,130301,130311],{},[937,130302,130303],{},[940,130304,130305,130308],{},[943,130306,130307],{"align":24388},"div ul li",[943,130309,130310],{"align":24388},"0,0,0,3",[980,130312,130313,130321,130329],{},[940,130314,130315,130318],{},[985,130316,130317],{"align":24388},".nav ul li",[985,130319,130320],{"align":24388},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[940,130322,130323,130326],{},[985,130324,130325],{"align":24388},"a:hover",[985,130327,130328],{"align":24388},"0,0,1,1",[940,130330,130331,130334],{},[985,130332,130333],{"align":24388},".nav a",[985,130335,130328],{"align":24388},[45,130337,130338],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":130340},[130341,130349,130360],{"id":128449,"depth":51,"text":128450,"children":130342},[130343,130344,130345,130346,130347,130348],{"id":128462,"depth":60,"text":128463},{"id":128534,"depth":60,"text":128535},{"id":128606,"depth":60,"text":128607},{"id":128637,"depth":60,"text":128638},{"id":128644,"depth":60,"text":128645},{"id":128797,"depth":60,"text":128798},{"id":129105,"depth":51,"text":129106,"children":130350},[130351,130352,130353,130354,130355,130356,130357,130358,130359],{"id":129112,"depth":60,"text":129113},{"id":129122,"depth":60,"text":129123},{"id":129218,"depth":60,"text":129219},{"id":129291,"depth":60,"text":129292},{"id":129446,"depth":60,"text":129447},{"id":129534,"depth":60,"text":129535},{"id":129586,"depth":60,"text":129587},{"id":129645,"depth":60,"text":129646},{"id":129750,"depth":60,"text":129751},{"id":130078,"depth":51,"text":130079,"children":130361},[130362,130363,130364],{"id":130082,"depth":60,"text":130083},{"id":130095,"depth":60,"text":130096},{"id":130145,"depth":60,"text":130146},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128441,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130371,"title":130372,"body":130373,"description":723,"extension":724,"meta":131963,"navigation":726,"path":131964,"seo":131965,"stem":131966,"__hash__":131967},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130374,"toc":131942},[130375,130378,130382,130385,130388,130391,130394,130397,130400,130403,130407,130415,130452,130488,130491,130505,130510,130544,130547,130640,130645,130648,130678,130681,130686,130694,130698,130705,130751,130795,130800,130803,130806,130809,130812,130815,130818,130820,130823,130827,130832,130876,130881,130884,130887,130924,130929,130932,130935,130938,130941,130973,130976,130979,130982,131014,131017,131020,131023,131027,131030,131062,131065,131069,131089,131092,131100,131103,131107,131112,131115,131147,131152,131155,131193,131197,131202,131205,131208,131239,131242,131259,131264,131316,131376,131381,131435,131473,131477,131481,131484,131488,131496,131499,131501,131512,131517,131565,131599,131602,131605,131608,131611,131655,131658,131661,131664,131667,131670,131673,131717,131720,131723,131726,131729,131732,131735,131741,131744,131788,131791,131794,131797,131800,131803,131847,131850,131852,131855,131859,131863,131901,131905,131908,131911,131915,131923,131927,131930,131933,131936,131939],[10,130376,130372],{"id":130377},"_9-css盒模型浮动与切图",[14,130379,130381],{"id":130380},"_91-盒子模型","9.1 盒子模型",[108,130383,130384],{},"利用盒子来设计网页",[108,130386,130387],{},"盒子包含：边框、外边距、内边距、实际内容",[108,130389,130390],{},"网页布局设置：",[108,130392,130393],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[108,130395,130396],{},"②利用css设置好盒子样式，然后摆放到相应位置",[108,130398,130399],{},"③往盒子里装内容",[2122,130401],{"style":127038,"src":130402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[19,130404,130406],{"id":130405},"_911-边框border","9.1.1 边框（border）",[752,130408,130409,130412],{},[755,130410,130411],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[755,130413,130414],{},"语法",[24,130416,130418],{"className":196,"code":130417,"language":198,"meta":29,"style":29},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[31,130419,130420,130425,130431,130448],{"__ignoreMap":29},[34,130421,130422],{"class":36,"line":37},[34,130423,130424],{"class":205},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[34,130426,130427,130429],{"class":36,"line":51},[34,130428,52258],{"class":44},[34,130430,57],{"class":40},[34,130432,130433,130435,130437,130439,130441,130443,130446],{"class":36,"line":60},[34,130434,71528],{"class":63},[34,130436,67],{"class":40},[34,130438,1013],{"class":63},[34,130440,88],{"class":87},[34,130442,52168],{"class":63},[34,130444,130445],{"class":63}," #ccc",[34,130447,73],{"class":40},[34,130449,130450],{"class":36,"line":76},[34,130451,241],{"class":40},[934,130453,130454,130462],{},[937,130455,130456],{},[940,130457,130458,130460],{},[943,130459,129655],{"align":24388},[943,130461,103326],{"align":24388},[980,130463,130464,130472,130480],{},[940,130465,130466,130469],{},[985,130467,130468],{"align":24388},"border-width",[985,130470,130471],{"align":24388},"定义边框粗细，单位是px",[940,130473,130474,130477],{},[985,130475,130476],{"align":24388},"border-style",[985,130478,130479],{"align":24388},"边框的样式",[940,130481,130482,130485],{},[985,130483,130484],{"align":24388},"border-color",[985,130486,130487],{"align":24388},"边框的颜色",[108,130489,130490],{},"边框样式 border-style 可以设置如下值：",[1800,130492,130493,130496,130499,130502],{},[755,130494,130495],{},"none：没有边框即忽略所有边框的宽度（默认值）",[755,130497,130498],{},"solid：边框为单实线(最为常用的)",[755,130500,130501],{},"dashed：边框为虚线",[755,130503,130504],{},"dotted：边框为点线",[752,130506,130507],{"start":60},[755,130508,130509],{},"边框的合写分写",[24,130511,130512],{"className":196,"code":130417,"language":198,"meta":29,"style":29},[31,130513,130514,130518,130524,130540],{"__ignoreMap":29},[34,130515,130516],{"class":36,"line":37},[34,130517,130424],{"class":205},[34,130519,130520,130522],{"class":36,"line":51},[34,130521,52258],{"class":44},[34,130523,57],{"class":40},[34,130525,130526,130528,130530,130532,130534,130536,130538],{"class":36,"line":60},[34,130527,71528],{"class":63},[34,130529,67],{"class":40},[34,130531,1013],{"class":63},[34,130533,88],{"class":87},[34,130535,52168],{"class":63},[34,130537,130445],{"class":63},[34,130539,73],{"class":40},[34,130541,130542],{"class":36,"line":76},[34,130543,241],{"class":40},[108,130545,130546],{},"边框分开写法：",[24,130548,130550],{"className":196,"code":130549,"language":198,"meta":29,"style":29},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[31,130551,130552,130557,130563,130581,130599,130618,130636],{"__ignoreMap":29},[34,130553,130554],{"class":36,"line":37},[34,130555,130556],{"class":205},"\u002F* 边框分开写法 *\u002F\n",[34,130558,130559,130561],{"class":36,"line":51},[34,130560,52258],{"class":44},[34,130562,57],{"class":40},[34,130564,130565,130568,130570,130572,130574,130576,130579],{"class":36,"line":60},[34,130566,130567],{"class":63},"  border-top",[34,130569,67],{"class":40},[34,130571,1013],{"class":63},[34,130573,88],{"class":87},[34,130575,52168],{"class":63},[34,130577,130578],{"class":63}," #000",[34,130580,73],{"class":40},[34,130582,130583,130586,130588,130590,130592,130594,130597],{"class":36,"line":76},[34,130584,130585],{"class":63},"  border-right",[34,130587,67],{"class":40},[34,130589,875],{"class":63},[34,130591,88],{"class":87},[34,130593,62881],{"class":63},[34,130595,130596],{"class":63}," #333",[34,130598,73],{"class":40},[34,130600,130601,130604,130606,130608,130610,130613,130616],{"class":36,"line":93},[34,130602,130603],{"class":63},"  border-bottom",[34,130605,67],{"class":40},[34,130607,869],{"class":63},[34,130609,88],{"class":87},[34,130611,130612],{"class":63}," dotted",[34,130614,130615],{"class":63}," #666",[34,130617,73],{"class":40},[34,130619,130620,130623,130625,130627,130629,130631,130634],{"class":36,"line":99},[34,130621,130622],{"class":63},"  border-left",[34,130624,67],{"class":40},[34,130626,1013],{"class":63},[34,130628,88],{"class":87},[34,130630,52168],{"class":63},[34,130632,130633],{"class":63}," #999",[34,130635,73],{"class":40},[34,130637,130638],{"class":36,"line":353},[34,130639,241],{"class":40},[752,130641,130642],{"start":76},[755,130643,130644],{},"表格的细线边框",[108,130646,130647],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[24,130649,130651],{"className":196,"code":130650,"language":198,"meta":29,"style":29},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[31,130652,130653,130658,130664,130674],{"__ignoreMap":29},[34,130654,130655],{"class":36,"line":37},[34,130656,130657],{"class":205},"\u002F* 表格细线边框合并 *\u002F\n",[34,130659,130660,130662],{"class":36,"line":51},[34,130661,934],{"class":44},[34,130663,57],{"class":40},[34,130665,130666,130668,130670,130672],{"class":36,"line":60},[34,130667,71212],{"class":63},[34,130669,67],{"class":40},[34,130671,65673],{"class":63},[34,130673,73],{"class":40},[34,130675,130676],{"class":36,"line":76},[34,130677,241],{"class":40},[108,130679,130680],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[752,130682,130683],{"start":93},[755,130684,130685],{},"解决边框额外增加盒子的实际大小的方法：",[1800,130687,130688,130691],{},[755,130689,130690],{},"测量盒子大小的时候,不量边框",[755,130692,130693],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[19,130695,130697],{"id":130696},"_912-内边距","9.1.2 内边距",[752,130699,130700,130703],{},[755,130701,130702],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[755,130704,130414],{},[934,130706,130707,130717],{},[937,130708,130709],{},[940,130710,130711,130714],{},[943,130712,130713],{"align":24388},"值的个数",[943,130715,130716],{"align":24388},"表达意思",[980,130718,130719,130727,130735,130743],{},[940,130720,130721,130724],{},[985,130722,130723],{"align":24388},"padding: 5px;",[985,130725,130726],{"align":24388},"1个值，代表上下左右都有5个元素",[940,130728,130729,130732],{},[985,130730,130731],{"align":24388},"padding: 5px 10px;",[985,130733,130734],{"align":24388},"2个值，代表上下内边距为5像素，左右内边距为10像素",[940,130736,130737,130740],{},[985,130738,130739],{"align":24388},"padding: 5px 10px 20px;",[985,130741,130742],{"align":24388},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[940,130744,130745,130748],{},[985,130746,130747],{"align":24388},"padding: 5px 10px 20px 30px;",[985,130749,130750],{"align":24388},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[934,130752,130753,130761],{},[937,130754,130755],{},[940,130756,130757,130759],{},[943,130758,129655],{"align":24388},[943,130760,103326],{"align":24388},[980,130762,130763,130771,130779,130787],{},[940,130764,130765,130768],{},[985,130766,130767],{"align":24388},"padding-left",[985,130769,130770],{"align":24388},"左内边距",[940,130772,130773,130776],{},[985,130774,130775],{"align":24388},"padding-right",[985,130777,130778],{"align":24388},"右内边距",[940,130780,130781,130784],{},[985,130782,130783],{"align":24388},"padding-top",[985,130785,130786],{"align":24388},"上内边距",[940,130788,130789,130792],{},[985,130790,130791],{"align":24388},"padding-bottom",[985,130793,130794],{"align":24388},"下内边距",[752,130796,130797],{"start":60},[755,130798,130799],{},"内边距会影响盒子的实际大小",[108,130801,130802],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[108,130804,130805],{},"①内容和边框有了距离，添加了内边距",[108,130807,130808],{},"②padding影响了盒子实际大小",[108,130810,130811],{},"内边距对盒子大小的影响：",[108,130813,130814],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[108,130816,130817],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[108,130819,95850],{},[108,130821,130822],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[19,130824,130826],{"id":130825},"_913-外边距","9.1.3 外边距",[752,130828,130829],{},[755,130830,130831],{},"控制盒子与盒子之间的距离",[934,130833,130834,130842],{},[937,130835,130836],{},[940,130837,130838,130840],{},[943,130839,129655],{"align":24388},[943,130841,103326],{"align":24388},[980,130843,130844,130852,130860,130868],{},[940,130845,130846,130849],{},[985,130847,130848],{"align":24388},"margin-left",[985,130850,130851],{"align":24388},"左外边距",[940,130853,130854,130857],{},[985,130855,130856],{"align":24388},"margin-right",[985,130858,130859],{"align":24388},"右外边距",[940,130861,130862,130865],{},[985,130863,130864],{"align":24388},"margin-top",[985,130866,130867],{"align":24388},"上外边距",[940,130869,130870,130873],{},[985,130871,130872],{"align":24388},"margin-bottom",[985,130874,130875],{"align":24388},"下外边距",[752,130877,130878],{"start":51},[755,130879,130880],{},"外边距可以让块级盒子水平居中的两个条件：",[108,130882,130883],{},"①盒子必须指定了宽度（width）",[108,130885,130886],{},"②盒子左右的外边距都设置为 auto",[24,130888,130890],{"className":196,"code":130889,"language":198,"meta":29,"style":29},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[31,130891,130892,130897,130904,130920],{"__ignoreMap":29},[34,130893,130894],{"class":36,"line":37},[34,130895,130896],{"class":205},"\u002F* margin 复合写法（同上） *\u002F\n",[34,130898,130899,130902],{"class":36,"line":51},[34,130900,130901],{"class":149},".box",[34,130903,57],{"class":40},[34,130905,130906,130908,130910,130912,130914,130917],{"class":36,"line":60},[34,130907,71105],{"class":63},[34,130909,67],{"class":40},[34,130911,987],{"class":63},[34,130913,52203],{"class":63},[34,130915,130916],{"class":40},";  ",[34,130918,130919],{"class":205},"\u002F* 块级盒子水平居中 *\u002F\n",[34,130921,130922],{"class":36,"line":76},[34,130923,241],{"class":40},[752,130925,130926],{"start":60},[755,130927,130928],{},"外边距塌陷问题",[108,130930,130931],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2122,130933],{"style":127038,"src":130934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[108,130936,130937],{},"解决方案：",[108,130939,130940],{},"①可以为父亲元素定义上边距",[24,130942,130943],{"className":196,"code":130889,"language":198,"meta":29,"style":29},[31,130944,130945,130949,130955,130969],{"__ignoreMap":29},[34,130946,130947],{"class":36,"line":37},[34,130948,130896],{"class":205},[34,130950,130951,130953],{"class":36,"line":51},[34,130952,130901],{"class":149},[34,130954,57],{"class":40},[34,130956,130957,130959,130961,130963,130965,130967],{"class":36,"line":60},[34,130958,71105],{"class":63},[34,130960,67],{"class":40},[34,130962,987],{"class":63},[34,130964,52203],{"class":63},[34,130966,130916],{"class":40},[34,130968,130919],{"class":205},[34,130970,130971],{"class":36,"line":76},[34,130972,241],{"class":40},[108,130974,130975],{},"②可以为父亲元素定义上内边距",[108,130977,130978],{},"③可以为父亲元素添加overflow:hidden",[2122,130980],{"style":127038,"src":130981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[24,130983,130984],{"className":196,"code":130889,"language":198,"meta":29,"style":29},[31,130985,130986,130990,130996,131010],{"__ignoreMap":29},[34,130987,130988],{"class":36,"line":37},[34,130989,130896],{"class":205},[34,130991,130992,130994],{"class":36,"line":51},[34,130993,130901],{"class":149},[34,130995,57],{"class":40},[34,130997,130998,131000,131002,131004,131006,131008],{"class":36,"line":60},[34,130999,71105],{"class":63},[34,131001,67],{"class":40},[34,131003,987],{"class":63},[34,131005,52203],{"class":63},[34,131007,130916],{"class":40},[34,131009,130919],{"class":205},[34,131011,131012],{"class":36,"line":76},[34,131013,241],{"class":40},[2122,131015],{"style":127038,"src":131016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[108,131018,131019],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[108,131021,131022],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[19,131024,131026],{"id":131025},"_914-清除内外边距","9.1.4 清除内外边距",[108,131028,131029],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[24,131031,131032],{"className":196,"code":130889,"language":198,"meta":29,"style":29},[31,131033,131034,131038,131044,131058],{"__ignoreMap":29},[34,131035,131036],{"class":36,"line":37},[34,131037,130896],{"class":205},[34,131039,131040,131042],{"class":36,"line":51},[34,131041,130901],{"class":149},[34,131043,57],{"class":40},[34,131045,131046,131048,131050,131052,131054,131056],{"class":36,"line":60},[34,131047,71105],{"class":63},[34,131049,67],{"class":40},[34,131051,987],{"class":63},[34,131053,52203],{"class":63},[34,131055,130916],{"class":40},[34,131057,130919],{"class":205},[34,131059,131060],{"class":36,"line":76},[34,131061,241],{"class":40},[108,131063,131064],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[19,131066,131068],{"id":131067},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1800,131070,131071,131074,131077,131080,131083,131086],{},[755,131072,131073],{},"文件→打开 ：可以打开我们要测量的图片",[755,131075,131076],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[755,131078,131079],{},"右击标尺，把里面的单位改为像素",[755,131081,131082],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[755,131084,131085],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[755,131087,131088],{},"用选区拖动 可以测量大小",[2122,131090],{"style":127038,"src":131091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1800,131093,131094,131097],{},[755,131095,131096],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[755,131098,131099],{},"吸管取色工具",[2122,131101],{"style":127038,"src":131102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[19,131104,131106],{"id":131105},"_916-案例","9.1.6 案例",[752,131108,131109],{},[755,131110,131111],{},"小米商品",[2122,131113],{"style":127038,"src":131114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[24,131116,131117],{"className":196,"code":130889,"language":198,"meta":29,"style":29},[31,131118,131119,131123,131129,131143],{"__ignoreMap":29},[34,131120,131121],{"class":36,"line":37},[34,131122,130896],{"class":205},[34,131124,131125,131127],{"class":36,"line":51},[34,131126,130901],{"class":149},[34,131128,57],{"class":40},[34,131130,131131,131133,131135,131137,131139,131141],{"class":36,"line":60},[34,131132,71105],{"class":63},[34,131134,67],{"class":40},[34,131136,987],{"class":63},[34,131138,52203],{"class":63},[34,131140,130916],{"class":40},[34,131142,130919],{"class":205},[34,131144,131145],{"class":36,"line":76},[34,131146,241],{"class":40},[752,131148,131149],{"start":51},[755,131150,131151],{},"快报模块",[2122,131153],{"style":127038,"src":131154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[24,131156,131158],{"className":26,"code":131157,"language":28,"meta":29,"style":29},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[31,131159,131160,131165,131180,131185],{"__ignoreMap":29},[34,131161,131162],{"class":36,"line":37},[34,131163,131164],{"class":205},"\u003C!-- HTML 代码示例 -->\n",[34,131166,131167,131169,131171,131173,131175,131178],{"class":36,"line":51},[34,131168,41],{"class":40},[34,131170,52258],{"class":44},[34,131172,54132],{"class":149},[34,131174,153],{"class":40},[34,131176,131177],{"class":156},"\"example\"",[34,131179,48],{"class":40},[34,131181,131182],{"class":36,"line":60},[34,131183,131184],{"class":40},"  示例内容\n",[34,131186,131187,131189,131191],{"class":36,"line":76},[34,131188,102],{"class":40},[34,131190,52258],{"class":44},[34,131192,48],{"class":40},[19,131194,131196],{"id":131195},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[752,131198,131199],{},[755,131200,131201],{},"圆角边框",[108,131203,131204],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2122,131206],{"style":127038,"src":131207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[24,131209,131211],{"className":196,"code":131210,"language":198,"meta":29,"style":29},"div {\n  border: 1px solid #ccc;\n}\n",[31,131212,131213,131219,131235],{"__ignoreMap":29},[34,131214,131215,131217],{"class":36,"line":37},[34,131216,52258],{"class":44},[34,131218,57],{"class":40},[34,131220,131221,131223,131225,131227,131229,131231,131233],{"class":36,"line":51},[34,131222,71528],{"class":63},[34,131224,67],{"class":40},[34,131226,1013],{"class":63},[34,131228,88],{"class":87},[34,131230,52168],{"class":63},[34,131232,130445],{"class":63},[34,131234,73],{"class":40},[34,131236,131237],{"class":36,"line":60},[34,131238,241],{"class":40},[108,131240,131241],{},"解释:",[1800,131243,131244,131247,131250,131253,131256],{},[755,131245,131246],{},"参数值可以为数值或百分比的形式",[755,131248,131249],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[755,131251,131252],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[755,131254,131255],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[755,131257,131258],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[752,131260,131261],{"start":51},[755,131262,131263],{},"盒子阴影",[24,131265,131267],{"className":196,"code":131266,"language":198,"meta":29,"style":29},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[31,131268,131269,131275,131312],{"__ignoreMap":29},[34,131270,131271,131273],{"class":36,"line":37},[34,131272,52258],{"class":44},[34,131274,57],{"class":40},[34,131276,131277,131280,131282,131284,131286,131288,131290,131292,131294,131296,131298,131300,131302,131304,131306,131308,131310],{"class":36,"line":51},[34,131278,131279],{"class":63},"  box-shadow",[34,131281,67],{"class":40},[34,131283,987],{"class":63},[34,131285,15408],{"class":63},[34,131287,88],{"class":87},[34,131289,2691],{"class":63},[34,131291,88],{"class":87},[34,131293,79397],{"class":63},[34,131295,801],{"class":40},[34,131297,987],{"class":63},[34,131299,13088],{"class":40},[34,131301,987],{"class":63},[34,131303,13088],{"class":40},[34,131305,987],{"class":63},[34,131307,13088],{"class":40},[34,131309,86840],{"class":63},[34,131311,3372],{"class":40},[34,131313,131314],{"class":36,"line":60},[34,131315,241],{"class":40},[934,131317,131318,131326],{},[937,131319,131320],{},[940,131321,131322,131324],{},[943,131323,948],{"align":24388},[943,131325,28140],{"align":24388},[980,131327,131328,131336,131344,131352,131360,131368],{},[940,131329,131330,131333],{},[985,131331,131332],{"align":24388},"h-shadow",[985,131334,131335],{"align":24388},"必需,水平阴影的位置,允许负值",[940,131337,131338,131341],{},[985,131339,131340],{"align":24388},"v-shadow",[985,131342,131343],{"align":24388},"必需,垂直阴影的位置,允许负值",[940,131345,131346,131349],{},[985,131347,131348],{"align":24388},"blur",[985,131350,131351],{"align":24388},"可选,模糊距离,就是影子的虚实",[940,131353,131354,131357],{},[985,131355,131356],{"align":24388},"spread",[985,131358,131359],{"align":24388},"可选,阴影尺寸",[940,131361,131362,131365],{},[985,131363,131364],{"align":24388},"color",[985,131366,131367],{"align":24388},"可选,阴影的颜色",[940,131369,131370,131373],{},[985,131371,131372],{"align":24388},"inset",[985,131374,131375],{"align":24388},"可选,将外部阴影(outset)改为内部阴影",[752,131377,131378],{"start":60},[755,131379,131380],{},"文字阴影",[24,131382,131384],{"className":196,"code":131383,"language":198,"meta":29,"style":29},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[31,131385,131386,131392,131431],{"__ignoreMap":29},[34,131387,131388,131390],{"class":36,"line":37},[34,131389,108],{"class":44},[34,131391,57],{"class":40},[34,131393,131394,131397,131399,131401,131403,131405,131407,131409,131411,131413,131415,131417,131419,131421,131423,131425,131427,131429],{"class":36,"line":51},[34,131395,131396],{"class":63},"  text-shadow",[34,131398,67],{"class":40},[34,131400,1013],{"class":63},[34,131402,88],{"class":87},[34,131404,25771],{"class":63},[34,131406,88],{"class":87},[34,131408,15408],{"class":63},[34,131410,88],{"class":87},[34,131412,79397],{"class":63},[34,131414,801],{"class":40},[34,131416,987],{"class":63},[34,131418,13088],{"class":40},[34,131420,987],{"class":63},[34,131422,13088],{"class":40},[34,131424,987],{"class":63},[34,131426,13088],{"class":40},[34,131428,101151],{"class":63},[34,131430,3372],{"class":40},[34,131432,131433],{"class":36,"line":60},[34,131434,241],{"class":40},[934,131436,131437,131445],{},[937,131438,131439],{},[940,131440,131441,131443],{},[943,131442,948],{"align":24388},[943,131444,28140],{"align":24388},[980,131446,131447,131453,131460,131467],{},[940,131448,131449,131451],{},[985,131450,131332],{"align":24388},[985,131452,131335],{"align":24388},[940,131454,131455,131457],{},[985,131456,131340],{"align":24388},[985,131458,131459],{"align":24388},"必需,垂直阴影位置,允许负值",[940,131461,131462,131464],{},[985,131463,131348],{"align":24388},[985,131465,131466],{"align":24388},"可选,模糊的距离",[940,131468,131469,131471],{},[985,131470,131364],{"align":24388},[985,131472,131367],{"align":24388},[14,131474,131476],{"id":131475},"_92-浮动","9.2 浮动",[19,131478,131480],{"id":131479},"_921-浮动介绍","9.2.1 浮动介绍",[108,131482,131483],{},"在16.2中详细介绍",[19,131485,131487],{"id":131486},"_922-清除浮动","9.2.2 清除浮动",[752,131489,131490,131493],{},[755,131491,131492],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[755,131494,131495],{},"清除浮动的本质",[108,131497,131498],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[108,131500,9678],{},[1800,131502,131503,131506,131509],{},[755,131504,131505],{},"如果父盒子本身有高度，则不需要清除浮动",[755,131507,131508],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[755,131510,131511],{},"父级有了高度，就不会影响下面的标准流了",[752,131513,131514],{"start":60},[755,131515,131516],{},"清除浮动样式",[24,131518,131520],{"className":196,"code":131519,"language":198,"meta":29,"style":29},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[31,131521,131522,131529,131540,131544,131551,131561],{"__ignoreMap":29},[34,131523,131524,131527],{"class":36,"line":37},[34,131525,131526],{"class":149},".left",[34,131528,57],{"class":40},[34,131530,131531,131534,131536,131538],{"class":36,"line":51},[34,131532,131533],{"class":63},"  float",[34,131535,67],{"class":40},[34,131537,24388],{"class":63},[34,131539,73],{"class":40},[34,131541,131542],{"class":36,"line":60},[34,131543,241],{"class":40},[34,131545,131546,131549],{"class":36,"line":76},[34,131547,131548],{"class":149},".right",[34,131550,57],{"class":40},[34,131552,131553,131555,131557,131559],{"class":36,"line":93},[34,131554,131533],{"class":63},[34,131556,67],{"class":40},[34,131558,73153],{"class":63},[34,131560,73],{"class":40},[34,131562,131563],{"class":36,"line":99},[34,131564,241],{"class":40},[934,131566,131567,131575],{},[937,131568,131569],{},[940,131570,131571,131573],{},[943,131572,127642],{"align":24388},[943,131574,28140],{"align":24388},[980,131576,131577,131584,131591],{},[940,131578,131579,131581],{},[985,131580,24388],{"align":24388},[985,131582,131583],{"align":24388},"不允许左侧有浮动元素（清除左侧浮动的影响）",[940,131585,131586,131588],{},[985,131587,73153],{"align":24388},[985,131589,131590],{"align":24388},"不允许右侧有浮动元素（清除右侧浮动的影响）",[940,131592,131593,131596],{},[985,131594,131595],{"align":24388},"both",[985,131597,131598],{"align":24388},"同时清除左右侧浮动的影响",[108,131600,131601],{},"法一",[108,131603,131604],{},"额外标签法也称为隔墙法",[108,131606,131607],{},"使用方式：",[108,131609,131610],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[24,131612,131613],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,131614,131615,131621,131631,131635,131641,131651],{"__ignoreMap":29},[34,131616,131617,131619],{"class":36,"line":37},[34,131618,131526],{"class":149},[34,131620,57],{"class":40},[34,131622,131623,131625,131627,131629],{"class":36,"line":51},[34,131624,131533],{"class":63},[34,131626,67],{"class":40},[34,131628,24388],{"class":63},[34,131630,73],{"class":40},[34,131632,131633],{"class":36,"line":60},[34,131634,241],{"class":40},[34,131636,131637,131639],{"class":36,"line":76},[34,131638,131548],{"class":149},[34,131640,57],{"class":40},[34,131642,131643,131645,131647,131649],{"class":36,"line":93},[34,131644,131533],{"class":63},[34,131646,67],{"class":40},[34,131648,73153],{"class":63},[34,131650,73],{"class":40},[34,131652,131653],{"class":36,"line":99},[34,131654,241],{"class":40},[108,131656,131657],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[108,131659,131660],{},"优点： 通俗易懂，书写方便",[108,131662,131663],{},"缺点： 添加许多无意义的标签，结构化较差",[108,131665,131666],{},"注意： 要求这个新的空标签必须是块级元素。",[108,131668,131669],{},"法二",[108,131671,131672],{},"父级添加overflow属性",[24,131674,131675],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,131676,131677,131683,131693,131697,131703,131713],{"__ignoreMap":29},[34,131678,131679,131681],{"class":36,"line":37},[34,131680,131526],{"class":149},[34,131682,57],{"class":40},[34,131684,131685,131687,131689,131691],{"class":36,"line":51},[34,131686,131533],{"class":63},[34,131688,67],{"class":40},[34,131690,24388],{"class":63},[34,131692,73],{"class":40},[34,131694,131695],{"class":36,"line":60},[34,131696,241],{"class":40},[34,131698,131699,131701],{"class":36,"line":76},[34,131700,131548],{"class":149},[34,131702,57],{"class":40},[34,131704,131705,131707,131709,131711],{"class":36,"line":93},[34,131706,131533],{"class":63},[34,131708,67],{"class":40},[34,131710,73153],{"class":63},[34,131712,73],{"class":40},[34,131714,131715],{"class":36,"line":99},[34,131716,241],{"class":40},[108,131718,131719],{},"overflow: hidden;",[108,131721,131722],{},"优点：代码简洁",[108,131724,131725],{},"缺点：无法显示溢出的部分",[108,131727,131728],{},"注意：是给父元素添加代码",[108,131730,131731],{},"法三",[108,131733,131734],{},"父级添加after伪元素",[108,131736,131737,131740],{},[131738,131739],"after",{}," 方式是额外标签法的升级版",[108,131742,131743],{},"使用的时候复制就可以",[24,131745,131746],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,131747,131748,131754,131764,131768,131774,131784],{"__ignoreMap":29},[34,131749,131750,131752],{"class":36,"line":37},[34,131751,131526],{"class":149},[34,131753,57],{"class":40},[34,131755,131756,131758,131760,131762],{"class":36,"line":51},[34,131757,131533],{"class":63},[34,131759,67],{"class":40},[34,131761,24388],{"class":63},[34,131763,73],{"class":40},[34,131765,131766],{"class":36,"line":60},[34,131767,241],{"class":40},[34,131769,131770,131772],{"class":36,"line":76},[34,131771,131548],{"class":149},[34,131773,57],{"class":40},[34,131775,131776,131778,131780,131782],{"class":36,"line":93},[34,131777,131533],{"class":63},[34,131779,67],{"class":40},[34,131781,73153],{"class":63},[34,131783,73],{"class":40},[34,131785,131786],{"class":36,"line":99},[34,131787,241],{"class":40},[108,131789,131790],{},"优点：没有增加标签，结构更简单",[108,131792,131793],{},"缺点：照顾低版本浏览器",[108,131795,131796],{},"代表网站： 百度、淘宝网、网易等",[108,131798,131799],{},"法四",[108,131801,131802],{},"父级添加双伪元素",[24,131804,131805],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,131806,131807,131813,131823,131827,131833,131843],{"__ignoreMap":29},[34,131808,131809,131811],{"class":36,"line":37},[34,131810,131526],{"class":149},[34,131812,57],{"class":40},[34,131814,131815,131817,131819,131821],{"class":36,"line":51},[34,131816,131533],{"class":63},[34,131818,67],{"class":40},[34,131820,24388],{"class":63},[34,131822,73],{"class":40},[34,131824,131825],{"class":36,"line":60},[34,131826,241],{"class":40},[34,131828,131829,131831],{"class":36,"line":76},[34,131830,131548],{"class":149},[34,131832,57],{"class":40},[34,131834,131835,131837,131839,131841],{"class":36,"line":93},[34,131836,131533],{"class":63},[34,131838,67],{"class":40},[34,131840,73153],{"class":63},[34,131842,73],{"class":40},[34,131844,131845],{"class":36,"line":99},[34,131846,241],{"class":40},[108,131848,131849],{},"优点：代码更简洁",[108,131851,131793],{},[108,131853,131854],{},"代表网站：小米、腾讯等",[14,131856,131858],{"id":131857},"_93-ps切图","9.3 PS切图",[19,131860,131862],{"id":131861},"_931-常见图片格式","9.3.1 常见图片格式",[934,131864,131865,131875],{},[937,131866,131867],{},[940,131868,131869,131872],{},[943,131870,131871],{"align":24388},"jpg图像格式",[943,131873,131874],{"align":24388},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[980,131876,131877,131885,131893],{},[940,131878,131879,131882],{},[985,131880,131881],{"align":24388},"gif图像格式",[985,131883,131884],{"align":24388},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[940,131886,131887,131890],{},[985,131888,131889],{"align":24388},"png图像格式",[985,131891,131892],{"align":24388},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[940,131894,131895,131898],{},[985,131896,131897],{"align":24388},"PSD图像格式",[985,131899,131900],{"align":24388},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[19,131902,131904],{"id":131903},"_932-图层切图","9.3.2 图层切图",[108,131906,131907],{},"最简单的切图方式：右击图层 → 导出 → 切片",[108,131909,131910],{},"按住shift选中两个图层->图层菜单->合并图层",[19,131912,131914],{"id":131913},"_933-切片切图","9.3.3 切片切图",[1800,131916,131917,131920],{},[755,131918,131919],{},"利用切片工具手动划出",[755,131921,131922],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[19,131924,131926],{"id":131925},"_934-切图步骤","9.3.4 切图步骤",[108,131928,131929],{},"用切片工具选中：",[2122,131931],{"style":127038,"src":131932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[108,131934,131935],{},"文件 -> 导出",[2122,131937],{"style":127038,"src":131938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[45,131940,131941],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":131943},[131944,131953,131957],{"id":130380,"depth":51,"text":130381,"children":131945},[131946,131947,131948,131949,131950,131951,131952],{"id":130405,"depth":60,"text":130406},{"id":130696,"depth":60,"text":130697},{"id":130825,"depth":60,"text":130826},{"id":131025,"depth":60,"text":131026},{"id":131067,"depth":60,"text":131068},{"id":131105,"depth":60,"text":131106},{"id":131195,"depth":60,"text":131196},{"id":131475,"depth":51,"text":131476,"children":131954},[131955,131956],{"id":131479,"depth":60,"text":131480},{"id":131486,"depth":60,"text":131487},{"id":131857,"depth":51,"text":131858,"children":131958},[131959,131960,131961,131962],{"id":131861,"depth":60,"text":131862},{"id":131903,"depth":60,"text":131904},{"id":131913,"depth":60,"text":131914},{"id":131925,"depth":60,"text":131926},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130372,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131969,"title":131970,"body":131971,"description":723,"extension":724,"meta":132612,"navigation":726,"path":132613,"seo":132614,"stem":132615,"__hash__":132616},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131972,"toc":132600},[131973,131976,131980,132006,132040,132044,132048,132051,132093,132100,132110,132118,132120,132123,132126,132129,132136,132150,132154,132157,132186,132190,132193,132207,132211,132214,132242,132246,132249,132275,132279,132284,132317,132322,132350,132354,132371,132417,132422,132466,132483,132590,132598],[10,131974,131970],{"id":131975},"_10-css规范与学成在线案例",[14,131977,131979],{"id":131978},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[752,131981,131982,131988,131994,132000],{},[755,131983,131984,131987],{},[111,131985,131986],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[755,131989,131990,131993],{},[111,131991,131992],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[755,131995,131996,131999],{},[111,131997,131998],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[755,132001,132002,132005],{},[111,132003,132004],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[24,132007,132008],{"className":196,"code":130417,"language":198,"meta":29,"style":29},[31,132009,132010,132014,132020,132036],{"__ignoreMap":29},[34,132011,132012],{"class":36,"line":37},[34,132013,130424],{"class":205},[34,132015,132016,132018],{"class":36,"line":51},[34,132017,52258],{"class":44},[34,132019,57],{"class":40},[34,132021,132022,132024,132026,132028,132030,132032,132034],{"class":36,"line":60},[34,132023,71528],{"class":63},[34,132025,67],{"class":40},[34,132027,1013],{"class":63},[34,132029,88],{"class":87},[34,132031,52168],{"class":63},[34,132033,130445],{"class":63},[34,132035,73],{"class":40},[34,132037,132038],{"class":36,"line":76},[34,132039,241],{"class":40},[14,132041,132043],{"id":132042},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[19,132045,132047],{"id":132046},"_1021-header头部制作","10.2.1 header头部制作",[2122,132049],{"style":127038,"src":132050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1800,132052,132053,132060,132067,132073,132080,132087],{},[755,132054,132055,132056,132059],{},"1号是版心盒子 ",[111,132057,132058],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[755,132061,132062,132063,132066],{},"版心盒子 里面包含 2号盒子 ",[111,132064,132065],{},"logo"," 图标",[755,132068,132069,132070,132072],{},"版心盒子 里面包含 3号盒子 ",[111,132071,54359],{}," 导航栏",[755,132074,132075,132076,132079],{},"版心盒子 里面包含 4号盒子 ",[111,132077,132078],{},"search"," 搜索框",[755,132081,132082,132083,132086],{},"版心盒子 里面包含 5号盒子 ",[111,132084,132085],{},"user"," 个人信息",[755,132088,132089,132090],{},"注意，要求里面的 ",[111,132091,132092],{},"4个子盒子 必须都浮动",[752,132094,132095],{},[755,132096,132097],{},[111,132098,132099],{},"导航栏注意点:",[108,132101,132102,132103,132106,132107],{},"实际开发中， ",[111,132104,132105],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[111,132108,132109],{},"用 li 包含链接(li+a)的做法",[1800,132111,132112,132115],{},[755,132113,132114],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[755,132116,132117],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[108,132119,9678],{},[108,132121,132122],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[108,132124,132125],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[108,132127,132128],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[752,132130,132131],{"start":51},[755,132132,132133],{},[111,132134,132135],{},"4号盒子search的细节：",[1800,132137,132138,132141,132144],{},[755,132139,132140],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[755,132142,132143],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[755,132145,132146,132149],{},[31,132147,132148],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[19,132151,132153],{"id":132152},"_1022-banner制作","10.2.2 banner制作",[2122,132155],{"style":127038,"src":132156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1800,132158,132159,132166,132172,132179],{},[755,132160,132161,132162,132165],{},"1号盒子是通栏的大盒子 ",[111,132163,132164],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[755,132167,132168,132169,132171],{},"2号盒子是版心 ",[111,132170,1590],{}," ， 要水平居中对齐",[755,132173,132174,132175,132178],{},"3号盒子版心内，左对齐 ",[111,132176,132177],{},"subnav"," 侧导航栏",[755,132180,132181,132182,132185],{},"4号盒子版心内，右对齐 ",[111,132183,132184],{},"course"," 课程",[19,132187,132189],{"id":132188},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2122,132191],{"style":127038,"src":132192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1800,132194,132195,132198,132201,132204],{},[755,132196,132197],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[755,132199,132200],{},"1号盒子是标题 H3 左侧浮动",[755,132202,132203],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[755,132205,132206],{},"3号盒子 右浮动 mod 修改",[19,132208,132210],{"id":132209},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2122,132212],{"style":127038,"src":132213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1800,132215,132216,132222,132229,132236,132239],{},[755,132217,132218,132219,132221],{},"1号盒子为最大的盒子 ",[111,132220,54360],{}," 版心水平居中对齐",[755,132223,132224,132225,132228],{},"2号盒子为上面部分 ",[111,132226,132227],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[755,132230,132231,132232,132235],{},"3号盒子为底下部分 ",[111,132233,132234],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[755,132237,132238],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[755,132240,132241],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[19,132243,132245],{"id":132244},"_1025-底部模块制作","10.2.5 底部模块制作",[2122,132247],{"style":127038,"src":132248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1800,132250,132251,132258,132261,132268],{},[755,132252,132253,132254,132257],{},"1号盒子通栏大盒子 底部 ",[111,132255,132256],{},"footer"," 给高度 底色是白色",[755,132259,132260],{},"2号盒子版心水平居中",[755,132262,132263,132264,132267],{},"3号盒子版权 ",[111,132265,132266],{},"copyright"," 左对齐",[755,132269,132270,132271,132274],{},"4号盒子 链接组 ",[111,132272,132273],{},"links"," 右对齐",[19,132276,132278],{"id":132277},"_1026-代码模块","10.2.6 代码模块",[752,132280,132281],{},[755,132282,132283],{},"html部分",[24,132285,132287],{"className":26,"code":132286,"language":28,"meta":29,"style":29},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[31,132288,132289],{"__ignoreMap":29},[34,132290,132291,132293,132295,132297,132299,132302,132305,132307,132310,132313,132315],{"class":36,"line":37},[34,132292,41],{"class":40},[34,132294,520],{"class":44},[34,132296,267],{"class":149},[34,132298,153],{"class":40},[34,132300,132301],{"class":156},"\"https:\u002F\u002Fexample.com\"",[34,132303,132304],{"class":149}," target",[34,132306,153],{"class":40},[34,132308,132309],{"class":156},"\"_blank\"",[34,132311,132312],{"class":40},">链接文字\u003C\u002F",[34,132314,520],{"class":44},[34,132316,48],{"class":40},[752,132318,132319],{"start":51},[755,132320,132321],{},"css部分",[24,132323,132324],{"className":26,"code":132286,"language":28,"meta":29,"style":29},[31,132325,132326],{"__ignoreMap":29},[34,132327,132328,132330,132332,132334,132336,132338,132340,132342,132344,132346,132348],{"class":36,"line":37},[34,132329,41],{"class":40},[34,132331,520],{"class":44},[34,132333,267],{"class":149},[34,132335,153],{"class":40},[34,132337,132301],{"class":156},[34,132339,132304],{"class":149},[34,132341,153],{"class":40},[34,132343,132309],{"class":156},[34,132345,132312],{"class":40},[34,132347,520],{"class":44},[34,132349,48],{"class":40},[19,132351,132353],{"id":132352},"_1027-收获","10.2.7 收获",[752,132355,132356,132359,132362,132365,132368],{},[755,132357,132358],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[755,132360,132361],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[755,132363,132364],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[755,132366,132367],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[755,132369,132370],{},"遗忘代码",[24,132372,132374],{"className":196,"code":132373,"language":198,"meta":29,"style":29},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[31,132375,132376,132398,132403,132413],{"__ignoreMap":29},[34,132377,132378,132380,132382,132384,132386,132388,132390,132392,132394,132396],{"class":36,"line":37},[34,132379,52258],{"class":44},[34,132381,13088],{"class":40},[34,132383,108],{"class":44},[34,132385,13088],{"class":40},[34,132387,10],{"class":44},[34,132389,13088],{"class":40},[34,132391,1800],{"class":44},[34,132393,13088],{"class":40},[34,132395,755],{"class":44},[34,132397,57],{"class":40},[34,132399,132400],{"class":36,"line":51},[34,132401,132402],{"class":205},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[34,132404,132405,132407,132409,132411],{"class":36,"line":60},[34,132406,128669],{"class":63},[34,132408,67],{"class":40},[34,132410,61512],{"class":63},[34,132412,73],{"class":40},[34,132414,132415],{"class":36,"line":76},[34,132416,241],{"class":40},[752,132418,132419],{"start":99},[755,132420,132421],{},"html引css的程序",[24,132423,132424],{"className":196,"code":132373,"language":198,"meta":29,"style":29},[31,132425,132426,132448,132452,132462],{"__ignoreMap":29},[34,132427,132428,132430,132432,132434,132436,132438,132440,132442,132444,132446],{"class":36,"line":37},[34,132429,52258],{"class":44},[34,132431,13088],{"class":40},[34,132433,108],{"class":44},[34,132435,13088],{"class":40},[34,132437,10],{"class":44},[34,132439,13088],{"class":40},[34,132441,1800],{"class":44},[34,132443,13088],{"class":40},[34,132445,755],{"class":44},[34,132447,57],{"class":40},[34,132449,132450],{"class":36,"line":51},[34,132451,132402],{"class":205},[34,132453,132454,132456,132458,132460],{"class":36,"line":60},[34,132455,128669],{"class":63},[34,132457,67],{"class":40},[34,132459,61512],{"class":63},[34,132461,73],{"class":40},[34,132463,132464],{"class":36,"line":76},[34,132465,241],{"class":40},[752,132467,132468,132471,132474,132477,132480],{"start":353},[755,132469,132470],{},"浮动的盒子不会有外边距合并问题",[755,132472,132473],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[755,132475,132476],{},"ctrl+g快速定位行；shift+alt多个光标",[755,132478,132479],{},"学习上方各个模块的选择器起名方法，以后就这样用",[755,132481,132482],{},"在写选择器时尽量写全一些，例如",[24,132484,132486],{"className":196,"code":132485,"language":198,"meta":29,"style":29},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[31,132487,132488,132493,132509,132514,132529,132534,132549,132554,132569,132574],{"__ignoreMap":29},[34,132489,132490],{"class":36,"line":37},[34,132491,132492],{"class":205},"\u002F* 静态定位（默认） *\u002F\n",[34,132494,132495,132498,132500,132502,132504,132507],{"class":36,"line":51},[34,132496,132497],{"class":149},".static",[34,132499,80437],{"class":40},[34,132501,129413],{"class":63},[34,132503,67],{"class":40},[34,132505,132506],{"class":63},"static",[34,132508,129983],{"class":40},[34,132510,132511],{"class":36,"line":60},[34,132512,132513],{"class":205},"\u002F* 相对定位 *\u002F\n",[34,132515,132516,132519,132521,132523,132525,132527],{"class":36,"line":76},[34,132517,132518],{"class":149},".relative",[34,132520,80437],{"class":40},[34,132522,129413],{"class":63},[34,132524,67],{"class":40},[34,132526,55408],{"class":63},[34,132528,129983],{"class":40},[34,132530,132531],{"class":36,"line":93},[34,132532,132533],{"class":205},"\u002F* 绝对定位 *\u002F\n",[34,132535,132536,132539,132541,132543,132545,132547],{"class":36,"line":99},[34,132537,132538],{"class":149},".absolute",[34,132540,80437],{"class":40},[34,132542,129413],{"class":63},[34,132544,67],{"class":40},[34,132546,55475],{"class":63},[34,132548,129983],{"class":40},[34,132550,132551],{"class":36,"line":353},[34,132552,132553],{"class":205},"\u002F* 固定定位 *\u002F\n",[34,132555,132556,132559,132561,132563,132565,132567],{"class":36,"line":359},[34,132557,132558],{"class":149},".fixed",[34,132560,80437],{"class":40},[34,132562,129413],{"class":63},[34,132564,67],{"class":40},[34,132566,86863],{"class":63},[34,132568,129983],{"class":40},[34,132570,132571],{"class":36,"line":579},[34,132572,132573],{"class":205},"\u002F* 粘性定位 *\u002F\n",[34,132575,132576,132579,132581,132583,132585,132588],{"class":36,"line":589},[34,132577,132578],{"class":149},".sticky",[34,132580,80437],{"class":40},[34,132582,129413],{"class":63},[34,132584,67],{"class":40},[34,132586,132587],{"class":63},"sticky",[34,132589,129983],{"class":40},[752,132591,132592,132595],{"start":613},[755,132593,132594],{},"一定要用好注释",[755,132596,132597],{},"浮动的盒子不会有外边距合并的问题",[45,132599,131941],{},{"title":29,"searchDepth":51,"depth":51,"links":132601},[132602,132603],{"id":131978,"depth":51,"text":131979},{"id":132042,"depth":51,"text":132043,"children":132604},[132605,132606,132607,132608,132609,132610,132611],{"id":132046,"depth":60,"text":132047},{"id":132152,"depth":60,"text":132153},{"id":132188,"depth":60,"text":132189},{"id":132209,"depth":60,"text":132210},{"id":132244,"depth":60,"text":132245},{"id":132277,"depth":60,"text":132278},{"id":132352,"depth":60,"text":132353},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131970,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132618,"title":132619,"body":132620,"description":723,"extension":724,"meta":134106,"navigation":726,"path":134107,"seo":134108,"stem":134109,"__hash__":134110},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132621,"toc":134098},[132622,132625,132629,132633,132644,132648,132665,132709,132742,132745,132762,132765,132768,132812,132816,132820,132823,132826,132830,132833,132844,132907,132948,132951,132966,133020,133028,133031,133042,133096,133122,133125,133138,133192,133224,133278,133301,133355,133358,133361,133368,133422,133443,133497,133500,133503,133588,133596,133653,133676,133680,133683,133701,133705,133724,133778,133816,133820,133823,133826,133848,133852,133860,133863,133868,133879,133882,133886,133900,133944,133947,133951,133954,133959,133985,133990,134067,134070,134074,134077,134080,134083,134086,134089,134092,134095],[10,132623,132619],{"id":132624},"_11-传统布局与定位体系",[14,132626,132628],{"id":132627},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[19,132630,132632],{"id":132631},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1800,132634,132635,132638,132641],{},[755,132636,132637],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[755,132639,132640],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[755,132642,132643],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[19,132645,132647],{"id":132646},"_1112-浮动","11.1.2 浮动",[1800,132649,132650,132653,132656,132659,132662],{},[755,132651,132652],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[755,132654,132655],{},"浮动可以改变元素标签默认的排列方式",[755,132657,132658],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[755,132660,132661],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[755,132663,132664],{},"在使用行内块转换时盒子之间是有空隙的",[24,132666,132667],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,132668,132669,132675,132685,132689,132695,132705],{"__ignoreMap":29},[34,132670,132671,132673],{"class":36,"line":37},[34,132672,131526],{"class":149},[34,132674,57],{"class":40},[34,132676,132677,132679,132681,132683],{"class":36,"line":51},[34,132678,131533],{"class":63},[34,132680,67],{"class":40},[34,132682,24388],{"class":63},[34,132684,73],{"class":40},[34,132686,132687],{"class":36,"line":60},[34,132688,241],{"class":40},[34,132690,132691,132693],{"class":36,"line":76},[34,132692,131548],{"class":149},[34,132694,57],{"class":40},[34,132696,132697,132699,132701,132703],{"class":36,"line":93},[34,132698,131533],{"class":63},[34,132700,67],{"class":40},[34,132702,73153],{"class":63},[34,132704,73],{"class":40},[34,132706,132707],{"class":36,"line":99},[34,132708,241],{"class":40},[934,132710,132711,132719],{},[937,132712,132713],{},[940,132714,132715,132717],{},[943,132716,127642],{"align":24388},[943,132718,28140],{"align":24388},[980,132720,132721,132728,132735],{},[940,132722,132723,132725],{},[985,132724,546],{"align":24388},[985,132726,132727],{"align":24388},"元素不浮动（默认值）",[940,132729,132730,132732],{},[985,132731,24388],{"align":24388},[985,132733,132734],{"align":24388},"元素向左浮动",[940,132736,132737,132739],{},[985,132738,73153],{"align":24388},[985,132740,132741],{"align":24388},"元素向右浮动",[108,132743,132744],{},"浮动重点：",[1800,132746,132747,132750,132753,132756,132759],{},[755,132748,132749],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[755,132751,132752],{},"浮动的元素会一行内显示并且元素顶部对齐",[755,132754,132755],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[755,132757,132758],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[755,132760,132761],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[108,132763,132764],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[108,132766,132767],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[24,132769,132770],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,132771,132772,132778,132788,132792,132798,132808],{"__ignoreMap":29},[34,132773,132774,132776],{"class":36,"line":37},[34,132775,131526],{"class":149},[34,132777,57],{"class":40},[34,132779,132780,132782,132784,132786],{"class":36,"line":51},[34,132781,131533],{"class":63},[34,132783,67],{"class":40},[34,132785,24388],{"class":63},[34,132787,73],{"class":40},[34,132789,132790],{"class":36,"line":60},[34,132791,241],{"class":40},[34,132793,132794,132796],{"class":36,"line":76},[34,132795,131548],{"class":149},[34,132797,57],{"class":40},[34,132799,132800,132802,132804,132806],{"class":36,"line":93},[34,132801,131533],{"class":63},[34,132803,67],{"class":40},[34,132805,73153],{"class":63},[34,132807,73],{"class":40},[34,132809,132810],{"class":36,"line":99},[34,132811,241],{"class":40},[19,132813,132815],{"id":132814},"_1113-定位","11.1.3 定位",[22650,132817,132819],{"id":132818},"_11131-使用场景","11.1.3.1 使用场景",[108,132821,132822],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[108,132824,132825],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22650,132827,132829],{"id":132828},"_11132-定位组成","11.1.3.2 定位组成",[108,132831,132832],{},"定位 = 定位模式 + 边偏移",[752,132834,132835],{},[755,132836,132837,132840,132841],{},[111,132838,132839],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[111,132842,132843],{},"定位模式",[24,132845,132847],{"className":196,"code":132846,"language":198,"meta":29,"style":29},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[31,132848,132849,132855,132869,132886,132903],{"__ignoreMap":29},[34,132850,132851,132853],{"class":36,"line":37},[34,132852,130901],{"class":149},[34,132854,57],{"class":40},[34,132856,132857,132860,132862,132864,132866],{"class":36,"line":51},[34,132858,132859],{"class":63},"  position",[34,132861,67],{"class":40},[34,132863,55408],{"class":63},[34,132865,130916],{"class":40},[34,132867,132868],{"class":205},"\u002F* 定位模式 *\u002F\n",[34,132870,132871,132874,132876,132878,132880,132883],{"class":36,"line":60},[34,132872,132873],{"class":63},"  top",[34,132875,67],{"class":40},[34,132877,1241],{"class":63},[34,132879,88],{"class":87},[34,132881,132882],{"class":40},";           ",[34,132884,132885],{"class":205},"\u002F* 边偏移：上 *\u002F\n",[34,132887,132888,132891,132893,132895,132897,132900],{"class":36,"line":76},[34,132889,132890],{"class":63},"  left",[34,132892,67],{"class":40},[34,132894,1495],{"class":63},[34,132896,88],{"class":87},[34,132898,132899],{"class":40},";          ",[34,132901,132902],{"class":205},"\u002F* 边偏移：左 *\u002F\n",[34,132904,132905],{"class":36,"line":93},[34,132906,241],{"class":40},[934,132908,132909,132918],{},[937,132910,132911],{},[940,132912,132913,132915],{},[943,132914,948],{"align":24388},[943,132916,132917],{"align":24388},"语义",[980,132919,132920,132927,132934,132941],{},[940,132921,132922,132924],{},[985,132923,132506],{"align":24388},[985,132925,132926],{"align":24388},"静态定位",[940,132928,132929,132931],{},[985,132930,55408],{"align":24388},[985,132932,132933],{"align":24388},"相对定位",[940,132935,132936,132938],{},[985,132937,55475],{"align":24388},[985,132939,132940],{"align":24388},"绝对定位",[940,132942,132943,132945],{},[985,132944,86863],{"align":24388},[985,132946,132947],{"align":24388},"固定定位",[108,132949,132950],{},"（1）静态定位：",[1800,132952,132953,132964],{},[755,132954,132955,132956,132959,132960,132963],{},"静态定位是元素的 ",[111,132957,132958],{},"默认定位方式"," ， ",[111,132961,132962],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[755,132965,5834],{},[24,132967,132968],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,132969,132970,132976,132988,133002,133016],{"__ignoreMap":29},[34,132971,132972,132974],{"class":36,"line":37},[34,132973,130901],{"class":149},[34,132975,57],{"class":40},[34,132977,132978,132980,132982,132984,132986],{"class":36,"line":51},[34,132979,132859],{"class":63},[34,132981,67],{"class":40},[34,132983,55408],{"class":63},[34,132985,130916],{"class":40},[34,132987,132868],{"class":205},[34,132989,132990,132992,132994,132996,132998,133000],{"class":36,"line":60},[34,132991,132873],{"class":63},[34,132993,67],{"class":40},[34,132995,1241],{"class":63},[34,132997,88],{"class":87},[34,132999,132882],{"class":40},[34,133001,132885],{"class":205},[34,133003,133004,133006,133008,133010,133012,133014],{"class":36,"line":76},[34,133005,132890],{"class":63},[34,133007,67],{"class":40},[34,133009,1495],{"class":63},[34,133011,88],{"class":87},[34,133013,132899],{"class":40},[34,133015,132902],{"class":205},[34,133017,133018],{"class":36,"line":93},[34,133019,241],{"class":40},[1800,133021,133022,133025],{},[755,133023,133024],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[755,133026,133027],{},"静态定位在布局时我们几乎不用的",[108,133029,133030],{},"（2）相对定位",[1800,133032,133033,133040],{},[755,133034,133035,133036,133039],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[111,133037,133038],{},"原来的位置"," 来说的（自恋型）",[755,133041,5834],{},[24,133043,133044],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,133045,133046,133052,133064,133078,133092],{"__ignoreMap":29},[34,133047,133048,133050],{"class":36,"line":37},[34,133049,130901],{"class":149},[34,133051,57],{"class":40},[34,133053,133054,133056,133058,133060,133062],{"class":36,"line":51},[34,133055,132859],{"class":63},[34,133057,67],{"class":40},[34,133059,55408],{"class":63},[34,133061,130916],{"class":40},[34,133063,132868],{"class":205},[34,133065,133066,133068,133070,133072,133074,133076],{"class":36,"line":60},[34,133067,132873],{"class":63},[34,133069,67],{"class":40},[34,133071,1241],{"class":63},[34,133073,88],{"class":87},[34,133075,132882],{"class":40},[34,133077,132885],{"class":205},[34,133079,133080,133082,133084,133086,133088,133090],{"class":36,"line":76},[34,133081,132890],{"class":63},[34,133083,67],{"class":40},[34,133085,1495],{"class":63},[34,133087,88],{"class":87},[34,133089,132899],{"class":40},[34,133091,132902],{"class":205},[34,133093,133094],{"class":36,"line":93},[34,133095,241],{"class":40},[1800,133097,133098],{},[755,133099,133100,133101,133103,133104,133106,133107,133110,133111,133114,133115,133117,133118,133121],{},"相对定位的特点：",[54362,133102],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54362,133105],{},"  ② ",[111,133108,133109],{},"原来"," 在标准流的 ",[111,133112,133113],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54362,133116],{},"  ③因此， ",[111,133119,133120],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[108,133123,133124],{},"（3）绝对定位",[1800,133126,133127,133136],{},[755,133128,133129,133131,133132,133135],{},[111,133130,132940],{}," 是元素在移动位置的时候，是相对于它 ",[111,133133,133134],{},"祖先元素"," 来说的（拼爹型）",[755,133137,5834],{},[24,133139,133140],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,133141,133142,133148,133160,133174,133188],{"__ignoreMap":29},[34,133143,133144,133146],{"class":36,"line":37},[34,133145,130901],{"class":149},[34,133147,57],{"class":40},[34,133149,133150,133152,133154,133156,133158],{"class":36,"line":51},[34,133151,132859],{"class":63},[34,133153,67],{"class":40},[34,133155,55408],{"class":63},[34,133157,130916],{"class":40},[34,133159,132868],{"class":205},[34,133161,133162,133164,133166,133168,133170,133172],{"class":36,"line":60},[34,133163,132873],{"class":63},[34,133165,67],{"class":40},[34,133167,1241],{"class":63},[34,133169,88],{"class":87},[34,133171,132882],{"class":40},[34,133173,132885],{"class":205},[34,133175,133176,133178,133180,133182,133184,133186],{"class":36,"line":76},[34,133177,132890],{"class":63},[34,133179,67],{"class":40},[34,133181,1495],{"class":63},[34,133183,88],{"class":87},[34,133185,132899],{"class":40},[34,133187,132902],{"class":205},[34,133189,133190],{"class":36,"line":93},[34,133191,241],{"class":40},[1800,133193,133194,133209,133218,133221],{},[755,133195,133196,133197,133199,133200,133202,133203,133205,133206,133208],{},"绝对定位的特点：",[54362,133198],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54362,133201],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54362,133204],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54362,133207],{},"  (4)固定定位",[755,133210,133211,133213,133214,133217],{},[111,133212,132947],{}," 是元素 ",[111,133215,133216],{},"固定于浏览器可视区的位置"," 。（认死理型）",[755,133219,133220],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[755,133222,133223],{},"语法:",[24,133225,133226],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,133227,133228,133234,133246,133260,133274],{"__ignoreMap":29},[34,133229,133230,133232],{"class":36,"line":37},[34,133231,130901],{"class":149},[34,133233,57],{"class":40},[34,133235,133236,133238,133240,133242,133244],{"class":36,"line":51},[34,133237,132859],{"class":63},[34,133239,67],{"class":40},[34,133241,55408],{"class":63},[34,133243,130916],{"class":40},[34,133245,132868],{"class":205},[34,133247,133248,133250,133252,133254,133256,133258],{"class":36,"line":60},[34,133249,132873],{"class":63},[34,133251,67],{"class":40},[34,133253,1241],{"class":63},[34,133255,88],{"class":87},[34,133257,132882],{"class":40},[34,133259,132885],{"class":205},[34,133261,133262,133264,133266,133268,133270,133272],{"class":36,"line":76},[34,133263,132890],{"class":63},[34,133265,67],{"class":40},[34,133267,1495],{"class":63},[34,133269,88],{"class":87},[34,133271,132899],{"class":40},[34,133273,132902],{"class":205},[34,133275,133276],{"class":36,"line":93},[34,133277,241],{"class":40},[1800,133279,133280,133289],{},[755,133281,133282,133283,133285,133286,133288],{},"特点:",[54362,133284],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54362,133287],{},"  ②固定定位不再占有原先的位置,完全脱标",[755,133290,133291,133292,133294,133295,133297,133298,133300],{},"固定在版心位置的方法:",[54362,133293],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54362,133296],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54362,133299],{},"  实例：",[24,133302,133303],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,133304,133305,133311,133323,133337,133351],{"__ignoreMap":29},[34,133306,133307,133309],{"class":36,"line":37},[34,133308,130901],{"class":149},[34,133310,57],{"class":40},[34,133312,133313,133315,133317,133319,133321],{"class":36,"line":51},[34,133314,132859],{"class":63},[34,133316,67],{"class":40},[34,133318,55408],{"class":63},[34,133320,130916],{"class":40},[34,133322,132868],{"class":205},[34,133324,133325,133327,133329,133331,133333,133335],{"class":36,"line":60},[34,133326,132873],{"class":63},[34,133328,67],{"class":40},[34,133330,1241],{"class":63},[34,133332,88],{"class":87},[34,133334,132882],{"class":40},[34,133336,132885],{"class":205},[34,133338,133339,133341,133343,133345,133347,133349],{"class":36,"line":76},[34,133340,132890],{"class":63},[34,133342,67],{"class":40},[34,133344,1495],{"class":63},[34,133346,88],{"class":87},[34,133348,132899],{"class":40},[34,133350,132902],{"class":205},[34,133352,133353],{"class":36,"line":93},[34,133354,241],{"class":40},[2122,133356],{"style":127038,"src":133357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[108,133359,133360],{},"(5)粘性定位",[1800,133362,133363,133366],{},[755,133364,133365],{},"粘性定位可以被认为是相对定位和固定定位的混合",[755,133367,5834],{},[24,133369,133370],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,133371,133372,133378,133390,133404,133418],{"__ignoreMap":29},[34,133373,133374,133376],{"class":36,"line":37},[34,133375,130901],{"class":149},[34,133377,57],{"class":40},[34,133379,133380,133382,133384,133386,133388],{"class":36,"line":51},[34,133381,132859],{"class":63},[34,133383,67],{"class":40},[34,133385,55408],{"class":63},[34,133387,130916],{"class":40},[34,133389,132868],{"class":205},[34,133391,133392,133394,133396,133398,133400,133402],{"class":36,"line":60},[34,133393,132873],{"class":63},[34,133395,67],{"class":40},[34,133397,1241],{"class":63},[34,133399,88],{"class":87},[34,133401,132882],{"class":40},[34,133403,132885],{"class":205},[34,133405,133406,133408,133410,133412,133414,133416],{"class":36,"line":76},[34,133407,132890],{"class":63},[34,133409,67],{"class":40},[34,133411,1495],{"class":63},[34,133413,88],{"class":87},[34,133415,132899],{"class":40},[34,133417,132902],{"class":205},[34,133419,133420],{"class":36,"line":93},[34,133421,241],{"class":40},[1800,133423,133424],{},[755,133425,133426,133427,133429,133430,133432,133433,133435,133436,133439,133440,133442],{},"粘性定位的特点：",[54362,133428],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54362,133431],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54362,133434],{},"  ③必须添加 top 、left、right、bottom ",[111,133437,133438],{},"其中一个"," 才有效",[54362,133441],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[24,133444,133445],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,133446,133447,133453,133465,133479,133493],{"__ignoreMap":29},[34,133448,133449,133451],{"class":36,"line":37},[34,133450,130901],{"class":149},[34,133452,57],{"class":40},[34,133454,133455,133457,133459,133461,133463],{"class":36,"line":51},[34,133456,132859],{"class":63},[34,133458,67],{"class":40},[34,133460,55408],{"class":63},[34,133462,130916],{"class":40},[34,133464,132868],{"class":205},[34,133466,133467,133469,133471,133473,133475,133477],{"class":36,"line":60},[34,133468,132873],{"class":63},[34,133470,67],{"class":40},[34,133472,1241],{"class":63},[34,133474,88],{"class":87},[34,133476,132882],{"class":40},[34,133478,132885],{"class":205},[34,133480,133481,133483,133485,133487,133489,133491],{"class":36,"line":76},[34,133482,132890],{"class":63},[34,133484,67],{"class":40},[34,133486,1495],{"class":63},[34,133488,88],{"class":87},[34,133490,132899],{"class":40},[34,133492,132902],{"class":205},[34,133494,133495],{"class":36,"line":93},[34,133496,241],{"class":40},[2122,133498],{"style":127038,"src":133499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[108,133501,133502],{},"(6)总结",[934,133504,133505,133520],{},[937,133506,133507],{},[940,133508,133509,133511,133514,133517],{},[943,133510,132843],{"align":24388},[943,133512,133513],{"align":24388},"是否脱标",[943,133515,133516],{"align":24388},"移动位置",[943,133518,133519],{"align":24388},"是否常用",[980,133521,133522,133535,133549,133563,133576],{},[940,133523,133524,133527,133529,133532],{},[985,133525,133526],{"align":24388},"Static 静态定位",[985,133528,105308],{"align":24388},[985,133530,133531],{"align":24388},"不能使用边偏移",[985,133533,133534],{"align":24388},"很少",[940,133536,133537,133540,133543,133546],{},[985,133538,133539],{"align":24388},"Relative 相对定位",[985,133541,133542],{"align":24388},"否(占有位置)",[985,133544,133545],{"align":24388},"相对于自身位置移动",[985,133547,133548],{"align":24388},"基本单独使用",[940,133550,133551,133554,133557,133560],{},[985,133552,133553],{"align":24388},"Absolute 绝对定位",[985,133555,133556],{"align":24388},"是(不占有位置)",[985,133558,133559],{"align":24388},"带有定位的父级",[985,133561,133562],{"align":24388},"要和定位父级元素搭配使用",[940,133564,133565,133568,133570,133573],{},[985,133566,133567],{"align":24388},"Fixed 固定定位",[985,133569,133556],{"align":24388},[985,133571,133572],{"align":24388},"浏览器可视区",[985,133574,133575],{"align":24388},"单独使用,不需要父级",[940,133577,133578,133581,133583,133585],{},[985,133579,133580],{"align":24388},"Sticky 粘性定位",[985,133582,133542],{"align":24388},[985,133584,133572],{"align":24388},[985,133586,133587],{"align":24388},"当前阶段少",[752,133589,133590],{"start":51},[755,133591,133592,133595],{},[111,133593,133594],{},"边偏移"," 则决定了该元素的最终位置",[934,133597,133598,133609],{},[937,133599,133600],{},[940,133601,133602,133605,133607],{},[943,133603,133604],{"align":24388},"边偏移属性",[943,133606,28143],{"align":24388},[943,133608,28140],{"align":24388},[980,133610,133611,133622,133633,133643],{},[940,133612,133613,133616,133619],{},[985,133614,133615],{"align":24388},"top",[985,133617,133618],{"align":24388},"top: 80px;",[985,133620,133621],{"align":24388},"顶端偏移量，定义元素相对于父元素上边线的距离",[940,133623,133624,133627,133630],{},[985,133625,133626],{"align":24388},"bottom",[985,133628,133629],{"align":24388},"bottom: 80px ;",[985,133631,133632],{"align":24388},"底部偏移量，定义元素相对于其父元素下边线的距离",[940,133634,133635,133637,133640],{},[985,133636,24388],{"align":24388},[985,133638,133639],{"align":24388},"left: 80px ;",[985,133641,133642],{"align":24388},"左侧偏移量，定义元素相对于其父元素左边线的距离",[940,133644,133645,133647,133650],{},[985,133646,73153],{"align":24388},[985,133648,133649],{"align":24388},"right: 80px ;",[985,133651,133652],{"align":24388},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1800,133654,133655],{},[755,133656,9678,133657,133659,133660,133662,133663,133665,133666,133669,133670,133672,133673,133675],{},[54362,133658],{},"  ① ",[111,133661,133594],{}," 需要和 ",[111,133664,132843],{}," 联合使用， ",[111,133667,133668],{},"单独使用无效"," ；",[54362,133671],{},"  ②top和bottom不要同时使用",[54362,133674],{},"  ③left和right不要同时使用",[22650,133677,133679],{"id":133678},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[108,133681,133682],{},"子级是绝对定位的话，父级要用相对定位",[1800,133684,133685,133688,133691,133694],{},[755,133686,133687],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[755,133689,133690],{},"父盒子需要加定位限制子盒子在父盒子内显示",[755,133692,133693],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[755,133695,133696,133697,133700],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[111,133698,133699],{},"子绝父绝"," 也会遇到",[22650,133702,133704],{"id":133703},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1800,133706,133707,133722],{},[755,133708,133709,133710,133713,133714,133717,133718,133721],{},"在使用 ",[111,133711,133712],{},"定位"," 布局时，可能会 ",[111,133715,133716],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[111,133719,133720],{},"z-index"," 来控制盒子的前后次序 (z轴)",[755,133723,5834],{},[24,133725,133726],{"className":196,"code":132846,"language":198,"meta":29,"style":29},[31,133727,133728,133734,133746,133760,133774],{"__ignoreMap":29},[34,133729,133730,133732],{"class":36,"line":37},[34,133731,130901],{"class":149},[34,133733,57],{"class":40},[34,133735,133736,133738,133740,133742,133744],{"class":36,"line":51},[34,133737,132859],{"class":63},[34,133739,67],{"class":40},[34,133741,55408],{"class":63},[34,133743,130916],{"class":40},[34,133745,132868],{"class":205},[34,133747,133748,133750,133752,133754,133756,133758],{"class":36,"line":60},[34,133749,132873],{"class":63},[34,133751,67],{"class":40},[34,133753,1241],{"class":63},[34,133755,88],{"class":87},[34,133757,132882],{"class":40},[34,133759,132885],{"class":205},[34,133761,133762,133764,133766,133768,133770,133772],{"class":36,"line":76},[34,133763,132890],{"class":63},[34,133765,67],{"class":40},[34,133767,1495],{"class":63},[34,133769,88],{"class":87},[34,133771,132899],{"class":40},[34,133773,132902],{"class":205},[34,133775,133776],{"class":36,"line":93},[34,133777,241],{"class":40},[1800,133779,133780],{},[755,133781,133782,133783,133659,133785,133787,133788,486,133791,83169,133794,133796,133797,133799,133800,133803,133804,133669,133807,133809,133810,133813,133815],{},"z-index的特性",[54362,133784],{},[111,133786,127642],{}," ： ",[111,133789,133790],{},"正整数",[111,133792,133793],{},"负整数",[111,133795,987],{}," ，默认值是 0，数值越大，盒子越靠上；",[54362,133798],{},"  ②如果 ",[111,133801,133802],{},"属性值相同"," ，则按照书写顺序， ",[111,133805,133806],{},"后来居上",[54362,133808],{},"  ③数字后面 ",[111,133811,133812],{},"不能加单位",[54362,133814],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22650,133817,133819],{"id":133818},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[108,133821,133822],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[108,133824,133825],{},"方法:",[1800,133827,133828,133838],{},[755,133829,133830,133831,133834,133835],{},"left: 50%; 让 ",[111,133832,133833],{},"盒子的左侧"," 移动到 ",[111,133836,133837],{},"父级元素的水平中心位置",[755,133839,133840,133841,133844,133845],{},"margin-left: -100px; 让盒子 ",[111,133842,133843],{},"向左"," 移动 ",[111,133846,133847],{},"自身宽度的一半",[22650,133849,133851],{"id":133850},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[752,133853,133854,133857],{},[755,133855,133856],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[755,133858,133859],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[108,133861,133862],{},"也就是说绝对定位和固定定位和浮动类似",[752,133864,133865],{"start":60},[755,133866,133867],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1800,133869,133870,133873,133876],{},[755,133871,133872],{},"可以用inline-block 转换为行内块",[755,133874,133875],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[755,133877,133878],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[108,133880,133881],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22650,133883,133885],{"id":133884},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[752,133887,133888,133891,133894,133897],{},[755,133889,133890],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[755,133892,133893],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[755,133895,133896],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[755,133898,133899],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[24,133901,133902],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,133903,133904,133910,133920,133924,133930,133940],{"__ignoreMap":29},[34,133905,133906,133908],{"class":36,"line":37},[34,133907,131526],{"class":149},[34,133909,57],{"class":40},[34,133911,133912,133914,133916,133918],{"class":36,"line":51},[34,133913,131533],{"class":63},[34,133915,67],{"class":40},[34,133917,24388],{"class":63},[34,133919,73],{"class":40},[34,133921,133922],{"class":36,"line":60},[34,133923,241],{"class":40},[34,133925,133926,133928],{"class":36,"line":76},[34,133927,131548],{"class":149},[34,133929,57],{"class":40},[34,133931,133932,133934,133936,133938],{"class":36,"line":93},[34,133933,131533],{"class":63},[34,133935,67],{"class":40},[34,133937,73153],{"class":63},[34,133939,73],{"class":40},[34,133941,133942],{"class":36,"line":99},[34,133943,241],{"class":40},[2122,133945],{"style":127038,"src":133946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22650,133948,133950],{"id":133949},"_11138-轮播图","11.1.3.8 轮播图",[2122,133952],{"style":127038,"src":133953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[752,133955,133956],{},[755,133957,133958],{},"制作顺序:",[1800,133960,133961,133964,133967,133976],{},[755,133962,133963],{},"大盒子我们类名为： tb-promo 淘宝广告",[755,133965,133966],{},"里面先放一张图片",[755,133968,133969,133970,133972,133973,133975],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54362,133971],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54362,133974],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[755,133977,133978,133979,133981,133982,133984],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54362,133980],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54362,133983],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[752,133986,133987],{"start":51},[755,133988,133989],{},"代码模块",[24,133991,133993],{"className":196,"code":133992,"language":198,"meta":29,"style":29},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[31,133994,133995,134000,134007,134017,134027,134037,134041,134046,134053,134063],{"__ignoreMap":29},[34,133996,133997],{"class":36,"line":37},[34,133998,133999],{"class":205},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[34,134001,134002,134005],{"class":36,"line":51},[34,134003,134004],{"class":149},".son",[34,134006,57],{"class":40},[34,134008,134009,134011,134013,134015],{"class":36,"line":60},[34,134010,132859],{"class":63},[34,134012,67],{"class":40},[34,134014,55475],{"class":63},[34,134016,73],{"class":40},[34,134018,134019,134021,134023,134025],{"class":36,"line":76},[34,134020,132873],{"class":63},[34,134022,67],{"class":40},[34,134024,987],{"class":63},[34,134026,73],{"class":40},[34,134028,134029,134031,134033,134035],{"class":36,"line":93},[34,134030,132890],{"class":63},[34,134032,67],{"class":40},[34,134034,987],{"class":63},[34,134036,73],{"class":40},[34,134038,134039],{"class":36,"line":99},[34,134040,241],{"class":40},[34,134042,134043],{"class":36,"line":353},[34,134044,134045],{"class":205},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[34,134047,134048,134051],{"class":36,"line":359},[34,134049,134050],{"class":149},".father",[34,134052,57],{"class":40},[34,134054,134055,134057,134059,134061],{"class":36,"line":579},[34,134056,132859],{"class":63},[34,134058,67],{"class":40},[34,134060,55408],{"class":63},[34,134062,73],{"class":40},[34,134064,134065],{"class":36,"line":589},[34,134066,241],{"class":40},[108,134068,134069],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[19,134071,134073],{"id":134072},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2122,134075],{"style":127038,"src":134076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[108,134078,134079],{},"✨ 黄金口诀：",[108,134081,134082],{},"\"TOP正下负上，LEFT正右负左\"",[108,134084,134085],{},"\"RIGHT正左负右，BOTTOM正上负下",[108,134087,134088],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[108,134090,134091],{},"✨ 简单记：",[108,134093,134094],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[45,134096,134097],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":134099},[134100],{"id":132627,"depth":51,"text":132628,"children":134101},[134102,134103,134104,134105],{"id":132631,"depth":60,"text":132632},{"id":132646,"depth":60,"text":132647},{"id":132814,"depth":60,"text":132815},{"id":134072,"depth":60,"text":134073},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132619,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134112,"title":134113,"body":134114,"description":723,"extension":724,"meta":135537,"navigation":726,"path":135538,"seo":135539,"stem":135540,"__hash__":135541},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134115,"toc":135516},[134116,134119,134123,134131,134135,134140,134148,134160,134164,134169,134177,134188,134192,134197,134238,134246,134250,134253,134256,134259,134353,134356,134450,134453,134547,134550,134553,134588,134591,134594,134624,134627,134630,134633,134636,134639,134642,134645,134715,134718,134722,134726,134767,134771,134777,134780,134783,134787,134790,134793,134796,134877,134880,134883,134887,134891,134894,134897,134900,134903,134906,134912,134921,134925,134944,134948,134958,134961,134964,134967,134970,134973,134976,134979,134982,134991,134995,135004,135007,135012,135065,135070,135236,135239,135242,135247,135250,135253,135256,135259,135264,135412,135415,135418,135423,135426,135431,135465,135468,135471,135475,135478,135485,135488,135491,135494,135497,135500,135503,135506,135510,135513],[10,134117,134113],{"id":134118},"_12-显示隐藏与图形资源",[14,134120,134122],{"id":134121},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1800,134124,134125,134128],{},[755,134126,134127],{},"目的:让一个元素在页面中消失或者显示出来",[755,134129,134130],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[19,134132,134134],{"id":134133},"_1211-display-显示","12.1.1 display 显示",[752,134136,134137],{},[755,134138,134139],{},"display 设置或检索对象是否及如何显示",[1800,134141,134142,134145],{},[755,134143,134144],{},"display: none;隐藏对象",[755,134146,134147],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[752,134149,134150,134157],{"start":51},[755,134151,134152,134153,134156],{},"特点： display 隐藏元素后， ",[111,134154,134155],{},"不再占"," 有原来的位置",[755,134158,134159],{},"在js中使用非常的广泛",[19,134161,134163],{"id":134162},"_1212-visibility可见性","12.1.2 visibility可见性",[752,134165,134166],{},[755,134167,134168],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1800,134170,134171,134174],{},[755,134172,134173],{},"visibility： visible；元素可见",[755,134175,134176],{},"visibility：hidden；元素隐藏",[752,134178,134179,134182,134185],{"start":51},[755,134180,134181],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[755,134183,134184],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[755,134186,134187],{},"隐藏后继续占有原有位置",[19,134189,134191],{"id":134190},"_1213-overflow溢出","12.1.3 overflow溢出",[1800,134193,134194],{},[755,134195,134196],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[934,134198,134199,134207],{},[937,134200,134201],{},[940,134202,134203,134205],{},[943,134204,127642],{"align":24388},[943,134206,28140],{"align":24388},[980,134208,134209,134217,134224,134231],{},[940,134210,134211,134214],{},[985,134212,134213],{"align":24388},"visible",[985,134215,134216],{"align":24388},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[940,134218,134219,134221],{},[985,134220,62355],{"align":24388},[985,134222,134223],{"align":24388},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[940,134225,134226,134228],{},[985,134227,129473],{"align":24388},[985,134229,134230],{"align":24388},"不管超出内容否，总是显示滚动条",[940,134232,134233,134235],{},[985,134234,73294],{"align":24388},[985,134236,134237],{"align":24388},"超出自动显示滚动条，不超出不显示滚动条",[1800,134239,134240,134243],{},[755,134241,134242],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[755,134244,134245],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[19,134247,134249],{"id":134248},"_1214-案例收获","12.1.4 案例收获",[2122,134251],{"style":127038,"src":134252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[108,134254,134255],{},"问题：没做出来动态效果，使用hover没实现",[108,134257,134258],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[24,134260,134261],{"className":196,"code":132485,"language":198,"meta":29,"style":29},[31,134262,134263,134267,134281,134285,134299,134303,134317,134321,134335,134339],{"__ignoreMap":29},[34,134264,134265],{"class":36,"line":37},[34,134266,132492],{"class":205},[34,134268,134269,134271,134273,134275,134277,134279],{"class":36,"line":51},[34,134270,132497],{"class":149},[34,134272,80437],{"class":40},[34,134274,129413],{"class":63},[34,134276,67],{"class":40},[34,134278,132506],{"class":63},[34,134280,129983],{"class":40},[34,134282,134283],{"class":36,"line":60},[34,134284,132513],{"class":205},[34,134286,134287,134289,134291,134293,134295,134297],{"class":36,"line":76},[34,134288,132518],{"class":149},[34,134290,80437],{"class":40},[34,134292,129413],{"class":63},[34,134294,67],{"class":40},[34,134296,55408],{"class":63},[34,134298,129983],{"class":40},[34,134300,134301],{"class":36,"line":93},[34,134302,132533],{"class":205},[34,134304,134305,134307,134309,134311,134313,134315],{"class":36,"line":99},[34,134306,132538],{"class":149},[34,134308,80437],{"class":40},[34,134310,129413],{"class":63},[34,134312,67],{"class":40},[34,134314,55475],{"class":63},[34,134316,129983],{"class":40},[34,134318,134319],{"class":36,"line":353},[34,134320,132553],{"class":205},[34,134322,134323,134325,134327,134329,134331,134333],{"class":36,"line":359},[34,134324,132558],{"class":149},[34,134326,80437],{"class":40},[34,134328,129413],{"class":63},[34,134330,67],{"class":40},[34,134332,86863],{"class":63},[34,134334,129983],{"class":40},[34,134336,134337],{"class":36,"line":579},[34,134338,132573],{"class":205},[34,134340,134341,134343,134345,134347,134349,134351],{"class":36,"line":589},[34,134342,132578],{"class":149},[34,134344,80437],{"class":40},[34,134346,129413],{"class":63},[34,134348,67],{"class":40},[34,134350,132587],{"class":63},[34,134352,129983],{"class":40},[108,134354,134355],{},"完整代码：",[24,134357,134358],{"className":196,"code":132485,"language":198,"meta":29,"style":29},[31,134359,134360,134364,134378,134382,134396,134400,134414,134418,134432,134436],{"__ignoreMap":29},[34,134361,134362],{"class":36,"line":37},[34,134363,132492],{"class":205},[34,134365,134366,134368,134370,134372,134374,134376],{"class":36,"line":51},[34,134367,132497],{"class":149},[34,134369,80437],{"class":40},[34,134371,129413],{"class":63},[34,134373,67],{"class":40},[34,134375,132506],{"class":63},[34,134377,129983],{"class":40},[34,134379,134380],{"class":36,"line":60},[34,134381,132513],{"class":205},[34,134383,134384,134386,134388,134390,134392,134394],{"class":36,"line":76},[34,134385,132518],{"class":149},[34,134387,80437],{"class":40},[34,134389,129413],{"class":63},[34,134391,67],{"class":40},[34,134393,55408],{"class":63},[34,134395,129983],{"class":40},[34,134397,134398],{"class":36,"line":93},[34,134399,132533],{"class":205},[34,134401,134402,134404,134406,134408,134410,134412],{"class":36,"line":99},[34,134403,132538],{"class":149},[34,134405,80437],{"class":40},[34,134407,129413],{"class":63},[34,134409,67],{"class":40},[34,134411,55475],{"class":63},[34,134413,129983],{"class":40},[34,134415,134416],{"class":36,"line":353},[34,134417,132553],{"class":205},[34,134419,134420,134422,134424,134426,134428,134430],{"class":36,"line":359},[34,134421,132558],{"class":149},[34,134423,80437],{"class":40},[34,134425,129413],{"class":63},[34,134427,67],{"class":40},[34,134429,86863],{"class":63},[34,134431,129983],{"class":40},[34,134433,134434],{"class":36,"line":579},[34,134435,132573],{"class":205},[34,134437,134438,134440,134442,134444,134446,134448],{"class":36,"line":589},[34,134439,132578],{"class":149},[34,134441,80437],{"class":40},[34,134443,129413],{"class":63},[34,134445,67],{"class":40},[34,134447,132587],{"class":63},[34,134449,129983],{"class":40},[108,134451,134452],{},"分布思路重点详解：",[24,134454,134455],{"className":196,"code":132485,"language":198,"meta":29,"style":29},[31,134456,134457,134461,134475,134479,134493,134497,134511,134515,134529,134533],{"__ignoreMap":29},[34,134458,134459],{"class":36,"line":37},[34,134460,132492],{"class":205},[34,134462,134463,134465,134467,134469,134471,134473],{"class":36,"line":51},[34,134464,132497],{"class":149},[34,134466,80437],{"class":40},[34,134468,129413],{"class":63},[34,134470,67],{"class":40},[34,134472,132506],{"class":63},[34,134474,129983],{"class":40},[34,134476,134477],{"class":36,"line":60},[34,134478,132513],{"class":205},[34,134480,134481,134483,134485,134487,134489,134491],{"class":36,"line":76},[34,134482,132518],{"class":149},[34,134484,80437],{"class":40},[34,134486,129413],{"class":63},[34,134488,67],{"class":40},[34,134490,55408],{"class":63},[34,134492,129983],{"class":40},[34,134494,134495],{"class":36,"line":93},[34,134496,132533],{"class":205},[34,134498,134499,134501,134503,134505,134507,134509],{"class":36,"line":99},[34,134500,132538],{"class":149},[34,134502,80437],{"class":40},[34,134504,129413],{"class":63},[34,134506,67],{"class":40},[34,134508,55475],{"class":63},[34,134510,129983],{"class":40},[34,134512,134513],{"class":36,"line":353},[34,134514,132553],{"class":205},[34,134516,134517,134519,134521,134523,134525,134527],{"class":36,"line":359},[34,134518,132558],{"class":149},[34,134520,80437],{"class":40},[34,134522,129413],{"class":63},[34,134524,67],{"class":40},[34,134526,86863],{"class":63},[34,134528,129983],{"class":40},[34,134530,134531],{"class":36,"line":579},[34,134532,132573],{"class":205},[34,134534,134535,134537,134539,134541,134543,134545],{"class":36,"line":589},[34,134536,132578],{"class":149},[34,134538,80437],{"class":40},[34,134540,129413],{"class":63},[34,134542,67],{"class":40},[34,134544,132587],{"class":63},[34,134546,129983],{"class":40},[2122,134548],{"style":127038,"src":134549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[108,134551,134552],{},"图片太大，盒子太小，此时需要修改图片的大小",[24,134554,134556],{"className":26,"code":134555,"language":28,"meta":29,"style":29},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[31,134557,134558],{"__ignoreMap":29},[34,134559,134560,134562,134564,134566,134568,134571,134573,134575,134578,134581,134583,134586],{"class":36,"line":37},[34,134561,41],{"class":40},[34,134563,2122],{"class":44},[34,134565,55882],{"class":149},[34,134567,153],{"class":40},[34,134569,134570],{"class":156},"\"images\u002Fpic.jpg\"",[34,134572,55890],{"class":149},[34,134574,153],{"class":40},[34,134576,134577],{"class":156},"\"描述文字\"",[34,134579,134580],{"class":149}," title",[34,134582,153],{"class":40},[34,134584,134585],{"class":156},"\"悬停提示\"",[34,134587,48],{"class":40},[2122,134589],{"style":127038,"src":134590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[108,134592,134593],{},"制造遮罩层",[24,134595,134596],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,134597,134598],{"__ignoreMap":29},[34,134599,134600,134602,134604,134606,134608,134610,134612,134614,134616,134618,134620,134622],{"class":36,"line":37},[34,134601,41],{"class":40},[34,134603,2122],{"class":44},[34,134605,55882],{"class":149},[34,134607,153],{"class":40},[34,134609,134570],{"class":156},[34,134611,55890],{"class":149},[34,134613,153],{"class":40},[34,134615,134577],{"class":156},[34,134617,134580],{"class":149},[34,134619,153],{"class":40},[34,134621,134585],{"class":156},[34,134623,48],{"class":40},[108,134625,134626],{},"此时是这样的为标准流",[2122,134628],{"style":127038,"src":134629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[108,134631,134632],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[108,134634,134635],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[108,134637,134638],{},"让他在中间，用center(background-position)",[108,134640,134641],{},"将需要变的尽可能放到一个盒子中",[108,134643,134644],{},"放大盒子上内部盒子发生变化",[24,134646,134648],{"className":196,"code":134647,"language":198,"meta":29,"style":29},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[31,134649,134650,134656,134666,134670,134677,134687,134699,134711],{"__ignoreMap":29},[34,134651,134652,134654],{"class":36,"line":37},[34,134653,390],{"class":149},[34,134655,57],{"class":40},[34,134657,134658,134660,134662,134664],{"class":36,"line":51},[34,134659,132859],{"class":63},[34,134661,67],{"class":40},[34,134663,55408],{"class":63},[34,134665,73],{"class":40},[34,134667,134668],{"class":36,"line":60},[34,134669,241],{"class":40},[34,134671,134672,134675],{"class":36,"line":76},[34,134673,134674],{"class":149},".child",[34,134676,57],{"class":40},[34,134678,134679,134681,134683,134685],{"class":36,"line":93},[34,134680,132859],{"class":63},[34,134682,67],{"class":40},[34,134684,55475],{"class":63},[34,134686,73],{"class":40},[34,134688,134689,134691,134693,134695,134697],{"class":36,"line":99},[34,134690,132873],{"class":63},[34,134692,67],{"class":40},[34,134694,1451],{"class":63},[34,134696,1123],{"class":87},[34,134698,73],{"class":40},[34,134700,134701,134703,134705,134707,134709],{"class":36,"line":353},[34,134702,132890],{"class":63},[34,134704,67],{"class":40},[34,134706,1451],{"class":63},[34,134708,1123],{"class":87},[34,134710,73],{"class":40},[34,134712,134713],{"class":36,"line":359},[34,134714,241],{"class":40},[108,134716,134717],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134719,134721],{"id":134720},"_122-精灵图","12.2 精灵图",[19,134723,134725],{"id":134724},"_1221-理解","12.2.1 理解",[752,134727,134728,134746],{},[755,134729,134730,134731,132959,134734,134737,134738,134741,134742,134745],{},"目的： ",[111,134732,134733],{},"为了有效地减少服务器接收和发送请求的次数",[111,134735,134736],{},"提高"," 页面的 ",[111,134739,134740],{},"加载速度"," ，出现了 ",[111,134743,134744],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[755,134747,134748,134749,134751,134752,134754,134755,134757,134758,134760,134761,134763,134764,134766],{},"使用精灵图核心：",[54362,134750],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54362,134753],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54362,134756],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54362,134759],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54362,134762],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54362,134765],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[19,134768,134770],{"id":134769},"_1222-扒图","12.2.2 扒图",[24,134772,134775],{"className":134773,"code":134774,"language":5840},[5838],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[31,134776,134774],{"__ignoreMap":29},[2122,134778],{"style":127038,"src":134779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2122,134781],{"style":127038,"src":134782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[19,134784,134786],{"id":134785},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2122,134788],{"style":127038,"src":134789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[108,134791,134792],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2122,134794],{"style":127038,"src":134795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[24,134797,134799],{"className":196,"code":134798,"language":198,"meta":29,"style":29},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[31,134800,134801,134806,134813,134825,134837,134856,134873],{"__ignoreMap":29},[34,134802,134803],{"class":36,"line":37},[34,134804,134805],{"class":205},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[34,134807,134808,134811],{"class":36,"line":51},[34,134809,134810],{"class":149},".icon",[34,134812,57],{"class":40},[34,134814,134815,134817,134819,134821,134823],{"class":36,"line":60},[34,134816,71202],{"class":63},[34,134818,67],{"class":40},[34,134820,1495],{"class":63},[34,134822,88],{"class":87},[34,134824,73],{"class":40},[34,134826,134827,134829,134831,134833,134835],{"class":36,"line":76},[34,134828,71421],{"class":63},[34,134830,67],{"class":40},[34,134832,1495],{"class":63},[34,134834,88],{"class":87},[34,134836,73],{"class":40},[34,134838,134839,134841,134843,134845,134847,134850,134852,134854],{"class":36,"line":93},[34,134840,71245],{"class":63},[34,134842,67],{"class":40},[34,134844,62367],{"class":63},[34,134846,801],{"class":40},[34,134848,134849],{"class":5869},"sprites.png",[34,134851,14367],{"class":40},[34,134853,62377],{"class":63},[34,134855,73],{"class":40},[34,134857,134858,134860,134862,134864,134866,134869,134871],{"class":36,"line":99},[34,134859,129313],{"class":63},[34,134861,67],{"class":40},[34,134863,52410],{"class":63},[34,134865,88],{"class":87},[34,134867,134868],{"class":63}," -20",[34,134870,88],{"class":87},[34,134872,73],{"class":40},[34,134874,134875],{"class":36,"line":353},[34,134876,241],{"class":40},[2122,134878],{"style":127038,"src":134879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[108,134881,134882],{},"在前端中坐标轴的正方向是右和下",[14,134884,134886],{"id":134885},"_123-字体图标","12.3 字体图标",[19,134888,134890],{"id":134889},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[108,134892,134893],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[108,134895,134896],{},"精灵图是有诸多优点的，但是缺点很明显。",[108,134898,134899],{},"1.图片文件还是比较大的。",[108,134901,134902],{},"2.图片本身放大和缩小会失真。",[108,134904,134905],{},"3.一旦图片制作完毕想要更换非常复杂。",[108,134907,134908,134909,490],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[111,134910,134911],{},"字体图标 iconfont",[108,134913,134914,134917,134918,29036],{},[111,134915,134916],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[111,134919,134920],{},"展示的是图标，本质属于字体",[19,134922,134924],{"id":134923},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1800,134926,134927,134932,134935,134938,134941],{},[755,134928,134929,134931],{},[111,134930,26528],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[755,134933,134934],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[755,134936,134937],{},"兼容性：几乎支持所有的浏览器，请放心使用",[755,134939,134940],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[755,134942,134943],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[19,134945,134947],{"id":134946},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1800,134949,134950],{},[755,134951,134952,134953],{},"icomoon字体库：",[520,134954,134957],{"href":134955,"rel":134956},"http:\u002F\u002Ficomoon.io\u002F",[24517],"http:\u002F\u002Ficomoon.io",[108,134959,134960],{},"进去之后点icomoon app",[2122,134962],{"style":127038,"src":134963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[108,134965,134966],{},"可以对其编辑：",[2122,134968],{"style":127038,"src":134969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[108,134971,134972],{},"生成字体：",[2122,134974],{"style":127038,"src":134975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[108,134977,134978],{},"下载：",[2122,134980],{"style":127038,"src":134981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1800,134983,134984],{},[755,134985,134986,134987],{},"阿里iconfont字体库： ",[520,134988,134989],{"href":134989,"rel":134990},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24517],[19,134992,134994],{"id":134993},"_1234-字体图标的引入","12.3.4 字体图标的引入",[752,134996,134997],{},[755,134998,134999,135000,135003],{},"把下载包里面的 ",[111,135001,135002],{},"fonts"," 文件夹放入页面根目录下",[2122,135005],{"style":127038,"src":135006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[752,135008,135009],{"start":51},[755,135010,135011],{},"字体文件格式",[934,135013,135014,135023],{},[937,135015,135016],{},[940,135017,135018,135021],{},[943,135019,135020],{"align":24388},"格式",[943,135022,24392],{"align":24388},[980,135024,135025,135035,135045,135055],{},[940,135026,135027,135032],{},[985,135028,135029],{"align":24388},[111,135030,135031],{},".ttf",[985,135033,135034],{"align":24388},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[940,135036,135037,135042],{},[985,135038,135039],{"align":24388},[111,135040,135041],{},".woff",[985,135043,135044],{"align":24388},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[940,135046,135047,135052],{},[985,135048,135049],{"align":24388},[111,135050,135051],{},".eot",[985,135053,135054],{"align":24388},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[940,135056,135057,135062],{},[985,135058,135059],{"align":24388},[111,135060,135061],{},"svg",[985,135063,135064],{"align":24388},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[752,135066,135067],{"start":60},[755,135068,135069],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[24,135071,135073],{"className":196,"code":135072,"language":198,"meta":29,"style":29},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[31,135074,135075,135080,135087,135099,135115,135140,135161,135181,135201,135205,135211,135221,135232],{"__ignoreMap":29},[34,135076,135077],{"class":36,"line":37},[34,135078,135079],{"class":205},"\u002F* 引入字体图标 *\u002F\n",[34,135081,135082,135085],{"class":36,"line":51},[34,135083,135084],{"class":87},"@font-face",[34,135086,57],{"class":40},[34,135088,135089,135092,135094,135097],{"class":36,"line":60},[34,135090,135091],{"class":63},"  font-family",[34,135093,67],{"class":40},[34,135095,135096],{"class":156},"'icomoon'",[34,135098,73],{"class":40},[34,135100,135101,135104,135106,135108,135110,135113],{"class":36,"line":76},[34,135102,135103],{"class":63},"  src",[34,135105,67],{"class":40},[34,135107,62367],{"class":63},[34,135109,801],{"class":40},[34,135111,135112],{"class":156},"'fonts\u002Ficomoon.eot'",[34,135114,3372],{"class":40},[34,135116,135117,135119,135121,135123,135125,135128,135130,135133,135135,135138],{"class":36,"line":93},[34,135118,135103],{"class":63},[34,135120,67],{"class":40},[34,135122,62367],{"class":63},[34,135124,801],{"class":40},[34,135126,135127],{"class":156},"'fonts\u002Ficomoon.eot?#iefix'",[34,135129,14367],{"class":40},[34,135131,135132],{"class":63},"format",[34,135134,801],{"class":40},[34,135136,135137],{"class":156},"'embedded-opentype'",[34,135139,38698],{"class":40},[34,135141,135142,135145,135147,135150,135152,135154,135156,135159],{"class":36,"line":99},[34,135143,135144],{"class":63},"       url",[34,135146,801],{"class":40},[34,135148,135149],{"class":156},"'fonts\u002Ficomoon.woff'",[34,135151,14367],{"class":40},[34,135153,135132],{"class":63},[34,135155,801],{"class":40},[34,135157,135158],{"class":156},"'woff'",[34,135160,38698],{"class":40},[34,135162,135163,135165,135167,135170,135172,135174,135176,135179],{"class":36,"line":353},[34,135164,135144],{"class":63},[34,135166,801],{"class":40},[34,135168,135169],{"class":156},"'fonts\u002Ficomoon.ttf'",[34,135171,14367],{"class":40},[34,135173,135132],{"class":63},[34,135175,801],{"class":40},[34,135177,135178],{"class":156},"'truetype'",[34,135180,38698],{"class":40},[34,135182,135183,135185,135187,135190,135192,135194,135196,135199],{"class":36,"line":359},[34,135184,135144],{"class":63},[34,135186,801],{"class":40},[34,135188,135189],{"class":156},"'fonts\u002Ficomoon.svg#icomoon'",[34,135191,14367],{"class":40},[34,135193,135132],{"class":63},[34,135195,801],{"class":40},[34,135197,135198],{"class":156},"'svg'",[34,135200,3372],{"class":40},[34,135202,135203],{"class":36,"line":579},[34,135204,241],{"class":40},[34,135206,135207,135209],{"class":36,"line":589},[34,135208,134810],{"class":149},[34,135210,57],{"class":40},[34,135212,135213,135215,135217,135219],{"class":36,"line":601},[34,135214,135091],{"class":63},[34,135216,67],{"class":40},[34,135218,135096],{"class":156},[34,135220,73],{"class":40},[34,135222,135223,135226,135228,135230],{"class":36,"line":613},[34,135224,135225],{"class":63},"  font-style",[34,135227,67],{"class":40},[34,135229,64479],{"class":63},[34,135231,73],{"class":40},[34,135233,135234],{"class":36,"line":618},[34,135235,241],{"class":40},[108,135237,135238],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2122,135240],{"style":127038,"src":135241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[752,135243,135244],{"start":76},[755,135245,135246],{},"添加字体",[2122,135248],{"style":127038,"src":135249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[108,135251,135252],{},"复制：",[2122,135254],{"style":127038,"src":135255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[108,135257,135258],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[752,135260,135261],{"start":93},[755,135262,135263],{},"代码展示：",[24,135265,135266],{"className":196,"code":135072,"language":198,"meta":29,"style":29},[31,135267,135268,135272,135278,135288,135302,135324,135342,135360,135378,135382,135388,135398,135408],{"__ignoreMap":29},[34,135269,135270],{"class":36,"line":37},[34,135271,135079],{"class":205},[34,135273,135274,135276],{"class":36,"line":51},[34,135275,135084],{"class":87},[34,135277,57],{"class":40},[34,135279,135280,135282,135284,135286],{"class":36,"line":60},[34,135281,135091],{"class":63},[34,135283,67],{"class":40},[34,135285,135096],{"class":156},[34,135287,73],{"class":40},[34,135289,135290,135292,135294,135296,135298,135300],{"class":36,"line":76},[34,135291,135103],{"class":63},[34,135293,67],{"class":40},[34,135295,62367],{"class":63},[34,135297,801],{"class":40},[34,135299,135112],{"class":156},[34,135301,3372],{"class":40},[34,135303,135304,135306,135308,135310,135312,135314,135316,135318,135320,135322],{"class":36,"line":93},[34,135305,135103],{"class":63},[34,135307,67],{"class":40},[34,135309,62367],{"class":63},[34,135311,801],{"class":40},[34,135313,135127],{"class":156},[34,135315,14367],{"class":40},[34,135317,135132],{"class":63},[34,135319,801],{"class":40},[34,135321,135137],{"class":156},[34,135323,38698],{"class":40},[34,135325,135326,135328,135330,135332,135334,135336,135338,135340],{"class":36,"line":99},[34,135327,135144],{"class":63},[34,135329,801],{"class":40},[34,135331,135149],{"class":156},[34,135333,14367],{"class":40},[34,135335,135132],{"class":63},[34,135337,801],{"class":40},[34,135339,135158],{"class":156},[34,135341,38698],{"class":40},[34,135343,135344,135346,135348,135350,135352,135354,135356,135358],{"class":36,"line":353},[34,135345,135144],{"class":63},[34,135347,801],{"class":40},[34,135349,135169],{"class":156},[34,135351,14367],{"class":40},[34,135353,135132],{"class":63},[34,135355,801],{"class":40},[34,135357,135178],{"class":156},[34,135359,38698],{"class":40},[34,135361,135362,135364,135366,135368,135370,135372,135374,135376],{"class":36,"line":359},[34,135363,135144],{"class":63},[34,135365,801],{"class":40},[34,135367,135189],{"class":156},[34,135369,14367],{"class":40},[34,135371,135132],{"class":63},[34,135373,801],{"class":40},[34,135375,135198],{"class":156},[34,135377,3372],{"class":40},[34,135379,135380],{"class":36,"line":579},[34,135381,241],{"class":40},[34,135383,135384,135386],{"class":36,"line":589},[34,135385,134810],{"class":149},[34,135387,57],{"class":40},[34,135389,135390,135392,135394,135396],{"class":36,"line":601},[34,135391,135091],{"class":63},[34,135393,67],{"class":40},[34,135395,135096],{"class":156},[34,135397,73],{"class":40},[34,135399,135400,135402,135404,135406],{"class":36,"line":613},[34,135401,135225],{"class":63},[34,135403,67],{"class":40},[34,135405,64479],{"class":63},[34,135407,73],{"class":40},[34,135409,135410],{"class":36,"line":618},[34,135411,241],{"class":40},[2122,135413],{"style":127038,"src":135414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[108,135416,135417],{},"更加细节展示：",[752,135419,135420],{},[755,135421,135422],{},"html 标签内添加小图标",[2122,135424],{"style":127038,"src":135425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[752,135427,135428],{"start":51},[755,135429,135430],{},"给标签定义字体",[24,135432,135433],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,135434,135435,135439,135453,135457],{"__ignoreMap":29},[34,135436,135437],{"class":36,"line":37},[34,135438,131164],{"class":205},[34,135440,135441,135443,135445,135447,135449,135451],{"class":36,"line":51},[34,135442,41],{"class":40},[34,135444,52258],{"class":44},[34,135446,54132],{"class":149},[34,135448,153],{"class":40},[34,135450,131177],{"class":156},[34,135452,48],{"class":40},[34,135454,135455],{"class":36,"line":60},[34,135456,131184],{"class":40},[34,135458,135459,135461,135463],{"class":36,"line":76},[34,135460,102],{"class":40},[34,135462,52258],{"class":44},[34,135464,48],{"class":40},[108,135466,135467],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2122,135469],{"style":127038,"src":135470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[19,135472,135474],{"id":135473},"_1235-字体图标的追加","12.3.5 字体图标的追加",[108,135476,135477],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[108,135479,135480,135481,135484],{},"把压缩包里面的 ",[111,135482,135483],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[108,135486,135487],{},"打开网站，点下方：",[2122,135489],{"style":127038,"src":135490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2122,135492],{"style":127038,"src":135493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2122,135495],{"style":127038,"src":135496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[108,135498,135499],{},"点yes重新加载",[108,135501,135502],{},"然后重复之前的操作就可以实现了",[108,135504,135505],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[19,135507,135509],{"id":135508},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2122,135511],{"style":127038,"src":135512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[45,135514,135515],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":135517},[135518,135524,135529],{"id":134121,"depth":51,"text":134122,"children":135519},[135520,135521,135522,135523],{"id":134133,"depth":60,"text":134134},{"id":134162,"depth":60,"text":134163},{"id":134190,"depth":60,"text":134191},{"id":134248,"depth":60,"text":134249},{"id":134720,"depth":51,"text":134721,"children":135525},[135526,135527,135528],{"id":134724,"depth":60,"text":134725},{"id":134769,"depth":60,"text":134770},{"id":134785,"depth":60,"text":134786},{"id":134885,"depth":51,"text":134886,"children":135530},[135531,135532,135533,135534,135535,135536],{"id":134889,"depth":60,"text":134890},{"id":134923,"depth":60,"text":134924},{"id":134946,"depth":60,"text":134947},{"id":134993,"depth":60,"text":134994},{"id":135473,"depth":60,"text":135474},{"id":135508,"depth":60,"text":135509},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134113,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135543,"title":135544,"body":135545,"description":723,"extension":724,"meta":136772,"navigation":726,"path":136773,"seo":136774,"stem":136775,"__hash__":136776},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135546,"toc":136753},[135547,135550,135554,135557,135571,135639,135669,135672,135676,135680,135782,135829,135833,135836,135839,135873,135876,135879,135882,135885,135888,135891,135894,135896,135899,135902,135905,135908,135911,135914,135917,135945,135948,135952,135955,135962,135965,135968,135994,135997,136001,136004,136007,136014,136018,136021,136023,136055,136058,136061,136073,136079,136082,136085,136088,136090,136094,136097,136100,136103,136148,136152,136154,136157,136164,136206,136209,136213,136218,136232,136236,136239,136242,136245,136248,136251,136285,136288,136291,136345,136348,136351,136354,136357,136409,136412,136415,136464,136468,136470,136473,136476,136479,136482,136485,136543,136546,136552,136555,136558,136590,136593,136597,136601,136604,136636,136640,136643,136687,136691,136694,136697,136700,136703,136706,136709,136712,136714,136717,136719,136722,136725,136728,136731,136736,136739,136741,136744,136747,136750],[10,135548,135544],{"id":135549},"_13-界面样式与布局技巧",[14,135551,135553],{"id":135552},"_131-css三角","13.1 css三角",[108,135555,135556],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1800,135558,135559,135562,135565,135568],{},[755,135560,135561],{},"用css 边框可以模拟三角效果",[755,135563,135564],{},"宽度高度为0",[755,135566,135567],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[755,135569,135570],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[24,135572,135574],{"className":196,"code":135573,"language":198,"meta":29,"style":29},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[31,135575,135576,135581,135588,135598,135608,135624,135635],{"__ignoreMap":29},[34,135577,135578],{"class":36,"line":37},[34,135579,135580],{"class":205},"\u002F* CSS 实现三角形 *\u002F\n",[34,135582,135583,135586],{"class":36,"line":51},[34,135584,135585],{"class":149},".triangle",[34,135587,57],{"class":40},[34,135589,135590,135592,135594,135596],{"class":36,"line":60},[34,135591,71202],{"class":63},[34,135593,67],{"class":40},[34,135595,987],{"class":63},[34,135597,73],{"class":40},[34,135599,135600,135602,135604,135606],{"class":36,"line":76},[34,135601,71421],{"class":63},[34,135603,67],{"class":40},[34,135605,987],{"class":63},[34,135607,73],{"class":40},[34,135609,135610,135612,135614,135616,135618,135620,135622],{"class":36,"line":93},[34,135611,71528],{"class":63},[34,135613,67],{"class":40},[34,135615,1241],{"class":63},[34,135617,88],{"class":87},[34,135619,52168],{"class":63},[34,135621,64629],{"class":63},[34,135623,73],{"class":40},[34,135625,135626,135629,135631,135633],{"class":36,"line":99},[34,135627,135628],{"class":63},"  border-bottom-color",[34,135630,67],{"class":40},[34,135632,534],{"class":63},[34,135634,73],{"class":40},[34,135636,135637],{"class":36,"line":353},[34,135638,241],{"class":40},[24,135640,135641],{"className":196,"code":131210,"language":198,"meta":29,"style":29},[31,135642,135643,135649,135665],{"__ignoreMap":29},[34,135644,135645,135647],{"class":36,"line":37},[34,135646,52258],{"class":44},[34,135648,57],{"class":40},[34,135650,135651,135653,135655,135657,135659,135661,135663],{"class":36,"line":51},[34,135652,71528],{"class":63},[34,135654,67],{"class":40},[34,135656,1013],{"class":63},[34,135658,88],{"class":87},[34,135660,52168],{"class":63},[34,135662,130445],{"class":63},[34,135664,73],{"class":40},[34,135666,135667],{"class":36,"line":60},[34,135668,241],{"class":40},[2122,135670],{"style":127038,"src":135671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135673,135675],{"id":135674},"_132-css用户界面样式","13.2 css用户界面样式",[19,135677,135679],{"id":135678},"_1321-鼠标样式","13.2.1 鼠标样式",[24,135681,135683],{"className":196,"code":135682,"language":198,"meta":29,"style":29},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[31,135684,135685,135690,135709,135727,135746,135763],{"__ignoreMap":29},[34,135686,135687],{"class":36,"line":37},[34,135688,135689],{"class":205},"\u002F* 鼠标样式 *\u002F\n",[34,135691,135692,135694,135696,135699,135701,135703,135706],{"class":36,"line":51},[34,135693,52258],{"class":44},[34,135695,80437],{"class":40},[34,135697,135698],{"class":63},"cursor",[34,135700,67],{"class":40},[34,135702,62670],{"class":63},[34,135704,135705],{"class":40},"; }   ",[34,135707,135708],{"class":205},"\u002F* 手型 *\u002F\n",[34,135710,135711,135713,135715,135717,135719,135722,135724],{"class":36,"line":60},[34,135712,52258],{"class":44},[34,135714,80437],{"class":40},[34,135716,135698],{"class":63},[34,135718,67],{"class":40},[34,135720,135721],{"class":63},"default",[34,135723,135705],{"class":40},[34,135725,135726],{"class":205},"\u002F* 默认 *\u002F\n",[34,135728,135729,135731,135733,135735,135737,135740,135743],{"class":36,"line":76},[34,135730,52258],{"class":44},[34,135732,80437],{"class":40},[34,135734,135698],{"class":63},[34,135736,67],{"class":40},[34,135738,135739],{"class":63},"move",[34,135741,135742],{"class":40},"; }      ",[34,135744,135745],{"class":205},"\u002F* 移动 *\u002F\n",[34,135747,135748,135750,135752,135754,135756,135758,135760],{"class":36,"line":93},[34,135749,52258],{"class":44},[34,135751,80437],{"class":40},[34,135753,135698],{"class":63},[34,135755,67],{"class":40},[34,135757,5840],{"class":63},[34,135759,135742],{"class":40},[34,135761,135762],{"class":205},"\u002F* 文本 *\u002F\n",[34,135764,135765,135767,135769,135771,135773,135776,135779],{"class":36,"line":99},[34,135766,52258],{"class":44},[34,135768,80437],{"class":40},[34,135770,135698],{"class":63},[34,135772,67],{"class":40},[34,135774,135775],{"class":63},"not-allowed",[34,135777,135778],{"class":40},"; } ",[34,135780,135781],{"class":205},"\u002F* 禁止 *\u002F\n",[934,135783,135784,135792],{},[937,135785,135786],{},[940,135787,135788,135790],{},[943,135789,127642],{"align":24388},[943,135791,28140],{"align":24388},[980,135793,135794,135801,135808,135815,135822],{},[940,135795,135796,135798],{},[985,135797,135721],{"align":24388},[985,135799,135800],{"align":24388},"小白 默认",[940,135802,135803,135805],{},[985,135804,62670],{"align":24388},[985,135806,135807],{"align":24388},"小手",[940,135809,135810,135812],{},[985,135811,135739],{"align":24388},[985,135813,135814],{"align":24388},"移动",[940,135816,135817,135819],{},[985,135818,5840],{"align":24388},[985,135820,135821],{"align":24388},"文本",[940,135823,135824,135826],{},[985,135825,135775],{"align":24388},[985,135827,135828],{"align":24388},"禁止",[19,135830,135832],{"id":135831},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[108,135834,135835],{},"去除表单轮廓线",[108,135837,135838],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[24,135840,135841],{"className":196,"code":130417,"language":198,"meta":29,"style":29},[31,135842,135843,135847,135853,135869],{"__ignoreMap":29},[34,135844,135845],{"class":36,"line":37},[34,135846,130424],{"class":205},[34,135848,135849,135851],{"class":36,"line":51},[34,135850,52258],{"class":44},[34,135852,57],{"class":40},[34,135854,135855,135857,135859,135861,135863,135865,135867],{"class":36,"line":60},[34,135856,71528],{"class":63},[34,135858,67],{"class":40},[34,135860,1013],{"class":63},[34,135862,88],{"class":87},[34,135864,52168],{"class":63},[34,135866,130445],{"class":63},[34,135868,73],{"class":40},[34,135870,135871],{"class":36,"line":76},[34,135872,241],{"class":40},[108,135874,135875],{},"文本域：",[2122,135877],{"style":127038,"src":135878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[108,135880,135881],{},"此时会有一个空白区域",[2122,135883],{"style":127038,"src":135884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[108,135886,135887],{},"写在同一行就不会出现这个问题",[2122,135889],{"style":127038,"src":135890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[108,135892,135893],{},"文本域是行内块元素，一定记住！！！",[108,135895,98863],{},[2122,135897],{"style":127038,"src":135898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[108,135900,135901],{},"文本域尽量放在一行",[108,135903,135904],{},"知识回顾：cols是列，rols是行",[2122,135906],{"style":127038,"src":135907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[108,135909,135910],{},"它可以进行拖动，显然这是我们不愿意看到的",[2122,135912],{"style":127038,"src":135913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[108,135915,135916],{},"使用resize进行解决",[24,135918,135920],{"className":196,"code":135919,"language":198,"meta":29,"style":29},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[31,135921,135922,135928,135941],{"__ignoreMap":29},[34,135923,135924,135926],{"class":36,"line":37},[34,135925,669],{"class":44},[34,135927,57],{"class":40},[34,135929,135930,135932,135934,135936,135938],{"class":36,"line":51},[34,135931,690],{"class":63},[34,135933,67],{"class":40},[34,135935,546],{"class":63},[34,135937,130916],{"class":40},[34,135939,135940],{"class":205},"\u002F* 取消表单轮廓线 *\u002F\n",[34,135942,135943],{"class":36,"line":60},[34,135944,241],{"class":40},[108,135946,135947],{},"此时就无法通过右下方实现拖动了",[19,135949,135951],{"id":135950},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[108,135953,135954],{},"实现一个盒子中的文字和图片对齐",[108,135956,135957,135958,135961],{},"用于设置一个元素的 ",[111,135959,135960],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[108,135963,135964],{},"图片和文字默认是基线对齐",[2122,135966],{"style":127038,"src":135967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[24,135969,135970],{"className":196,"code":135919,"language":198,"meta":29,"style":29},[31,135971,135972,135978,135990],{"__ignoreMap":29},[34,135973,135974,135976],{"class":36,"line":37},[34,135975,669],{"class":44},[34,135977,57],{"class":40},[34,135979,135980,135982,135984,135986,135988],{"class":36,"line":51},[34,135981,690],{"class":63},[34,135983,67],{"class":40},[34,135985,546],{"class":63},[34,135987,130916],{"class":40},[34,135989,135940],{"class":205},[34,135991,135992],{"class":36,"line":60},[34,135993,241],{"class":40},[2122,135995],{"style":127038,"src":135996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22650,135998,136000],{"id":135999},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[108,136002,136003],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2122,136005],{"style":127038,"src":136006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[108,136008,136009,136010,136013],{},"此时可以给图片、表单这些行内块元素的 ",[111,136011,136012],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22650,136015,136017],{"id":136016},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[108,136019,136020],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[108,136022,15286],{},[24,136024,136026],{"className":196,"code":136025,"language":198,"meta":29,"style":29},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[31,136027,136028,136033,136039,136051],{"__ignoreMap":29},[34,136029,136030],{"class":36,"line":37},[34,136031,136032],{"class":205},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[34,136034,136035,136037],{"class":36,"line":51},[34,136036,2122],{"class":44},[34,136038,57],{"class":40},[34,136040,136041,136044,136046,136049],{"class":36,"line":60},[34,136042,136043],{"class":63},"  vertical-align",[34,136045,67],{"class":40},[34,136047,136048],{"class":63},"middle",[34,136050,73],{"class":40},[34,136052,136053],{"class":36,"line":76},[34,136054,241],{"class":40},[2122,136056],{"style":127038,"src":136057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[108,136059,136060],{},"主要解决方法有两种：",[752,136062,136063],{},[755,136064,136065,136068,136069,136072],{},[111,136066,136067],{},"给图片"," 添加 ",[111,136070,136071],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[108,136074,136075,136076],{},"2.把图片转换为块级元素 ",[111,136077,136078],{},"display: block",[108,136080,136081],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[108,136083,136084],{},"img {",[108,136086,136087],{},"vertical-align:middle;",[108,136089,1739],{},[19,136091,136093],{"id":136092},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[108,136095,136096],{},"效果：",[2122,136098],{"style":127038,"src":136099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[108,136101,136102],{},"单行文本溢出显示省略号--必须满足三个条件：",[24,136104,136106],{"className":196,"code":136105,"language":198,"meta":29,"style":29},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[31,136107,136108,136113,136119,136129,136134,136144],{"__ignoreMap":29},[34,136109,136110],{"class":36,"line":37},[34,136111,136112],{"class":205},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[34,136114,136115,136117],{"class":36,"line":51},[34,136116,2122],{"class":44},[34,136118,57],{"class":40},[34,136120,136121,136123,136125,136127],{"class":36,"line":60},[34,136122,136043],{"class":63},[34,136124,67],{"class":40},[34,136126,136048],{"class":63},[34,136128,73],{"class":40},[34,136130,136131],{"class":36,"line":76},[34,136132,136133],{"class":205},"  \u002F* 或 *\u002F\n",[34,136135,136136,136138,136140,136142],{"class":36,"line":93},[34,136137,128669],{"class":63},[34,136139,67],{"class":40},[34,136141,61512],{"class":63},[34,136143,73],{"class":40},[34,136145,136146],{"class":36,"line":99},[34,136147,241],{"class":40},[19,136149,136151],{"id":136150},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[108,136153,136096],{},[2122,136155],{"style":127038,"src":136156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[108,136158,136159,136160,136163],{},"多行文本溢出显示省略号， ",[111,136161,136162],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[24,136165,136166],{"className":196,"code":136105,"language":198,"meta":29,"style":29},[31,136167,136168,136172,136178,136188,136192,136202],{"__ignoreMap":29},[34,136169,136170],{"class":36,"line":37},[34,136171,136112],{"class":205},[34,136173,136174,136176],{"class":36,"line":51},[34,136175,2122],{"class":44},[34,136177,57],{"class":40},[34,136179,136180,136182,136184,136186],{"class":36,"line":60},[34,136181,136043],{"class":63},[34,136183,67],{"class":40},[34,136185,136048],{"class":63},[34,136187,73],{"class":40},[34,136189,136190],{"class":36,"line":76},[34,136191,136133],{"class":205},[34,136193,136194,136196,136198,136200],{"class":36,"line":93},[34,136195,128669],{"class":63},[34,136197,67],{"class":40},[34,136199,61512],{"class":63},[34,136201,73],{"class":40},[34,136203,136204],{"class":36,"line":99},[34,136205,241],{"class":40},[108,136207,136208],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136210,136212],{"id":136211},"_133-常见布局技巧","13.3 常见布局技巧",[108,136214,136215],{},[111,136216,136217],{},"巧妙利用一个技术更快更好的布局：",[752,136219,136220,136223,136226,136229],{},[755,136221,136222],{},"margin负值的运用",[755,136224,136225],{},"文字围绕浮动元素",[755,136227,136228],{},"行内块的巧妙运用",[755,136230,136231],{},"CSS三角强化",[19,136233,136235],{"id":136234},"_1331-margin负值的运用","13.3.1 margin负值的运用",[108,136237,136238],{},"应用场景：",[2122,136240],{"style":127038,"src":136241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2122,136243],{"style":127038,"src":136244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[108,136246,136247],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[108,136249,136250],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[24,136252,136253],{"className":196,"code":130417,"language":198,"meta":29,"style":29},[31,136254,136255,136259,136265,136281],{"__ignoreMap":29},[34,136256,136257],{"class":36,"line":37},[34,136258,130424],{"class":205},[34,136260,136261,136263],{"class":36,"line":51},[34,136262,52258],{"class":44},[34,136264,57],{"class":40},[34,136266,136267,136269,136271,136273,136275,136277,136279],{"class":36,"line":60},[34,136268,71528],{"class":63},[34,136270,67],{"class":40},[34,136272,1013],{"class":63},[34,136274,88],{"class":87},[34,136276,52168],{"class":63},[34,136278,130445],{"class":63},[34,136280,73],{"class":40},[34,136282,136283],{"class":36,"line":76},[34,136284,241],{"class":40},[2122,136286],{"style":127038,"src":136287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[108,136289,136290],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[24,136292,136294],{"className":196,"code":136293,"language":198,"meta":29,"style":29},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[31,136295,136296,136301,136307,136317,136329,136341],{"__ignoreMap":29},[34,136297,136298],{"class":36,"line":37},[34,136299,136300],{"class":205},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[34,136302,136303,136305],{"class":36,"line":51},[34,136304,130901],{"class":149},[34,136306,57],{"class":40},[34,136308,136309,136311,136313,136315],{"class":36,"line":60},[34,136310,132859],{"class":63},[34,136312,67],{"class":40},[34,136314,55408],{"class":63},[34,136316,73],{"class":40},[34,136318,136319,136321,136323,136325,136327],{"class":36,"line":76},[34,136320,132873],{"class":63},[34,136322,67],{"class":40},[34,136324,1241],{"class":63},[34,136326,88],{"class":87},[34,136328,73],{"class":40},[34,136330,136331,136333,136335,136337,136339],{"class":36,"line":93},[34,136332,132890],{"class":63},[34,136334,67],{"class":40},[34,136336,1495],{"class":63},[34,136338,88],{"class":87},[34,136340,73],{"class":40},[34,136342,136343],{"class":36,"line":99},[34,136344,241],{"class":40},[108,136346,136347],{},"加上上述代码会发现：",[2122,136349],{"style":127038,"src":136350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[108,136352,136353],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[108,136355,136356],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[24,136358,136359],{"className":196,"code":136293,"language":198,"meta":29,"style":29},[31,136360,136361,136365,136371,136381,136393,136405],{"__ignoreMap":29},[34,136362,136363],{"class":36,"line":37},[34,136364,136300],{"class":205},[34,136366,136367,136369],{"class":36,"line":51},[34,136368,130901],{"class":149},[34,136370,57],{"class":40},[34,136372,136373,136375,136377,136379],{"class":36,"line":60},[34,136374,132859],{"class":63},[34,136376,67],{"class":40},[34,136378,55408],{"class":63},[34,136380,73],{"class":40},[34,136382,136383,136385,136387,136389,136391],{"class":36,"line":76},[34,136384,132873],{"class":63},[34,136386,67],{"class":40},[34,136388,1241],{"class":63},[34,136390,88],{"class":87},[34,136392,73],{"class":40},[34,136394,136395,136397,136399,136401,136403],{"class":36,"line":93},[34,136396,132890],{"class":63},[34,136398,67],{"class":40},[34,136400,1495],{"class":63},[34,136402,88],{"class":87},[34,136404,73],{"class":40},[34,136406,136407],{"class":36,"line":99},[34,136408,241],{"class":40},[108,136410,136411],{},"解决方式2：",[108,136413,136414],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[24,136416,136418],{"className":196,"code":136417,"language":198,"meta":29,"style":29},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[31,136419,136420,136426,136436,136448,136460],{"__ignoreMap":29},[34,136421,136422,136424],{"class":36,"line":37},[34,136423,52258],{"class":44},[34,136425,57],{"class":40},[34,136427,136428,136430,136432,136434],{"class":36,"line":51},[34,136429,132859],{"class":63},[34,136431,67],{"class":40},[34,136433,55408],{"class":63},[34,136435,73],{"class":40},[34,136437,136438,136440,136442,136444,136446],{"class":36,"line":60},[34,136439,132873],{"class":63},[34,136441,67],{"class":40},[34,136443,1241],{"class":63},[34,136445,88],{"class":87},[34,136447,73],{"class":40},[34,136449,136450,136452,136454,136456,136458],{"class":36,"line":76},[34,136451,132890],{"class":63},[34,136453,67],{"class":40},[34,136455,1495],{"class":63},[34,136457,88],{"class":87},[34,136459,73],{"class":40},[34,136461,136462],{"class":36,"line":93},[34,136463,241],{"class":40},[19,136465,136467],{"id":136466},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[108,136469,136238],{},[2122,136471],{"style":127038,"src":136472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[108,136474,136475],{},"实现结构图：",[2122,136477],{"style":127038,"src":136478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[108,136480,136481],{},"巧妙运用浮动元素不会压住文字的特性",[108,136483,136484],{},"代码显示：",[24,136486,136488],{"className":196,"code":136487,"language":198,"meta":29,"style":29},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[31,136489,136490,136496,136506,136510,136515,136519,136525,136539],{"__ignoreMap":29},[34,136491,136492,136494],{"class":36,"line":37},[34,136493,130901],{"class":149},[34,136495,57],{"class":40},[34,136497,136498,136500,136502,136504],{"class":36,"line":51},[34,136499,131533],{"class":63},[34,136501,67],{"class":40},[34,136503,24388],{"class":63},[34,136505,73],{"class":40},[34,136507,136508],{"class":36,"line":60},[34,136509,241],{"class":40},[34,136511,136512],{"class":36,"line":76},[34,136513,136514],{"class":40},"```Css\n",[34,136516,136517],{"class":36,"line":93},[34,136518,130896],{"class":205},[34,136520,136521,136523],{"class":36,"line":99},[34,136522,130901],{"class":149},[34,136524,57],{"class":40},[34,136526,136527,136529,136531,136533,136535,136537],{"class":36,"line":353},[34,136528,71105],{"class":63},[34,136530,67],{"class":40},[34,136532,987],{"class":63},[34,136534,52203],{"class":63},[34,136536,130916],{"class":40},[34,136538,130919],{"class":205},[34,136540,136541],{"class":36,"line":359},[34,136542,241],{"class":40},[108,136544,136545],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[24,136547,136550],{"className":136548,"code":136549,"language":5840},[5838],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[31,136551,136549],{"__ignoreMap":29},[2122,136553],{"style":127038,"src":136554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[108,136556,136557],{},"最终展示结果：",[24,136559,136560],{"className":196,"code":130889,"language":198,"meta":29,"style":29},[31,136561,136562,136566,136572,136586],{"__ignoreMap":29},[34,136563,136564],{"class":36,"line":37},[34,136565,130896],{"class":205},[34,136567,136568,136570],{"class":36,"line":51},[34,136569,130901],{"class":149},[34,136571,57],{"class":40},[34,136573,136574,136576,136578,136580,136582,136584],{"class":36,"line":60},[34,136575,71105],{"class":63},[34,136577,67],{"class":40},[34,136579,987],{"class":63},[34,136581,52203],{"class":63},[34,136583,130916],{"class":40},[34,136585,130919],{"class":205},[34,136587,136588],{"class":36,"line":76},[34,136589,241],{"class":40},[2122,136591],{"style":127038,"src":136592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136594,136596],{"id":136595},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[19,136598,136600],{"id":136599},"_1341-原理","13.4.1 原理",[2122,136602],{"style":127038,"src":136603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[24,136605,136606],{"className":196,"code":130889,"language":198,"meta":29,"style":29},[31,136607,136608,136612,136618,136632],{"__ignoreMap":29},[34,136609,136610],{"class":36,"line":37},[34,136611,130896],{"class":205},[34,136613,136614,136616],{"class":36,"line":51},[34,136615,130901],{"class":149},[34,136617,57],{"class":40},[34,136619,136620,136622,136624,136626,136628,136630],{"class":36,"line":60},[34,136621,71105],{"class":63},[34,136623,67],{"class":40},[34,136625,987],{"class":63},[34,136627,52203],{"class":63},[34,136629,130916],{"class":40},[34,136631,130919],{"class":205},[34,136633,136634],{"class":36,"line":76},[34,136635,241],{"class":40},[19,136637,136639],{"id":136638},"_1342-实例","13.4.2 实例",[2122,136641],{"style":127038,"src":136642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[24,136644,136645],{"className":196,"code":131519,"language":198,"meta":29,"style":29},[31,136646,136647,136653,136663,136667,136673,136683],{"__ignoreMap":29},[34,136648,136649,136651],{"class":36,"line":37},[34,136650,131526],{"class":149},[34,136652,57],{"class":40},[34,136654,136655,136657,136659,136661],{"class":36,"line":51},[34,136656,131533],{"class":63},[34,136658,67],{"class":40},[34,136660,24388],{"class":63},[34,136662,73],{"class":40},[34,136664,136665],{"class":36,"line":60},[34,136666,241],{"class":40},[34,136668,136669,136671],{"class":36,"line":76},[34,136670,131548],{"class":149},[34,136672,57],{"class":40},[34,136674,136675,136677,136679,136681],{"class":36,"line":93},[34,136676,131533],{"class":63},[34,136678,67],{"class":40},[34,136680,73153],{"class":63},[34,136682,73],{"class":40},[34,136684,136685],{"class":36,"line":99},[34,136686,241],{"class":40},[14,136688,136690],{"id":136689},"_135-css的初始化","13.5 css的初始化",[108,136692,136693],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[108,136695,136696],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[108,136698,136699],{},"每个网页都必须首先进行 CSS初始化。",[108,136701,136702],{},"这里我们以 京东CSS初始化代码为例。",[108,136704,136705],{},"在网页右键查看网页源代码",[108,136707,136708],{},"找到css的link引入语句",[108,136710,136711],{},"然后ctrl+f 输入body",[108,136713,117],{},[2122,136715],{"style":127038,"src":136716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[108,136718,77879],{},[2122,136720],{"style":127038,"src":136721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[108,136723,136724],{},"③打开了网页上传压缩的代码",[2122,136726],{"style":127038,"src":136727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[108,136729,136730],{},"④从body前可以查看这个网页的初始化代码",[108,136732,136733],{},[111,136734,136735],{},"Unicode编码字体：",[108,136737,136738],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[108,136740,83837],{},[108,136742,136743],{},"黑体 \\9ED1\\4F53",[108,136745,136746],{},"宋体 \\5B8B\\4F53",[108,136748,136749],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[45,136751,136752],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":29,"searchDepth":51,"depth":51,"links":136754},[136755,136756,136763,136767,136771],{"id":135552,"depth":51,"text":135553},{"id":135674,"depth":51,"text":135675,"children":136757},[136758,136759,136760,136761,136762],{"id":135678,"depth":60,"text":135679},{"id":135831,"depth":60,"text":135832},{"id":135950,"depth":60,"text":135951},{"id":136092,"depth":60,"text":136093},{"id":136150,"depth":60,"text":136151},{"id":136211,"depth":51,"text":136212,"children":136764},[136765,136766],{"id":136234,"depth":60,"text":136235},{"id":136466,"depth":60,"text":136467},{"id":136595,"depth":51,"text":136596,"children":136768},[136769,136770],{"id":136599,"depth":60,"text":136600},{"id":136638,"depth":60,"text":136639},{"id":136689,"depth":51,"text":136690},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135544,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136778,"title":136779,"body":136780,"description":723,"extension":724,"meta":138466,"navigation":726,"path":138467,"seo":138468,"stem":138469,"__hash__":138470},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136781,"toc":138455},[136782,136785,136789,136793,136796,136803,136806,136809,136847,136850,136852,136866,136870,136879,136883,136888,136891,136894,136897,136932,136937,136940,136970,136973,136978,136981,136984,137014,137017,137071,137074,137078,137083,137095,137098,137102,137132,137135,137140,137143,137173,137176,137180,137197,137201,137205,137208,137241,137244,137248,137251,137254,137257,137260,137263,137374,137377,137380,137383,137485,137488,137492,137496,137500,137503,137543,137546,137548,137564,137568,137571,137576,137657,137660,137663,137789,137794,137797,137805,137808,137813,137898,137901,137905,137908,137911,137915,137935,137940,138024,138027,138032,138035,138038,138116,138119,138122,138125,138128,138131,138136,138139,138142,138214,138217,138222,138225,138322,138325,138331,138334,138337,138340,138343,138346,138349,138352,138355,138359,138364,138367,138400,138405,138408,138449,138452],[10,136783,136779],{"id":136784},"_14-html5与css3新特性",[14,136786,136788],{"id":136787},"_141-html5的新特性","14.1 HTML5的新特性",[19,136790,136792],{"id":136791},"_1411-基本标签","14.1.1 基本标签",[108,136794,136795],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[108,136797,136798,136799,136802],{},"这些新特性都有兼容性问题，基本是 ",[111,136800,136801],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[108,136804,136805],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[108,136807,136808],{},"现在使用的是新特性：",[1800,136810,136811,136817,136823,136829,136835,136841],{},[755,136812,136813,136816],{},[31,136814,136815],{},"\u003Cheader>"," 头部标签",[755,136818,136819,136822],{},[31,136820,136821],{},"\u003Cnav>"," 导航标签",[755,136824,136825,136828],{},[31,136826,136827],{},"\u003Carticle>"," 内容标签",[755,136830,136831,136834],{},[31,136832,136833],{},"\u003Csection>"," 定义文档某个区域",[755,136836,136837,136840],{},[31,136838,136839],{},"\u003Caside>"," 侧边栏标签",[755,136842,136843,136846],{},[31,136844,136845],{},"\u003Cfooter>"," 尾部标签",[2122,136848],{"style":127038,"src":136849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[108,136851,830],{},[1800,136853,136854,136857,136860,136863],{},[755,136855,136856],{},"这种语义化标准主要是针对搜索引擎的",[755,136858,136859],{},"这些标签页面中可以经常使用",[755,136861,136862],{},"在IE9中，需要把这些元素转换为块级元素",[755,136864,136865],{},"移动端更喜欢使用这些标签",[19,136867,136869],{"id":136868},"_1412-多媒体标签","14.1.2 多媒体标签",[108,136871,136872,136873,136875,136876,136878],{},"音频 ",[111,136874,28825],{}," 和视频 ",[111,136877,28834],{}," 两个标签",[22650,136880,136882],{"id":136881},"_14121-视频标签-video","14.1.2.1 视频标签- video",[752,136884,136885],{},[755,136886,136887],{},"支持格式：",[2122,136889],{"style":127038,"src":136890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[108,136892,136893],{},"尽量使用MP4，兼容性好",[108,136895,136896],{},"用MP4就可以",[24,136898,136900],{"className":26,"code":136899,"language":28,"meta":29,"style":29},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[31,136901,136902],{"__ignoreMap":29},[34,136903,136904,136906,136908,136910,136912,136915,136917,136920,136923,136926,136928,136930],{"class":36,"line":37},[34,136905,41],{"class":40},[34,136907,28834],{"class":44},[34,136909,55882],{"class":149},[34,136911,153],{"class":40},[34,136913,136914],{"class":156},"\"movie.mp4\"",[34,136916,93053],{"class":149},[34,136918,136919],{"class":149}," autoplay",[34,136921,136922],{"class":149}," muted",[34,136924,136925],{"class":149}," loop",[34,136927,55957],{"class":40},[34,136929,28834],{"class":44},[34,136931,48],{"class":40},[752,136933,136934],{"start":51},[755,136935,136936],{},"兼容写法",[108,136938,136939],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[24,136941,136942],{"className":26,"code":136899,"language":28,"meta":29,"style":29},[31,136943,136944],{"__ignoreMap":29},[34,136945,136946,136948,136950,136952,136954,136956,136958,136960,136962,136964,136966,136968],{"class":36,"line":37},[34,136947,41],{"class":40},[34,136949,28834],{"class":44},[34,136951,55882],{"class":149},[34,136953,153],{"class":40},[34,136955,136914],{"class":156},[34,136957,93053],{"class":149},[34,136959,136919],{"class":149},[34,136961,136922],{"class":149},[34,136963,136925],{"class":149},[34,136965,55957],{"class":40},[34,136967,28834],{"class":44},[34,136969,48],{"class":40},[108,136971,136972],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[752,136974,136975],{"start":60},[755,136976,136977],{},"video常用属性",[2122,136979],{"style":127038,"src":136980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[108,136982,136983],{},"poster属性后面是跟的等待加载图片的地址",[24,136985,136986],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,136987,136988],{"__ignoreMap":29},[34,136989,136990,136992,136994,136996,136998,137000,137002,137004,137006,137008,137010,137012],{"class":36,"line":37},[34,136991,41],{"class":40},[34,136993,2122],{"class":44},[34,136995,55882],{"class":149},[34,136997,153],{"class":40},[34,136999,134570],{"class":156},[34,137001,55890],{"class":149},[34,137003,153],{"class":40},[34,137005,134577],{"class":156},[34,137007,134580],{"class":149},[34,137009,153],{"class":40},[34,137011,134585],{"class":156},[34,137013,48],{"class":40},[108,137015,137016],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[24,137018,137020],{"className":196,"code":137019,"language":198,"meta":29,"style":29},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[31,137021,137022,137027,137033,137057,137062,137067],{"__ignoreMap":29},[34,137023,137024],{"class":36,"line":37},[34,137025,137026],{"class":205},"\u002F* 2D 位移 *\u002F\n",[34,137028,137029,137031],{"class":36,"line":51},[34,137030,52258],{"class":44},[34,137032,57],{"class":40},[34,137034,137035,137038,137040,137043,137045,137047,137049,137051,137053,137055],{"class":36,"line":60},[34,137036,137037],{"class":63},"  transform",[34,137039,67],{"class":40},[34,137041,137042],{"class":63},"translate",[34,137044,801],{"class":40},[34,137046,1106],{"class":63},[34,137048,88],{"class":87},[34,137050,13088],{"class":40},[34,137052,1451],{"class":63},[34,137054,88],{"class":87},[34,137056,3372],{"class":40},[34,137058,137059],{"class":36,"line":76},[34,137060,137061],{"class":205},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[34,137063,137064],{"class":36,"line":93},[34,137065,137066],{"class":205},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[34,137068,137069],{"class":36,"line":99},[34,137070,241],{"class":40},[108,137072,137073],{},"muted:自动静音属性",[22650,137075,137077],{"id":137076},"_14122-音频标签audio","14.1.2.2 音频标签audio",[752,137079,137080],{},[755,137081,137082],{},"基本使用",[108,137084,137085,137086,137091,137092],{},"当前 ",[111,137087,137088],{},[31,137089,137090],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[111,137093,137094],{},"mp3格式",[2122,137096],{"style":127038,"src":137097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[752,137099,137100],{"start":51},[755,137101,136936],{},[24,137103,137104],{"className":26,"code":136899,"language":28,"meta":29,"style":29},[31,137105,137106],{"__ignoreMap":29},[34,137107,137108,137110,137112,137114,137116,137118,137120,137122,137124,137126,137128,137130],{"class":36,"line":37},[34,137109,41],{"class":40},[34,137111,28834],{"class":44},[34,137113,55882],{"class":149},[34,137115,153],{"class":40},[34,137117,136914],{"class":156},[34,137119,93053],{"class":149},[34,137121,136919],{"class":149},[34,137123,136922],{"class":149},[34,137125,136925],{"class":149},[34,137127,55957],{"class":40},[34,137129,28834],{"class":44},[34,137131,48],{"class":40},[108,137133,137134],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[752,137136,137137],{"start":60},[755,137138,137139],{},"常用属性",[2122,137141],{"style":127038,"src":137142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[24,137144,137145],{"className":26,"code":136899,"language":28,"meta":29,"style":29},[31,137146,137147],{"__ignoreMap":29},[34,137148,137149,137151,137153,137155,137157,137159,137161,137163,137165,137167,137169,137171],{"class":36,"line":37},[34,137150,41],{"class":40},[34,137152,28834],{"class":44},[34,137154,55882],{"class":149},[34,137156,153],{"class":40},[34,137158,136914],{"class":156},[34,137160,93053],{"class":149},[34,137162,136919],{"class":149},[34,137164,136922],{"class":149},[34,137166,136925],{"class":149},[34,137168,55957],{"class":40},[34,137170,28834],{"class":44},[34,137172,48],{"class":40},[108,137174,137175],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22650,137177,137179],{"id":137178},"_14123-总结","14.1.2.3 总结",[1800,137181,137182,137185,137188,137191,137194],{},[755,137183,137184],{},"音频标签和视频标签使用方式基本一致",[755,137186,137187],{},"浏览器支持情况不同",[755,137189,137190],{},"谷歌浏览器把音频和视频自动播放禁止了",[755,137192,137193],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[755,137195,137196],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[19,137198,137200],{"id":137199},"_1413-表单元素","14.1.3 表单元素",[22650,137202,137204],{"id":137203},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2122,137206],{"style":127038,"src":137207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[24,137209,137211],{"className":26,"code":137210,"language":28,"meta":29,"style":29},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[31,137212,137213],{"__ignoreMap":29},[34,137214,137215,137217,137219,137221,137223,137225,137227,137229,137232,137234,137236,137239],{"class":36,"line":37},[34,137216,41],{"class":40},[34,137218,669],{"class":44},[34,137220,54469],{"class":149},[34,137222,153],{"class":40},[34,137224,63337],{"class":156},[34,137226,15573],{"class":149},[34,137228,153],{"class":40},[34,137230,137231],{"class":156},"\"username\"",[34,137233,61662],{"class":149},[34,137235,153],{"class":40},[34,137237,137238],{"class":156},"\"请输入用户名\"",[34,137240,48],{"class":40},[2122,137242],{"style":127038,"src":137243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22650,137245,137247],{"id":137246},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2122,137249],{"style":127038,"src":137250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[108,137252,137253],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[108,137255,137256],{},"快捷操作：",[2122,137258],{"style":127038,"src":137259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[108,137261,137262],{},"例子1：",[24,137264,137266],{"className":26,"code":137265,"language":28,"meta":29,"style":29},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[31,137267,137268,137291,137318,137347,137366],{"__ignoreMap":29},[34,137269,137270,137272,137274,137276,137278,137281,137284,137286,137289],{"class":36,"line":37},[34,137271,41],{"class":40},[34,137273,67263],{"class":44},[34,137275,67266],{"class":149},[34,137277,153],{"class":40},[34,137279,137280],{"class":156},"\"\u002Fsubmit\"",[34,137282,137283],{"class":149}," method",[34,137285,153],{"class":40},[34,137287,137288],{"class":156},"\"post\"",[34,137290,48],{"class":40},[34,137292,137293,137295,137297,137299,137301,137303,137305,137307,137309,137311,137313,137316],{"class":36,"line":51},[34,137294,52790],{"class":40},[34,137296,669],{"class":44},[34,137298,54469],{"class":149},[34,137300,153],{"class":40},[34,137302,63337],{"class":156},[34,137304,15573],{"class":149},[34,137306,153],{"class":40},[34,137308,137231],{"class":156},[34,137310,61662],{"class":149},[34,137312,153],{"class":40},[34,137314,137315],{"class":156},"\"用户名\"",[34,137317,48],{"class":40},[34,137319,137320,137322,137324,137326,137328,137331,137333,137335,137338,137340,137342,137345],{"class":36,"line":60},[34,137321,52790],{"class":40},[34,137323,669],{"class":44},[34,137325,54469],{"class":149},[34,137327,153],{"class":40},[34,137329,137330],{"class":156},"\"password\"",[34,137332,15573],{"class":149},[34,137334,153],{"class":40},[34,137336,137337],{"class":156},"\"pwd\"",[34,137339,61662],{"class":149},[34,137341,153],{"class":40},[34,137343,137344],{"class":156},"\"密码\"",[34,137346,48],{"class":40},[34,137348,137349,137351,137353,137355,137357,137359,137362,137364],{"class":36,"line":76},[34,137350,52790],{"class":40},[34,137352,54532],{"class":44},[34,137354,54469],{"class":149},[34,137356,153],{"class":40},[34,137358,67286],{"class":156},[34,137360,137361],{"class":40},">提交\u003C\u002F",[34,137363,54532],{"class":44},[34,137365,48],{"class":40},[34,137367,137368,137370,137372],{"class":36,"line":93},[34,137369,102],{"class":40},[34,137371,67263],{"class":44},[34,137373,48],{"class":40},[2122,137375],{"style":127038,"src":137376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[108,137378,137379],{},"value是表单域的内容",[108,137381,137382],{},"例子2：",[24,137384,137385],{"className":26,"code":137265,"language":28,"meta":29,"style":29},[31,137386,137387,137407,137433,137459,137477],{"__ignoreMap":29},[34,137388,137389,137391,137393,137395,137397,137399,137401,137403,137405],{"class":36,"line":37},[34,137390,41],{"class":40},[34,137392,67263],{"class":44},[34,137394,67266],{"class":149},[34,137396,153],{"class":40},[34,137398,137280],{"class":156},[34,137400,137283],{"class":149},[34,137402,153],{"class":40},[34,137404,137288],{"class":156},[34,137406,48],{"class":40},[34,137408,137409,137411,137413,137415,137417,137419,137421,137423,137425,137427,137429,137431],{"class":36,"line":51},[34,137410,52790],{"class":40},[34,137412,669],{"class":44},[34,137414,54469],{"class":149},[34,137416,153],{"class":40},[34,137418,63337],{"class":156},[34,137420,15573],{"class":149},[34,137422,153],{"class":40},[34,137424,137231],{"class":156},[34,137426,61662],{"class":149},[34,137428,153],{"class":40},[34,137430,137315],{"class":156},[34,137432,48],{"class":40},[34,137434,137435,137437,137439,137441,137443,137445,137447,137449,137451,137453,137455,137457],{"class":36,"line":60},[34,137436,52790],{"class":40},[34,137438,669],{"class":44},[34,137440,54469],{"class":149},[34,137442,153],{"class":40},[34,137444,137330],{"class":156},[34,137446,15573],{"class":149},[34,137448,153],{"class":40},[34,137450,137337],{"class":156},[34,137452,61662],{"class":149},[34,137454,153],{"class":40},[34,137456,137344],{"class":156},[34,137458,48],{"class":40},[34,137460,137461,137463,137465,137467,137469,137471,137473,137475],{"class":36,"line":76},[34,137462,52790],{"class":40},[34,137464,54532],{"class":44},[34,137466,54469],{"class":149},[34,137468,153],{"class":40},[34,137470,67286],{"class":156},[34,137472,137361],{"class":40},[34,137474,54532],{"class":44},[34,137476,48],{"class":40},[34,137478,137479,137481,137483],{"class":36,"line":93},[34,137480,102],{"class":40},[34,137482,67263],{"class":44},[34,137484,48],{"class":40},[2122,137486],{"style":127038,"src":137487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137489,137491],{"id":137490},"_142-css新特性","14.2 CSS新特性",[19,137493,137495],{"id":137494},"_1421-新增选择器","14.2.1 新增选择器",[22650,137497,137499],{"id":137498},"_14211-属性选择器","14.2.1.1 属性选择器",[2122,137501],{"style":127038,"src":137502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[24,137504,137506],{"className":196,"code":137505,"language":198,"meta":29,"style":29},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[31,137507,137508,137523,137539],{"__ignoreMap":29},[34,137509,137510,137512,137514,137516,137518,137520],{"class":36,"line":37},[34,137511,669],{"class":44},[34,137513,1684],{"class":40},[34,137515,103737],{"class":149},[34,137517,153],{"class":87},[34,137519,63337],{"class":156},[34,137521,137522],{"class":40},"] {\n",[34,137524,137525,137527,137529,137531,137533,137535,137537],{"class":36,"line":51},[34,137526,71528],{"class":63},[34,137528,67],{"class":40},[34,137530,1013],{"class":63},[34,137532,88],{"class":87},[34,137534,52168],{"class":63},[34,137536,130633],{"class":63},[34,137538,73],{"class":40},[34,137540,137541],{"class":36,"line":60},[34,137542,241],{"class":40},[2122,137544],{"style":127038,"src":137545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[108,137547,830],{},[1800,137549,137550,137553,137556,137559],{},[755,137551,137552],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[755,137554,137555],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[755,137557,137558],{},"属性选择器也可以选择出来自定义的属性",[755,137560,137561,137563],{},[111,137562,9678],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22650,137565,137567],{"id":137566},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2122,137569],{"style":127038,"src":137570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[752,137572,137573],{},[755,137574,137575],{},"fist-child",[24,137577,137579],{"className":196,"code":137578,"language":198,"meta":29,"style":29},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[31,137580,137581,137586,137601,137621,137639],{"__ignoreMap":29},[34,137582,137583],{"class":36,"line":37},[34,137584,137585],{"class":205},"\u002F* 属性选择器 *\u002F\n",[34,137587,137588,137590,137592,137594,137596,137598],{"class":36,"line":51},[34,137589,669],{"class":44},[34,137591,1684],{"class":40},[34,137593,103737],{"class":149},[34,137595,153],{"class":87},[34,137597,63337],{"class":156},[34,137599,137600],{"class":40},"] { }\n",[34,137602,137603,137605,137607,137609,137612,137615,137618],{"class":36,"line":60},[34,137604,669],{"class":44},[34,137606,1684],{"class":40},[34,137608,15347],{"class":149},[34,137610,137611],{"class":87},"^=",[34,137613,137614],{"class":156},"\"icon\"",[34,137616,137617],{"class":40},"] { }  ",[34,137619,137620],{"class":205},"\u002F* 以 icon 开头 *\u002F\n",[34,137622,137623,137625,137627,137629,137632,137634,137636],{"class":36,"line":76},[34,137624,669],{"class":44},[34,137626,1684],{"class":40},[34,137628,15347],{"class":149},[34,137630,137631],{"class":87},"$=",[34,137633,137614],{"class":156},[34,137635,137617],{"class":40},[34,137637,137638],{"class":205},"\u002F* 以 icon 结尾 *\u002F\n",[34,137640,137641,137643,137645,137647,137650,137652,137654],{"class":36,"line":93},[34,137642,669],{"class":44},[34,137644,1684],{"class":40},[34,137646,15347],{"class":149},[34,137648,137649],{"class":87},"*=",[34,137651,137614],{"class":156},[34,137653,137617],{"class":40},[34,137655,137656],{"class":205},"\u002F* 包含 icon *\u002F\n",[108,137658,137659],{},"ul的第一个儿子文本为红色",[108,137661,137662],{},"一定要在冒号前加空格，不然就是选中所有的了",[24,137664,137666],{"className":196,"code":137665,"language":198,"meta":29,"style":29},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[31,137667,137668,137674,137684,137688,137692,137697,137710,137723,137739,137756,137773],{"__ignoreMap":29},[34,137669,137670,137672],{"class":36,"line":37},[34,137671,127469],{"class":149},[34,137673,57],{"class":40},[34,137675,137676,137678,137680,137682],{"class":36,"line":51},[34,137677,217],{"class":63},[34,137679,67],{"class":40},[34,137681,58064],{"class":63},[34,137683,73],{"class":40},[34,137685,137686],{"class":36,"line":60},[34,137687,241],{"class":40},[34,137689,137690],{"class":36,"line":76},[34,137691,136514],{"class":40},[34,137693,137694],{"class":36,"line":93},[34,137695,137696],{"class":205},"\u002F* 结构伪类选择器 *\u002F\n",[34,137698,137699,137701,137704,137707],{"class":36,"line":99},[34,137700,755],{"class":44},[34,137702,137703],{"class":149},":first-child",[34,137705,137706],{"class":40}," { }           ",[34,137708,137709],{"class":205},"\u002F* 第一个 *\u002F\n",[34,137711,137712,137714,137717,137720],{"class":36,"line":353},[34,137713,755],{"class":44},[34,137715,137716],{"class":149},":last-child",[34,137718,137719],{"class":40}," { }            ",[34,137721,137722],{"class":205},"\u002F* 最后一个 *\u002F\n",[34,137724,137725,137727,137729,137731,137733,137736],{"class":36,"line":359},[34,137726,755],{"class":44},[34,137728,129967],{"class":149},[34,137730,801],{"class":40},[34,137732,875],{"class":63},[34,137734,137735],{"class":40},") { }          ",[34,137737,137738],{"class":205},"\u002F* 第2个 *\u002F\n",[34,137740,137741,137743,137745,137747,137750,137753],{"class":36,"line":579},[34,137742,755],{"class":44},[34,137744,129967],{"class":149},[34,137746,801],{"class":40},[34,137748,137749],{"class":63},"2n",[34,137751,137752],{"class":40},") { }         ",[34,137754,137755],{"class":205},"\u002F* 偶数 *\u002F\n",[34,137757,137758,137760,137762,137764,137767,137770],{"class":36,"line":589},[34,137759,755],{"class":44},[34,137761,129967],{"class":149},[34,137763,801],{"class":40},[34,137765,137766],{"class":63},"2n+1",[34,137768,137769],{"class":40},") { }       ",[34,137771,137772],{"class":205},"\u002F* 奇数 *\u002F\n",[34,137774,137775,137777,137779,137781,137784,137786],{"class":36,"line":601},[34,137776,755],{"class":44},[34,137778,129967],{"class":149},[34,137780,801],{"class":40},[34,137782,137783],{"class":63},"-n+3",[34,137785,137769],{"class":40},[34,137787,137788],{"class":205},"\u002F* 前3个 *\u002F\n",[52258,137790,137793],{"className":137791},[137792],"example","\n  示例内容\n",[108,137795,137796],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1800,137798,137799],{},[755,137800,137801,137804],{},[31,137802,137803],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[108,137806,137807],{},"也就是说它选择的是熊大",[752,137809,137810],{"start":99},[755,137811,137812],{},"权重",[24,137814,137816],{"className":196,"code":137815,"language":198,"meta":29,"style":29},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[31,137817,137818,137822,137832,137842,137856,137870,137884],{"__ignoreMap":29},[34,137819,137820],{"class":36,"line":37},[34,137821,137696],{"class":205},[34,137823,137824,137826,137828,137830],{"class":36,"line":51},[34,137825,755],{"class":44},[34,137827,137703],{"class":149},[34,137829,137706],{"class":40},[34,137831,137709],{"class":205},[34,137833,137834,137836,137838,137840],{"class":36,"line":60},[34,137835,755],{"class":44},[34,137837,137716],{"class":149},[34,137839,137719],{"class":40},[34,137841,137722],{"class":205},[34,137843,137844,137846,137848,137850,137852,137854],{"class":36,"line":76},[34,137845,755],{"class":44},[34,137847,129967],{"class":149},[34,137849,801],{"class":40},[34,137851,875],{"class":63},[34,137853,137735],{"class":40},[34,137855,137738],{"class":205},[34,137857,137858,137860,137862,137864,137866,137868],{"class":36,"line":93},[34,137859,755],{"class":44},[34,137861,129967],{"class":149},[34,137863,801],{"class":40},[34,137865,137749],{"class":63},[34,137867,137752],{"class":40},[34,137869,137755],{"class":205},[34,137871,137872,137874,137876,137878,137880,137882],{"class":36,"line":99},[34,137873,755],{"class":44},[34,137875,129967],{"class":149},[34,137877,801],{"class":40},[34,137879,137766],{"class":63},[34,137881,137769],{"class":40},[34,137883,137772],{"class":205},[34,137885,137886,137888,137890,137892,137894,137896],{"class":36,"line":353},[34,137887,755],{"class":44},[34,137889,129967],{"class":149},[34,137891,801],{"class":40},[34,137893,137783],{"class":63},[34,137895,137769],{"class":40},[34,137897,137788],{"class":205},[108,137899,137900],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22650,137902,137904],{"id":137903},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[108,137906,137907],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2122,137909],{"style":127038,"src":137910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[752,137912,137913],{},[755,137914,830],{},[1800,137916,137917,137920,137923,137926,137929,137932],{},[755,137918,137919],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[755,137921,137922],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[755,137924,137925],{},"语法： element::before {}",[755,137927,137928],{},"before 和 after 必须有 content 属性",[755,137930,137931],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[755,137933,137934],{},"伪元素选择器和标签选择器一样，权重为 1",[752,137936,137937],{"start":51},[755,137938,137939],{},"实例",[24,137941,137942],{"className":196,"code":137815,"language":198,"meta":29,"style":29},[31,137943,137944,137948,137958,137968,137982,137996,138010],{"__ignoreMap":29},[34,137945,137946],{"class":36,"line":37},[34,137947,137696],{"class":205},[34,137949,137950,137952,137954,137956],{"class":36,"line":51},[34,137951,755],{"class":44},[34,137953,137703],{"class":149},[34,137955,137706],{"class":40},[34,137957,137709],{"class":205},[34,137959,137960,137962,137964,137966],{"class":36,"line":60},[34,137961,755],{"class":44},[34,137963,137716],{"class":149},[34,137965,137719],{"class":40},[34,137967,137722],{"class":205},[34,137969,137970,137972,137974,137976,137978,137980],{"class":36,"line":76},[34,137971,755],{"class":44},[34,137973,129967],{"class":149},[34,137975,801],{"class":40},[34,137977,875],{"class":63},[34,137979,137735],{"class":40},[34,137981,137738],{"class":205},[34,137983,137984,137986,137988,137990,137992,137994],{"class":36,"line":93},[34,137985,755],{"class":44},[34,137987,129967],{"class":149},[34,137989,801],{"class":40},[34,137991,137749],{"class":63},[34,137993,137752],{"class":40},[34,137995,137755],{"class":205},[34,137997,137998,138000,138002,138004,138006,138008],{"class":36,"line":99},[34,137999,755],{"class":44},[34,138001,129967],{"class":149},[34,138003,801],{"class":40},[34,138005,137766],{"class":63},[34,138007,137769],{"class":40},[34,138009,137772],{"class":205},[34,138011,138012,138014,138016,138018,138020,138022],{"class":36,"line":353},[34,138013,755],{"class":44},[34,138015,129967],{"class":149},[34,138017,801],{"class":40},[34,138019,137783],{"class":63},[34,138021,137769],{"class":40},[34,138023,137788],{"class":205},[2122,138025],{"style":127038,"src":138026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[752,138028,138029],{"start":60},[755,138030,138031],{},"使用场景1",[2122,138033],{"style":127038,"src":138034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[108,138036,138037],{},"不需要再加盒子来整红色那部分了",[24,138039,138041],{"className":196,"code":138040,"language":198,"meta":29,"style":29},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[31,138042,138043,138048,138057,138068,138078,138082,138091,138102,138112],{"__ignoreMap":29},[34,138044,138045],{"class":36,"line":37},[34,138046,138047],{"class":205},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[34,138049,138050,138052,138055],{"class":36,"line":51},[34,138051,52258],{"class":44},[34,138053,138054],{"class":149},"::before",[34,138056,57],{"class":40},[34,138058,138059,138062,138064,138066],{"class":36,"line":60},[34,138060,138061],{"class":63},"  content",[34,138063,67],{"class":40},[34,138065,8305],{"class":156},[34,138067,73],{"class":40},[34,138069,138070,138072,138074,138076],{"class":36,"line":76},[34,138071,128669],{"class":63},[34,138073,67],{"class":40},[34,138075,61512],{"class":63},[34,138077,73],{"class":40},[34,138079,138080],{"class":36,"line":93},[34,138081,241],{"class":40},[34,138083,138084,138086,138089],{"class":36,"line":99},[34,138085,52258],{"class":44},[34,138087,138088],{"class":149},"::after",[34,138090,57],{"class":40},[34,138092,138093,138095,138097,138100],{"class":36,"line":353},[34,138094,138061],{"class":63},[34,138096,67],{"class":40},[34,138098,138099],{"class":156},"\"→\"",[34,138101,73],{"class":40},[34,138103,138104,138106,138108,138110],{"class":36,"line":359},[34,138105,217],{"class":63},[34,138107,67],{"class":40},[34,138109,62710],{"class":63},[34,138111,73],{"class":40},[34,138113,138114],{"class":36,"line":579},[34,138115,241],{"class":40},[2122,138117],{"style":127038,"src":138118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[108,138120,138121],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2122,138123],{"style":127038,"src":138124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[108,138126,138127],{},"但是在引用时需要先转义一下",[108,138129,138130],{},"content='\\e930'",[752,138132,138133],{"start":76},[755,138134,138135],{},"使用场景2",[108,138137,138138],{},"仿土豆效果",[108,138140,138141],{},"通过使用伪元素选择器可以减少body中盒子的数量",[24,138143,138144],{"className":196,"code":138040,"language":198,"meta":29,"style":29},[31,138145,138146,138150,138158,138168,138178,138182,138190,138200,138210],{"__ignoreMap":29},[34,138147,138148],{"class":36,"line":37},[34,138149,138047],{"class":205},[34,138151,138152,138154,138156],{"class":36,"line":51},[34,138153,52258],{"class":44},[34,138155,138054],{"class":149},[34,138157,57],{"class":40},[34,138159,138160,138162,138164,138166],{"class":36,"line":60},[34,138161,138061],{"class":63},[34,138163,67],{"class":40},[34,138165,8305],{"class":156},[34,138167,73],{"class":40},[34,138169,138170,138172,138174,138176],{"class":36,"line":76},[34,138171,128669],{"class":63},[34,138173,67],{"class":40},[34,138175,61512],{"class":63},[34,138177,73],{"class":40},[34,138179,138180],{"class":36,"line":93},[34,138181,241],{"class":40},[34,138183,138184,138186,138188],{"class":36,"line":99},[34,138185,52258],{"class":44},[34,138187,138088],{"class":149},[34,138189,57],{"class":40},[34,138191,138192,138194,138196,138198],{"class":36,"line":353},[34,138193,138061],{"class":63},[34,138195,67],{"class":40},[34,138197,138099],{"class":156},[34,138199,73],{"class":40},[34,138201,138202,138204,138206,138208],{"class":36,"line":359},[34,138203,217],{"class":63},[34,138205,67],{"class":40},[34,138207,62710],{"class":63},[34,138209,73],{"class":40},[34,138211,138212],{"class":36,"line":579},[34,138213,241],{"class":40},[2122,138215],{"style":127038,"src":138216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[752,138218,138219],{"start":93},[755,138220,138221],{},"使用场景3",[108,138223,138224],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[24,138226,138228],{"className":196,"code":138227,"language":198,"meta":29,"style":29},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[31,138229,138230,138236,138246,138250,138254,138258,138266,138276,138286,138290,138298,138308,138318],{"__ignoreMap":29},[34,138231,138232,138234],{"class":36,"line":37},[34,138233,130901],{"class":149},[34,138235,57],{"class":40},[34,138237,138238,138240,138242,138244],{"class":36,"line":51},[34,138239,131533],{"class":63},[34,138241,67],{"class":40},[34,138243,24388],{"class":63},[34,138245,73],{"class":40},[34,138247,138248],{"class":36,"line":60},[34,138249,241],{"class":40},[34,138251,138252],{"class":36,"line":76},[34,138253,136514],{"class":40},[34,138255,138256],{"class":36,"line":93},[34,138257,138047],{"class":205},[34,138259,138260,138262,138264],{"class":36,"line":99},[34,138261,52258],{"class":44},[34,138263,138054],{"class":149},[34,138265,57],{"class":40},[34,138267,138268,138270,138272,138274],{"class":36,"line":353},[34,138269,138061],{"class":63},[34,138271,67],{"class":40},[34,138273,8305],{"class":156},[34,138275,73],{"class":40},[34,138277,138278,138280,138282,138284],{"class":36,"line":359},[34,138279,128669],{"class":63},[34,138281,67],{"class":40},[34,138283,61512],{"class":63},[34,138285,73],{"class":40},[34,138287,138288],{"class":36,"line":579},[34,138289,241],{"class":40},[34,138291,138292,138294,138296],{"class":36,"line":589},[34,138293,52258],{"class":44},[34,138295,138088],{"class":149},[34,138297,57],{"class":40},[34,138299,138300,138302,138304,138306],{"class":36,"line":601},[34,138301,138061],{"class":63},[34,138303,67],{"class":40},[34,138305,138099],{"class":156},[34,138307,73],{"class":40},[34,138309,138310,138312,138314,138316],{"class":36,"line":613},[34,138311,217],{"class":63},[34,138313,67],{"class":40},[34,138315,62710],{"class":63},[34,138317,73],{"class":40},[34,138319,138320],{"class":36,"line":618},[34,138321,241],{"class":40},[108,138323,138324],{},"div {\nmargin: 0 auto;\n}",[24,138326,138329],{"className":138327,"code":138328,"language":5840},[5838],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[31,138330,138328],{"__ignoreMap":29},[108,138332,138333],{},"如果想让多个元素都发生变化",[108,138335,138336],{},"不能如下操作：",[108,138338,138339],{},"transition: width 2s ease 0.5s;",[108,138341,138342],{},"transition: height 2s ease 0.5s;不对！！！",[108,138344,138345],{},"上方会样式冲突，导致不显示任何过渡效果",[108,138347,138348],{},"使用如下：加逗号隔开",[108,138350,138351],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[108,138353,138354],{},"transition all 2s ease;",[19,138356,138358],{"id":138357},"_1426-过渡练习","14.2.6 过渡练习",[752,138360,138361],{},[755,138362,138363],{},"进度条",[2122,138365],{"style":127038,"src":138366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[24,138368,138370],{"className":196,"code":138369,"language":198,"meta":29,"style":29},"div {\n  transition: all 0.3s ease;\n}\n",[31,138371,138372,138378,138396],{"__ignoreMap":29},[34,138373,138374,138376],{"class":36,"line":37},[34,138375,52258],{"class":44},[34,138377,57],{"class":40},[34,138379,138380,138383,138385,138387,138390,138392,138394],{"class":36,"line":51},[34,138381,138382],{"class":63},"  transition",[34,138384,67],{"class":40},[34,138386,28772],{"class":63},[34,138388,138389],{"class":63}," 0.3",[34,138391,1490],{"class":87},[34,138393,79310],{"class":63},[34,138395,73],{"class":40},[34,138397,138398],{"class":36,"line":60},[34,138399,241],{"class":40},[752,138401,138402],{"start":51},[755,138403,138404],{},"小米logo",[108,138406,138407],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[24,138409,138411],{"className":196,"code":138410,"language":198,"meta":29,"style":29},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[31,138412,138413,138418,138424,138440,138445],{"__ignoreMap":29},[34,138414,138415],{"class":36,"line":37},[34,138416,138417],{"class":205},"\u002F* CSS3 过渡 *\u002F\n",[34,138419,138420,138422],{"class":36,"line":51},[34,138421,52258],{"class":44},[34,138423,57],{"class":40},[34,138425,138426,138428,138430,138432,138434,138436,138438],{"class":36,"line":60},[34,138427,138382],{"class":63},[34,138429,67],{"class":40},[34,138431,28772],{"class":63},[34,138433,138389],{"class":63},[34,138435,1490],{"class":87},[34,138437,79310],{"class":63},[34,138439,73],{"class":40},[34,138441,138442],{"class":36,"line":76},[34,138443,138444],{"class":205},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[34,138446,138447],{"class":36,"line":93},[34,138448,241],{"class":40},[108,138450,138451],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[45,138453,138454],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":138456},[138457,138462],{"id":136787,"depth":51,"text":136788,"children":138458},[138459,138460,138461],{"id":136791,"depth":60,"text":136792},{"id":136868,"depth":60,"text":136869},{"id":137199,"depth":60,"text":137200},{"id":137490,"depth":51,"text":137491,"children":138463},[138464,138465],{"id":137494,"depth":60,"text":137495},{"id":138357,"depth":60,"text":138358},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136779,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138472,"title":138473,"body":138474,"description":723,"extension":724,"meta":140218,"navigation":726,"path":140219,"seo":140220,"stem":140221,"__hash__":140222},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138475,"toc":140199},[138476,138479,138483,138486,138492,138498,138502,138504,138507,138510,138513,138516,138519,138522,138525,138529,138533,138536,138539,138542,138546,138549,138552,138557,138560,138563,138566,138570,138573,138582,138585,138588,138592,138595,138598,138603,138610,138624,138632,138639,138644,138647,138650,138653,138660,138664,138670,138676,138679,138682,138687,138693,138695,138703,138708,138711,138717,138719,138724,138729,138732,138734,138739,138742,138747,138752,138786,138790,138794,138797,138801,138804,138890,138893,138930,138933,138969,138973,138978,138991,139045,139047,139075,139077,139105,139111,139125,139127,139171,139173,139217,139220,139227,139238,139240,139267,139269,139295,139302,139318,139320,139414,139416,139510,139517,139520,139525,139531,139605,139608,139610,139646,139648,139684,139687,139694,139713,139716,139719,139721,139746,139748,139772,139775,139778,139808,139812,139815,139878,139880,139946,139948,140012,140015,140047,140049,140075,140077,140103,140106,140137,140139,140165,140167,140193,140196],[10,138477,138473],{"id":138478},"_15-品优购项目上篇-搭建与公共模块",[14,138480,138482],{"id":138481},"_151-项目规划","15.1 项目规划",[2122,138484],{"style":127038,"src":138485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[108,138487,138488,138491],{},[111,138489,138490],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[108,138493,138494,138497],{},[111,138495,138496],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138499,138501],{"id":138500},"_152-项目介绍","15.2 项目介绍",[108,138503,138490],{},[2122,138505],{"style":127038,"src":138506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[108,138508,138509],{},"主页：",[2122,138511],{"style":127038,"src":138512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[108,138514,138515],{},"列表页：",[2122,138517],{"style":127038,"src":138518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[108,138520,138521],{},"注册页：",[2122,138523],{"style":127038,"src":138524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138526,138528],{"id":138527},"_153-项目搭建工作","15.3 项目搭建工作",[19,138530,138532],{"id":138531},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2122,138534],{"style":127038,"src":138535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[108,138537,138538],{},"经常更换的图片要放到upload文件夹中",[108,138540,138541],{},"不经常换的放到images文件夹中",[19,138543,138545],{"id":138544},"_1532-创建文件如下","15.3.2 创建文件如下",[2122,138547],{"style":127038,"src":138548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2122,138550],{"style":127038,"src":138551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[108,138553,138554],{},[111,138555,138556],{},"初始化样式：",[108,138558,138559],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[108,138561,138562],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[108,138564,138565],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[19,138567,138569],{"id":138568},"_1533-项目模块化开发","15.3.3 项目模块化开发",[108,138571,138572],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[108,138574,138575,138576,138581],{},"这里最典型的应用就是 ",[111,138577,138578],{},[31,138579,138580],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2122,138583],{"style":127038,"src":138584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[108,138586,138587],{},"通过link方法来引入",[19,138589,138591],{"id":138590},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2122,138593],{"style":127038,"src":138594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[108,138596,138597],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[752,138599,138600],{},[755,138601,138602],{},"制作favicon图标",[108,138604,138605,138606,138609],{},"①把品优购图标切成 ",[31,138607,138608],{},"png"," 图片",[108,138611,138612,138613,138615,138616,138619,138620],{},"②把 ",[31,138614,138608],{}," 图片转换为 ",[31,138617,138618],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[520,138621,138622],{"href":138622,"rel":138623},"http:\u002F\u002Fwww.bitbug.net\u002F",[24517],[752,138625,138626,138629],{"start":51},[755,138627,138628],{},"favicon图标放到网站根目录下",[755,138630,138631],{},"HTML页面引入favicon",[108,138633,138634,138635,138638],{},"在html 页面里面的 ",[31,138636,138637],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[108,138640,138641],{},[31,138642,138643],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[108,138645,138646],{},"复制这行代码或者在生成这个的网站进行复制",[2122,138648],{"style":127038,"src":138649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[108,138651,138652],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[108,138654,138655,138656],{},"例如:",[520,138657,138658],{"href":138658,"rel":138659},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24517],[19,138661,138663],{"id":138662},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[108,138665,138666,138669],{},[111,138667,138668],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[108,138671,138672,138675],{},[111,138673,138674],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[108,138677,138678],{},"页面必须有三个标签用来符合 SEO 优化",[2122,138680],{"style":127038,"src":138681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[752,138683,138684],{},[755,138685,138686],{},"title网站标题",[108,138688,138689,138692],{},[111,138690,138691],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[108,138694,69428],{},[1800,138696,138697,138700],{},[755,138698,138699],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[755,138701,138702],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[752,138704,138705],{"start":51},[755,138706,138707],{},"description网站描述",[108,138709,138710],{},"简要说明我们网站主要是做什么的",[108,138712,138713,138716],{},[111,138714,138715],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[108,138718,69428],{},[108,138720,138721],{},[31,138722,138723],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[752,138725,138726],{"start":60},[755,138727,138728],{},"keywords关键词",[108,138730,138731],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[108,138733,69428],{},[108,138735,138736],{},[31,138737,138738],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[108,138740,138741],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[108,138743,138744],{},[111,138745,138746],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[752,138748,138749],{"start":76},[755,138750,138751],{},"代码总结",[24,138753,138754],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,138755,138756,138760,138774,138778],{"__ignoreMap":29},[34,138757,138758],{"class":36,"line":37},[34,138759,131164],{"class":205},[34,138761,138762,138764,138766,138768,138770,138772],{"class":36,"line":51},[34,138763,41],{"class":40},[34,138765,52258],{"class":44},[34,138767,54132],{"class":149},[34,138769,153],{"class":40},[34,138771,131177],{"class":156},[34,138773,48],{"class":40},[34,138775,138776],{"class":36,"line":60},[34,138777,131184],{"class":40},[34,138779,138780,138782,138784],{"class":36,"line":76},[34,138781,102],{"class":40},[34,138783,52258],{"class":44},[34,138785,48],{"class":40},[14,138787,138789],{"id":138788},"_154-项目公共部分制作","15.4 项目公共部分制作",[19,138791,138793],{"id":138792},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2122,138795],{"style":127038,"src":138796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[19,138798,138800],{"id":138799},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[108,138802,138803],{},"布局思路：",[1800,138805,138806,138809,138812,138834,138867],{},[755,138807,138808],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[755,138810,138811],{},"里面包含版心的盒子",[755,138813,138814,138815],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1800,138816,138817,138825,138831],{},[755,138818,138819,138820,22152,138822,138824],{},"1 号盒子 里面包含一个",[31,138821,1800],{},[31,138823,1800],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[755,138826,138827,138828,138830],{},"里面的内容是水平排列，所以需要给",[31,138829,755],{},"设置浮动",[755,138832,138833],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[755,138835,138836,138837],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1800,138838,138839,138853,138858],{},[755,138840,138841,138842,22152,138844,138846,138847,138849,138850,138852],{},"2 号盒子 里面包含一个",[31,138843,1800],{},[31,138845,1800],{},"包裹",[31,138848,755],{},"，中间的",[31,138851,1714],{},"可以用样式去设置，也可以用字符 |",[755,138854,138855,138856,138830],{},"里面内容水平排列，给",[31,138857,755],{},[755,138859,138860,138861,138863,138864,138866],{},"找到里面所有偶数的 ",[31,138862,755],{}," 设置样式（偶数的 ",[31,138865,755],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[755,138868,138869,138870],{},"需要用到字体图标",[1800,138871,138872,138878,138881,138884,138887],{},[755,138873,138874,138875],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[31,138876,138877],{},"arrow-icon",[755,138879,138880],{},"先要引入字体图片的资源",[755,138882,138883],{},"在样式里面利用 font-face 来进行声明",[755,138885,138886],{},"在伪元素的 content属性设置 图标的编码",[755,138888,138889],{},"给伪元素设置font-family属性",[108,138891,138892],{},"结构实例代码：",[24,138894,138896],{"className":196,"code":138895,"language":198,"meta":29,"style":29},"div::before {\n  content: \"\";\n  display: block;\n}\n",[31,138897,138898,138906,138916,138926],{"__ignoreMap":29},[34,138899,138900,138902,138904],{"class":36,"line":37},[34,138901,52258],{"class":44},[34,138903,138054],{"class":149},[34,138905,57],{"class":40},[34,138907,138908,138910,138912,138914],{"class":36,"line":51},[34,138909,138061],{"class":63},[34,138911,67],{"class":40},[34,138913,8305],{"class":156},[34,138915,73],{"class":40},[34,138917,138918,138920,138922,138924],{"class":36,"line":60},[34,138919,128669],{"class":63},[34,138921,67],{"class":40},[34,138923,61512],{"class":63},[34,138925,73],{"class":40},[34,138927,138928],{"class":36,"line":76},[34,138929,241],{"class":40},[108,138931,138932],{},"样式实例代码：",[24,138934,138935],{"className":196,"code":138895,"language":198,"meta":29,"style":29},[31,138936,138937,138945,138955,138965],{"__ignoreMap":29},[34,138938,138939,138941,138943],{"class":36,"line":37},[34,138940,52258],{"class":44},[34,138942,138054],{"class":149},[34,138944,57],{"class":40},[34,138946,138947,138949,138951,138953],{"class":36,"line":51},[34,138948,138061],{"class":63},[34,138950,67],{"class":40},[34,138952,8305],{"class":156},[34,138954,73],{"class":40},[34,138956,138957,138959,138961,138963],{"class":36,"line":60},[34,138958,128669],{"class":63},[34,138960,67],{"class":40},[34,138962,61512],{"class":63},[34,138964,73],{"class":40},[34,138966,138967],{"class":36,"line":76},[34,138968,241],{"class":40},[19,138970,138972],{"id":138971},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1800,138974,138975],{},[755,138976,138977],{},"header 盒子必须要有高度",[108,138979,138980,138981,138983,138984],{},"1 号盒子是 ",[31,138982,132065],{}," 标志定位，在正常开发过程中， ",[111,138985,138986,138987,138990],{},"logo的布局其实是有讲究的，需要进行 ",[31,138988,138989],{},"logoSEO","的优化 （★★★）",[1800,138992,138993,139001,139009,139036],{},[755,138994,138995,138997,138998,139000],{},[31,138996,132065],{}," 里面首先放一个 ",[31,138999,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[755,139002,139003,139005,139006,139008],{},[31,139004,10],{}," 里面再放一个链接，可以返回首页的，把 ",[31,139007,132065],{}," 的背景图片给链接即可",[755,139010,139011,139012],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1800,139013,139014,139029],{},[755,139015,139016,139017,139020,139021,139024,139025,139028],{},"方法1：",[31,139018,139019],{},"text-indent"," 移到盒子外面（",[31,139022,139023],{},"text-indent: -9999px",") ，然后 ",[31,139026,139027],{},"overflow:hidden"," ，淘宝的做法",[755,139030,139031,139032,139035],{},"方法2：直接给 ",[31,139033,139034],{},"font-size: 0;"," 就看不到文字了，京东的做法",[755,139037,139038,139039,139041,139042,139044],{},"最后给链接一个 ",[31,139040,52056],{}," 属性，这样鼠标放到 ",[31,139043,132065],{}," 上就可以看到提示文字了",[108,139046,138892],{},[24,139048,139049],{"className":26,"code":132286,"language":28,"meta":29,"style":29},[31,139050,139051],{"__ignoreMap":29},[34,139052,139053,139055,139057,139059,139061,139063,139065,139067,139069,139071,139073],{"class":36,"line":37},[34,139054,41],{"class":40},[34,139056,520],{"class":44},[34,139058,267],{"class":149},[34,139060,153],{"class":40},[34,139062,132301],{"class":156},[34,139064,132304],{"class":149},[34,139066,153],{"class":40},[34,139068,132309],{"class":156},[34,139070,132312],{"class":40},[34,139072,520],{"class":44},[34,139074,48],{"class":40},[108,139076,138932],{},[24,139078,139079],{"className":26,"code":132286,"language":28,"meta":29,"style":29},[31,139080,139081],{"__ignoreMap":29},[34,139082,139083,139085,139087,139089,139091,139093,139095,139097,139099,139101,139103],{"class":36,"line":37},[34,139084,41],{"class":40},[34,139086,520],{"class":44},[34,139088,267],{"class":149},[34,139090,153],{"class":40},[34,139092,132301],{"class":156},[34,139094,132304],{"class":149},[34,139096,153],{"class":40},[34,139098,132309],{"class":156},[34,139100,132312],{"class":40},[34,139102,520],{"class":44},[34,139104,48],{"class":40},[108,139106,139107,139108,139110],{},"2 号盒子是 ",[31,139109,132078],{}," 搜索模块定位",[1800,139112,139113,139116,139119,139122],{},[755,139114,139115],{},"search盒子利用定位的方式放在对应的位置",[755,139117,139118],{},"search盒子设置绝对定位，header盒子设置相对定位",[755,139120,139121],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[755,139123,139124],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[108,139126,138892],{},[24,139128,139129],{"className":196,"code":132373,"language":198,"meta":29,"style":29},[31,139130,139131,139153,139157,139167],{"__ignoreMap":29},[34,139132,139133,139135,139137,139139,139141,139143,139145,139147,139149,139151],{"class":36,"line":37},[34,139134,52258],{"class":44},[34,139136,13088],{"class":40},[34,139138,108],{"class":44},[34,139140,13088],{"class":40},[34,139142,10],{"class":44},[34,139144,13088],{"class":40},[34,139146,1800],{"class":44},[34,139148,13088],{"class":40},[34,139150,755],{"class":44},[34,139152,57],{"class":40},[34,139154,139155],{"class":36,"line":51},[34,139156,132402],{"class":205},[34,139158,139159,139161,139163,139165],{"class":36,"line":60},[34,139160,128669],{"class":63},[34,139162,67],{"class":40},[34,139164,61512],{"class":63},[34,139166,73],{"class":40},[34,139168,139169],{"class":36,"line":76},[34,139170,241],{"class":40},[108,139172,138932],{},[24,139174,139175],{"className":196,"code":132373,"language":198,"meta":29,"style":29},[31,139176,139177,139199,139203,139213],{"__ignoreMap":29},[34,139178,139179,139181,139183,139185,139187,139189,139191,139193,139195,139197],{"class":36,"line":37},[34,139180,52258],{"class":44},[34,139182,13088],{"class":40},[34,139184,108],{"class":44},[34,139186,13088],{"class":40},[34,139188,10],{"class":44},[34,139190,13088],{"class":40},[34,139192,1800],{"class":44},[34,139194,13088],{"class":40},[34,139196,755],{"class":44},[34,139198,57],{"class":40},[34,139200,139201],{"class":36,"line":51},[34,139202,132402],{"class":205},[34,139204,139205,139207,139209,139211],{"class":36,"line":60},[34,139206,128669],{"class":63},[34,139208,67],{"class":40},[34,139210,61512],{"class":63},[34,139212,73],{"class":40},[34,139214,139215],{"class":36,"line":76},[34,139216,241],{"class":40},[108,139218,139219],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[108,139221,139222,139223,139226],{},"3 号盒子是 ",[31,139224,139225],{},"hotwords"," 热词模块定位",[1800,139228,139229,139232,139235],{},[755,139230,139231],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[755,139233,139234],{},"给里面所有的a标签设置 左右10px的外边距",[755,139236,139237],{},"给第一个a标签设置文字变红色（#c81623）",[108,139239,138892],{},[24,139241,139243],{"className":196,"code":139242,"language":198,"meta":29,"style":29},"div {\n  margin: 0 auto;\n}\n",[31,139244,139245,139251,139263],{"__ignoreMap":29},[34,139246,139247,139249],{"class":36,"line":37},[34,139248,52258],{"class":44},[34,139250,57],{"class":40},[34,139252,139253,139255,139257,139259,139261],{"class":36,"line":51},[34,139254,71105],{"class":63},[34,139256,67],{"class":40},[34,139258,987],{"class":63},[34,139260,52203],{"class":63},[34,139262,73],{"class":40},[34,139264,139265],{"class":36,"line":60},[34,139266,241],{"class":40},[108,139268,138932],{},[24,139270,139271],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,139272,139273,139279,139291],{"__ignoreMap":29},[34,139274,139275,139277],{"class":36,"line":37},[34,139276,52258],{"class":44},[34,139278,57],{"class":40},[34,139280,139281,139283,139285,139287,139289],{"class":36,"line":51},[34,139282,71105],{"class":63},[34,139284,67],{"class":40},[34,139286,987],{"class":63},[34,139288,52203],{"class":63},[34,139290,73],{"class":40},[34,139292,139293],{"class":36,"line":60},[34,139294,241],{"class":40},[108,139296,139297,139298,139301],{},"4 号盒子是 ",[31,139299,139300],{},"shopcar"," 购物车模块",[1800,139303,139304,139309,139312,139315],{},[755,139305,123965,139306,139308],{},[31,139307,139300],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[755,139310,139311],{},"count 统计部分用绝对定位做",[755,139313,139314],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[755,139316,139317],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[108,139319,138892],{},[24,139321,139322],{"className":196,"code":132485,"language":198,"meta":29,"style":29},[31,139323,139324,139328,139342,139346,139360,139364,139378,139382,139396,139400],{"__ignoreMap":29},[34,139325,139326],{"class":36,"line":37},[34,139327,132492],{"class":205},[34,139329,139330,139332,139334,139336,139338,139340],{"class":36,"line":51},[34,139331,132497],{"class":149},[34,139333,80437],{"class":40},[34,139335,129413],{"class":63},[34,139337,67],{"class":40},[34,139339,132506],{"class":63},[34,139341,129983],{"class":40},[34,139343,139344],{"class":36,"line":60},[34,139345,132513],{"class":205},[34,139347,139348,139350,139352,139354,139356,139358],{"class":36,"line":76},[34,139349,132518],{"class":149},[34,139351,80437],{"class":40},[34,139353,129413],{"class":63},[34,139355,67],{"class":40},[34,139357,55408],{"class":63},[34,139359,129983],{"class":40},[34,139361,139362],{"class":36,"line":93},[34,139363,132533],{"class":205},[34,139365,139366,139368,139370,139372,139374,139376],{"class":36,"line":99},[34,139367,132538],{"class":149},[34,139369,80437],{"class":40},[34,139371,129413],{"class":63},[34,139373,67],{"class":40},[34,139375,55475],{"class":63},[34,139377,129983],{"class":40},[34,139379,139380],{"class":36,"line":353},[34,139381,132553],{"class":205},[34,139383,139384,139386,139388,139390,139392,139394],{"class":36,"line":359},[34,139385,132558],{"class":149},[34,139387,80437],{"class":40},[34,139389,129413],{"class":63},[34,139391,67],{"class":40},[34,139393,86863],{"class":63},[34,139395,129983],{"class":40},[34,139397,139398],{"class":36,"line":579},[34,139399,132573],{"class":205},[34,139401,139402,139404,139406,139408,139410,139412],{"class":36,"line":589},[34,139403,132578],{"class":149},[34,139405,80437],{"class":40},[34,139407,129413],{"class":63},[34,139409,67],{"class":40},[34,139411,132587],{"class":63},[34,139413,129983],{"class":40},[108,139415,138932],{},[24,139417,139418],{"className":196,"code":132485,"language":198,"meta":29,"style":29},[31,139419,139420,139424,139438,139442,139456,139460,139474,139478,139492,139496],{"__ignoreMap":29},[34,139421,139422],{"class":36,"line":37},[34,139423,132492],{"class":205},[34,139425,139426,139428,139430,139432,139434,139436],{"class":36,"line":51},[34,139427,132497],{"class":149},[34,139429,80437],{"class":40},[34,139431,129413],{"class":63},[34,139433,67],{"class":40},[34,139435,132506],{"class":63},[34,139437,129983],{"class":40},[34,139439,139440],{"class":36,"line":60},[34,139441,132513],{"class":205},[34,139443,139444,139446,139448,139450,139452,139454],{"class":36,"line":76},[34,139445,132518],{"class":149},[34,139447,80437],{"class":40},[34,139449,129413],{"class":63},[34,139451,67],{"class":40},[34,139453,55408],{"class":63},[34,139455,129983],{"class":40},[34,139457,139458],{"class":36,"line":93},[34,139459,132533],{"class":205},[34,139461,139462,139464,139466,139468,139470,139472],{"class":36,"line":99},[34,139463,132538],{"class":149},[34,139465,80437],{"class":40},[34,139467,129413],{"class":63},[34,139469,67],{"class":40},[34,139471,55475],{"class":63},[34,139473,129983],{"class":40},[34,139475,139476],{"class":36,"line":353},[34,139477,132553],{"class":205},[34,139479,139480,139482,139484,139486,139488,139490],{"class":36,"line":359},[34,139481,132558],{"class":149},[34,139483,80437],{"class":40},[34,139485,129413],{"class":63},[34,139487,67],{"class":40},[34,139489,86863],{"class":63},[34,139491,129983],{"class":40},[34,139493,139494],{"class":36,"line":579},[34,139495,132573],{"class":205},[34,139497,139498,139500,139502,139504,139506,139508],{"class":36,"line":589},[34,139499,132578],{"class":149},[34,139501,80437],{"class":40},[34,139503,129413],{"class":63},[34,139505,67],{"class":40},[34,139507,132587],{"class":63},[34,139509,129983],{"class":40},[19,139511,139513,139514,139516],{"id":139512},"_1544-nav导航模块制作","15.4.4 ",[31,139515,54359],{},"导航模块制作",[2122,139518],{"style":127038,"src":139519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[108,139521,139522,139524],{},[31,139523,54359],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[108,139526,139527,139528],{},"1 号盒子左侧浮动，",[31,139529,139530],{},"dropdown",[1800,139532,139533,139543,139551,139557,139565,139575,139583,139594],{},[755,139534,139535,139536,101648,139539,139542],{},"1号盒子有讲究，根据相关性 里面包含 ",[31,139537,139538],{},".dt",[31,139540,139541],{},".dd"," 两个盒子",[755,139544,139545,139547,139548,139550],{},[31,139546,139538],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[31,139549,139541],{}," 挤到下面去了",[755,139552,139553,139554,139556],{},"给 ",[31,139555,139541],{}," 盒子设置宽度 和 高度，以及背景颜色",[755,139558,139553,139559,139561,139562,120867],{},[31,139560,139541],{}," 盒子里面定义 无序列表 （",[31,139563,139564],{},"ul > li > a",[755,139566,139567,139568,139570,139571,139574],{},"每个 ",[31,139569,755],{}," 都有一个高度（",[31,139572,139573],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[755,139576,139553,139577,139579,139580,120867],{},[31,139578,755],{}," 里面的a设置文字大小（",[31,139581,139582],{},"14px",[755,139584,139553,139585,139587,139588,139590,139591,139593],{},[31,139586,755],{}," 设置 ",[31,139589,484],{},"，当鼠标移入的时候，让",[31,139592,755],{},"的背景变成白色，让里面的文字变成红色",[755,139595,139596,139598,139599,139601,139602,139604],{},[31,139597,755],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[31,139600,755],{},"的右侧，那么给",[31,139603,755],{},"设置相对定位",[108,139606,139607],{},"一定要注意相关性",[108,139609,138892],{},[24,139611,139612],{"className":196,"code":138895,"language":198,"meta":29,"style":29},[31,139613,139614,139622,139632,139642],{"__ignoreMap":29},[34,139615,139616,139618,139620],{"class":36,"line":37},[34,139617,52258],{"class":44},[34,139619,138054],{"class":149},[34,139621,57],{"class":40},[34,139623,139624,139626,139628,139630],{"class":36,"line":51},[34,139625,138061],{"class":63},[34,139627,67],{"class":40},[34,139629,8305],{"class":156},[34,139631,73],{"class":40},[34,139633,139634,139636,139638,139640],{"class":36,"line":60},[34,139635,128669],{"class":63},[34,139637,67],{"class":40},[34,139639,61512],{"class":63},[34,139641,73],{"class":40},[34,139643,139644],{"class":36,"line":76},[34,139645,241],{"class":40},[108,139647,138932],{},[24,139649,139650],{"className":196,"code":138895,"language":198,"meta":29,"style":29},[31,139651,139652,139660,139670,139680],{"__ignoreMap":29},[34,139653,139654,139656,139658],{"class":36,"line":37},[34,139655,52258],{"class":44},[34,139657,138054],{"class":149},[34,139659,57],{"class":40},[34,139661,139662,139664,139666,139668],{"class":36,"line":51},[34,139663,138061],{"class":63},[34,139665,67],{"class":40},[34,139667,8305],{"class":156},[34,139669,73],{"class":40},[34,139671,139672,139674,139676,139678],{"class":36,"line":60},[34,139673,128669],{"class":63},[34,139675,67],{"class":40},[34,139677,61512],{"class":63},[34,139679,73],{"class":40},[34,139681,139682],{"class":36,"line":76},[34,139683,241],{"class":40},[108,139685,139686],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[108,139688,139689,139690,139693],{},"2 号盒子左侧浮动，",[31,139691,139692],{},"navitems"," 导航栏组",[1800,139695,139696,139701,139710],{},[755,139697,139698,139699],{},"里面结构是 ",[31,139700,139564],{},[755,139702,139703,139704,139706,139707,139709],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[31,139705,520],{},"左右的",[31,139708,31534],{},"把两侧撑开",[755,139711,139712],{},"让文字垂直居中（行高等于高度）",[2122,139714],{"style":127038,"src":139715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[108,139717,139718],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[108,139720,138892],{},[24,139722,139724],{"className":196,"code":139723,"language":198,"meta":29,"style":29},".box {\n  float: left;\n}\n",[31,139725,139726,139732,139742],{"__ignoreMap":29},[34,139727,139728,139730],{"class":36,"line":37},[34,139729,130901],{"class":149},[34,139731,57],{"class":40},[34,139733,139734,139736,139738,139740],{"class":36,"line":51},[34,139735,131533],{"class":63},[34,139737,67],{"class":40},[34,139739,24388],{"class":63},[34,139741,73],{"class":40},[34,139743,139744],{"class":36,"line":60},[34,139745,241],{"class":40},[108,139747,138932],{},[24,139749,139750],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,139751,139752,139758,139768],{"__ignoreMap":29},[34,139753,139754,139756],{"class":36,"line":37},[34,139755,130901],{"class":149},[34,139757,57],{"class":40},[34,139759,139760,139762,139764,139766],{"class":36,"line":51},[34,139761,131533],{"class":63},[34,139763,67],{"class":40},[34,139765,24388],{"class":63},[34,139767,73],{"class":40},[34,139769,139770],{"class":36,"line":60},[34,139771,241],{"class":40},[108,139773,139774],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2122,139776],{"style":127038,"src":139777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[24,139779,139780],{"className":196,"code":131210,"language":198,"meta":29,"style":29},[31,139781,139782,139788,139804],{"__ignoreMap":29},[34,139783,139784,139786],{"class":36,"line":37},[34,139785,52258],{"class":44},[34,139787,57],{"class":40},[34,139789,139790,139792,139794,139796,139798,139800,139802],{"class":36,"line":51},[34,139791,71528],{"class":63},[34,139793,67],{"class":40},[34,139795,1013],{"class":63},[34,139797,88],{"class":87},[34,139799,52168],{"class":63},[34,139801,130445],{"class":63},[34,139803,73],{"class":40},[34,139805,139806],{"class":36,"line":60},[34,139807,241],{"class":40},[19,139809,139811],{"id":139810},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2122,139813],{"style":127038,"src":139814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1800,139816,139817,139822,139827],{},[755,139818,139819,139821],{},[31,139820,132256],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[755,139823,139824,139826],{},[31,139825,132256],{}," 里面有一个大的版心",[755,139828,139829,139830,139833,139834],{},"版心里面包含 1 号盒子，",[31,139831,139832],{},"mod_service"," 是服务模块，mod 是模块的意思",[1800,139835,139836,139841,139854,139870,139875],{},[755,139837,139553,139838,139840],{},[31,139839,139832],{}," 设置高度（80px）和下边框",[755,139842,139843,139844,139847,139848,139850,139851,139853],{},"在里面定义 ",[31,139845,139846],{},"ul > li"," ,每个",[31,139849,755],{}," 宽度是300px 高度是 50px，给每个",[31,139852,755],{},"设置35px的左内边距",[755,139855,139856,139857,139859,139860,139862,139863,139865,139866,19062,139868,120867],{},"在每个",[31,139858,755],{},"里面，放一个 ",[31,139861,23562],{},"（里面放图标），一个",[31,139864,52258],{},"（里面放",[31,139867,52258],{},[31,139869,108],{},[755,139871,139553,139872,139874],{},[31,139873,23562],{},"设置浮动，让h5与这个div左右排列",[755,139876,139877],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[108,139879,138892],{},[24,139881,139883],{"className":196,"code":139882,"language":198,"meta":29,"style":29},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[31,139884,139885,139891,139903,139915,139942],{"__ignoreMap":29},[34,139886,139887,139889],{"class":36,"line":37},[34,139888,134810],{"class":149},[34,139890,57],{"class":40},[34,139892,139893,139895,139897,139899,139901],{"class":36,"line":51},[34,139894,71202],{"class":63},[34,139896,67],{"class":40},[34,139898,1495],{"class":63},[34,139900,88],{"class":87},[34,139902,73],{"class":40},[34,139904,139905,139907,139909,139911,139913],{"class":36,"line":60},[34,139906,71421],{"class":63},[34,139908,67],{"class":40},[34,139910,1495],{"class":63},[34,139912,88],{"class":87},[34,139914,73],{"class":40},[34,139916,139917,139919,139921,139923,139925,139927,139929,139931,139934,139936,139938,139940],{"class":36,"line":76},[34,139918,71245],{"class":63},[34,139920,67],{"class":40},[34,139922,62367],{"class":63},[34,139924,801],{"class":40},[34,139926,134849],{"class":5869},[34,139928,14367],{"class":40},[34,139930,62377],{"class":63},[34,139932,139933],{"class":63}," -10",[34,139935,88],{"class":87},[34,139937,134868],{"class":63},[34,139939,88],{"class":87},[34,139941,73],{"class":40},[34,139943,139944],{"class":36,"line":93},[34,139945,241],{"class":40},[108,139947,138932],{},[24,139949,139950],{"className":196,"code":139882,"language":198,"meta":29,"style":29},[31,139951,139952,139958,139970,139982,140008],{"__ignoreMap":29},[34,139953,139954,139956],{"class":36,"line":37},[34,139955,134810],{"class":149},[34,139957,57],{"class":40},[34,139959,139960,139962,139964,139966,139968],{"class":36,"line":51},[34,139961,71202],{"class":63},[34,139963,67],{"class":40},[34,139965,1495],{"class":63},[34,139967,88],{"class":87},[34,139969,73],{"class":40},[34,139971,139972,139974,139976,139978,139980],{"class":36,"line":60},[34,139973,71421],{"class":63},[34,139975,67],{"class":40},[34,139977,1495],{"class":63},[34,139979,88],{"class":87},[34,139981,73],{"class":40},[34,139983,139984,139986,139988,139990,139992,139994,139996,139998,140000,140002,140004,140006],{"class":36,"line":76},[34,139985,71245],{"class":63},[34,139987,67],{"class":40},[34,139989,62367],{"class":63},[34,139991,801],{"class":40},[34,139993,134849],{"class":5869},[34,139995,14367],{"class":40},[34,139997,62377],{"class":63},[34,139999,139933],{"class":63},[34,140001,88],{"class":87},[34,140003,134868],{"class":63},[34,140005,88],{"class":87},[34,140007,73],{"class":40},[34,140009,140010],{"class":36,"line":93},[34,140011,241],{"class":40},[108,140013,140014],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1800,140016,140017,140020,140026,140032,140044],{},[755,140018,140019],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[755,140021,140022,140023,120867],{},"里面的布局利用 自定义列表来实现（",[31,140024,140025],{},"dl > dt + dd",[755,140027,139553,140028,140031],{},[31,140029,140030],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[755,140033,139553,140034,140037,140038,19062,140040,140043],{},[31,140035,140036],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[31,140039,140036],{},[31,140041,140042],{},"dd","之间有些距离",[755,140045,140046],{},"最后一个 dl 结构和样式不一样，需要单独设置",[108,140048,138892],{},[24,140050,140051],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,140052,140053,140059,140071],{"__ignoreMap":29},[34,140054,140055,140057],{"class":36,"line":37},[34,140056,52258],{"class":44},[34,140058,57],{"class":40},[34,140060,140061,140063,140065,140067,140069],{"class":36,"line":51},[34,140062,71105],{"class":63},[34,140064,67],{"class":40},[34,140066,987],{"class":63},[34,140068,52203],{"class":63},[34,140070,73],{"class":40},[34,140072,140073],{"class":36,"line":60},[34,140074,241],{"class":40},[108,140076,138932],{},[24,140078,140079],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,140080,140081,140087,140099],{"__ignoreMap":29},[34,140082,140083,140085],{"class":36,"line":37},[34,140084,52258],{"class":44},[34,140086,57],{"class":40},[34,140088,140089,140091,140093,140095,140097],{"class":36,"line":51},[34,140090,71105],{"class":63},[34,140092,67],{"class":40},[34,140094,987],{"class":63},[34,140096,52203],{"class":63},[34,140098,73],{"class":40},[34,140100,140101],{"class":36,"line":60},[34,140102,241],{"class":40},[108,140104,140105],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1800,140107,140108,140117,140120,140131],{},[755,140109,140110,140111,140113,140114,140116],{},"分为上下两块，上面是 ",[31,140112,132273],{}," 友情链接，下面是 ",[31,140115,132266],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[755,140118,140119],{},"把内容分别复制到相应模块中",[755,140121,139553,140122,140124,140125,140127,140128,140130],{},[31,140123,132273],{}," 设置 15px 的下外边距，给",[31,140126,132273],{}," 里面 的 ",[31,140129,520],{}," 标签设置 左右 3px 的外边距",[755,140132,140133,140134,140136],{},"给",[31,140135,132266],{}," 设置 20px 的行高",[108,140138,138892],{},[24,140140,140141],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,140142,140143,140149,140161],{"__ignoreMap":29},[34,140144,140145,140147],{"class":36,"line":37},[34,140146,52258],{"class":44},[34,140148,57],{"class":40},[34,140150,140151,140153,140155,140157,140159],{"class":36,"line":51},[34,140152,71105],{"class":63},[34,140154,67],{"class":40},[34,140156,987],{"class":63},[34,140158,52203],{"class":63},[34,140160,73],{"class":40},[34,140162,140163],{"class":36,"line":60},[34,140164,241],{"class":40},[108,140166,138932],{},[24,140168,140169],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,140170,140171,140177,140189],{"__ignoreMap":29},[34,140172,140173,140175],{"class":36,"line":37},[34,140174,52258],{"class":44},[34,140176,57],{"class":40},[34,140178,140179,140181,140183,140185,140187],{"class":36,"line":51},[34,140180,71105],{"class":63},[34,140182,67],{"class":40},[34,140184,987],{"class":63},[34,140186,52203],{"class":63},[34,140188,73],{"class":40},[34,140190,140191],{"class":36,"line":60},[34,140192,241],{"class":40},[108,140194,140195],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[45,140197,140198],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":140200},[140201,140202,140203,140210],{"id":138481,"depth":51,"text":138482},{"id":138500,"depth":51,"text":138501},{"id":138527,"depth":51,"text":138528,"children":140204},[140205,140206,140207,140208,140209],{"id":138531,"depth":60,"text":138532},{"id":138544,"depth":60,"text":138545},{"id":138568,"depth":60,"text":138569},{"id":138590,"depth":60,"text":138591},{"id":138662,"depth":60,"text":138663},{"id":138788,"depth":51,"text":138789,"children":140211},[140212,140213,140214,140215,140217],{"id":138792,"depth":60,"text":138793},{"id":138799,"depth":60,"text":138800},{"id":138971,"depth":60,"text":138972},{"id":139512,"depth":60,"text":140216},"15.4.4 nav导航模块制作",{"id":139810,"depth":60,"text":139811},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138473,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140224,"title":140225,"body":140226,"description":723,"extension":724,"meta":142628,"navigation":726,"path":142629,"seo":142630,"stem":142631,"__hash__":142632},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140227,"toc":142605},[140228,140231,140235,140239,140251,140254,140257,140260,140271,140273,140297,140299,140323,140328,140331,140333,140369,140371,140407,140410,140415,140418,140421,140424,140454,140461,140464,140474,140476,140510,140513,140547,140553,140570,140572,140608,140610,140646,140651,140676,140678,140704,140706,140730,140737,140740,140804,140806,140848,140850,140890,140897,140902,140904,140934,140936,140966,140970,140973,140980,140992,140994,141020,141022,141046,141049,141051,141075,141081,141091,141093,141123,141125,141155,141162,141203,141205,141241,141243,141279,141283,141286,141289,141292,141298,141303,141306,141329,141332,141356,141359,141383,141388,141391,141394,141397,141400,141403,141477,141479,141509,141511,141541,141544,141547,141579,141583,141587,141601,141610,141613,141618,141620,141714,141716,141810,141833,141835,141859,141861,141885,141892,141895,141905,141907,141931,141936,141944,141946,141976,141981,142021,142023,142049,142051,142077,142081,142084,142089,142092,142096,142104,142111,142119,142121,142151,142153,142183,142191,142194,142197,142199,142229,142231,142261,142264,142269,142271,142295,142297,142321,142324,142409,142411,142435,142437,142461,142465,142467,142491,142493,142527,142531,142545,142548,142553,142556,142561,142564,142594,142602],[10,140229,140225],{"id":140230},"_16-品优购项目下篇-主体与页面开发",[14,140232,140234],{"id":140233},"_161-项目主体模块制作","16.1 项目主体模块制作",[19,140236,140238],{"id":140237},"_1611-首页制作","16.1.1 首页制作",[108,140240,140241,140243,140244,140246,140247,140250],{},[111,140242,102688],{}," 主体模块是 ",[111,140245,74689],{}," 里面专有的，注意需要新的样式文件 ",[111,140248,140249],{},"index.css，"," 就不要写在common.css中了",[2122,140252],{"style":127038,"src":140253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2122,140255],{"style":127038,"src":140256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[108,140258,140259],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1800,140261,140262,140265,140268],{},[755,140263,140264],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[755,140266,140267],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[755,140269,140270],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[108,140272,138892],{},[24,140274,140275],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,140276,140277,140283,140293],{"__ignoreMap":29},[34,140278,140279,140281],{"class":36,"line":37},[34,140280,130901],{"class":149},[34,140282,57],{"class":40},[34,140284,140285,140287,140289,140291],{"class":36,"line":51},[34,140286,131533],{"class":63},[34,140288,67],{"class":40},[34,140290,24388],{"class":63},[34,140292,73],{"class":40},[34,140294,140295],{"class":36,"line":60},[34,140296,241],{"class":40},[108,140298,138932],{},[24,140300,140301],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,140302,140303,140309,140319],{"__ignoreMap":29},[34,140304,140305,140307],{"class":36,"line":37},[34,140306,130901],{"class":149},[34,140308,57],{"class":40},[34,140310,140311,140313,140315,140317],{"class":36,"line":51},[34,140312,131533],{"class":63},[34,140314,67],{"class":40},[34,140316,24388],{"class":63},[34,140318,73],{"class":40},[34,140320,140321],{"class":36,"line":60},[34,140322,241],{"class":40},[752,140324,140325],{},[755,140326,140327],{},"左侧focus模块制作",[2122,140329],{"style":127038,"src":140330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[108,140332,138892],{},[24,140334,140335],{"className":196,"code":662,"language":198,"meta":29,"style":29},[31,140336,140337,140345,140355,140365],{"__ignoreMap":29},[34,140338,140339,140341,140343],{"class":36,"line":37},[34,140340,669],{"class":44},[34,140342,672],{"class":149},[34,140344,57],{"class":40},[34,140346,140347,140349,140351,140353],{"class":36,"line":51},[34,140348,679],{"class":63},[34,140350,67],{"class":40},[34,140352,596],{"class":63},[34,140354,73],{"class":40},[34,140356,140357,140359,140361,140363],{"class":36,"line":60},[34,140358,690],{"class":63},[34,140360,67],{"class":40},[34,140362,546],{"class":63},[34,140364,73],{"class":40},[34,140366,140367],{"class":36,"line":76},[34,140368,241],{"class":40},[108,140370,138932],{},[24,140372,140373],{"className":196,"code":662,"language":198,"meta":29,"style":29},[31,140374,140375,140383,140393,140403],{"__ignoreMap":29},[34,140376,140377,140379,140381],{"class":36,"line":37},[34,140378,669],{"class":44},[34,140380,672],{"class":149},[34,140382,57],{"class":40},[34,140384,140385,140387,140389,140391],{"class":36,"line":51},[34,140386,679],{"class":63},[34,140388,67],{"class":40},[34,140390,596],{"class":63},[34,140392,73],{"class":40},[34,140394,140395,140397,140399,140401],{"class":36,"line":60},[34,140396,690],{"class":63},[34,140398,67],{"class":40},[34,140400,546],{"class":63},[34,140402,73],{"class":40},[34,140404,140405],{"class":36,"line":76},[34,140406,241],{"class":40},[108,140408,140409],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[752,140411,140412],{"start":51},[755,140413,140414],{},"右侧newsflash模块制作",[2122,140416],{"style":127038,"src":140417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[108,140419,140420],{},"右侧的模块 分为上中下三个盒子",[108,140422,140423],{},"结构代码：",[24,140425,140426],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,140427,140428],{"__ignoreMap":29},[34,140429,140430,140432,140434,140436,140438,140440,140442,140444,140446,140448,140450,140452],{"class":36,"line":37},[34,140431,41],{"class":40},[34,140433,2122],{"class":44},[34,140435,55882],{"class":149},[34,140437,153],{"class":40},[34,140439,134570],{"class":156},[34,140441,55890],{"class":149},[34,140443,153],{"class":40},[34,140445,134577],{"class":156},[34,140447,134580],{"class":149},[34,140449,153],{"class":40},[34,140451,134585],{"class":156},[34,140453,48],{"class":40},[108,140455,140456,140457,140460],{},"1 号盒子为 ",[31,140458,140459],{},"news"," 新闻模块 高度为 165px",[2122,140462],{"style":127038,"src":140463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[108,140465,140466,140467,140470,140471],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[31,140468,140469],{},"news-hd","，下面是 ",[31,140472,140473],{},"news-bd",[108,140475,140423],{},[24,140477,140478],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,140479,140480,140484,140498,140502],{"__ignoreMap":29},[34,140481,140482],{"class":36,"line":37},[34,140483,131164],{"class":205},[34,140485,140486,140488,140490,140492,140494,140496],{"class":36,"line":51},[34,140487,41],{"class":40},[34,140489,52258],{"class":44},[34,140491,54132],{"class":149},[34,140493,153],{"class":40},[34,140495,131177],{"class":156},[34,140497,48],{"class":40},[34,140499,140500],{"class":36,"line":60},[34,140501,131184],{"class":40},[34,140503,140504,140506,140508],{"class":36,"line":76},[34,140505,102],{"class":40},[34,140507,52258],{"class":44},[34,140509,48],{"class":40},[108,140511,140512],{},"样式代码：",[24,140514,140515],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,140516,140517,140521,140535,140539],{"__ignoreMap":29},[34,140518,140519],{"class":36,"line":37},[34,140520,131164],{"class":205},[34,140522,140523,140525,140527,140529,140531,140533],{"class":36,"line":51},[34,140524,41],{"class":40},[34,140526,52258],{"class":44},[34,140528,54132],{"class":149},[34,140530,153],{"class":40},[34,140532,131177],{"class":156},[34,140534,48],{"class":40},[34,140536,140537],{"class":36,"line":60},[34,140538,131184],{"class":40},[34,140540,140541,140543,140545],{"class":36,"line":76},[34,140542,102],{"class":40},[34,140544,52258],{"class":44},[34,140546,48],{"class":40},[108,140548,140549,140550,140552],{},"上面是",[31,140551,140469],{},"，设置高度是 33px，设置下边框",[1800,140554,140555,140561],{},[755,140556,140557,140558,140560],{},"里面放一个",[31,140559,23562],{}," 标题",[755,140562,140563,140564,140566,140567,140569],{},"放一个a",[31,140565,103323],{},"，内容是 更多，然后让 ",[31,140568,520],{}," 进行右浮动，三角用伪元素设置字体图标就好",[108,140571,140423],{},[24,140573,140574],{"className":196,"code":138895,"language":198,"meta":29,"style":29},[31,140575,140576,140584,140594,140604],{"__ignoreMap":29},[34,140577,140578,140580,140582],{"class":36,"line":37},[34,140579,52258],{"class":44},[34,140581,138054],{"class":149},[34,140583,57],{"class":40},[34,140585,140586,140588,140590,140592],{"class":36,"line":51},[34,140587,138061],{"class":63},[34,140589,67],{"class":40},[34,140591,8305],{"class":156},[34,140593,73],{"class":40},[34,140595,140596,140598,140600,140602],{"class":36,"line":60},[34,140597,128669],{"class":63},[34,140599,67],{"class":40},[34,140601,61512],{"class":63},[34,140603,73],{"class":40},[34,140605,140606],{"class":36,"line":76},[34,140607,241],{"class":40},[108,140609,140512],{},[24,140611,140612],{"className":196,"code":138895,"language":198,"meta":29,"style":29},[31,140613,140614,140622,140632,140642],{"__ignoreMap":29},[34,140615,140616,140618,140620],{"class":36,"line":37},[34,140617,52258],{"class":44},[34,140619,138054],{"class":149},[34,140621,57],{"class":40},[34,140623,140624,140626,140628,140630],{"class":36,"line":51},[34,140625,138061],{"class":63},[34,140627,67],{"class":40},[34,140629,8305],{"class":156},[34,140631,73],{"class":40},[34,140633,140634,140636,140638,140640],{"class":36,"line":60},[34,140635,128669],{"class":63},[34,140637,67],{"class":40},[34,140639,61512],{"class":63},[34,140641,73],{"class":40},[34,140643,140644],{"class":36,"line":76},[34,140645,241],{"class":40},[108,140647,140648,140649],{},"下面是",[31,140650,140473],{},[1800,140652,140653,140661],{},[755,140654,140655,140656,101648,140658,140660],{},"里面包含 ",[31,140657,1800],{},[31,140659,755],{}," 还有链接",[755,140662,140133,140663,140665,140666,140668,140669,140672,140673],{},[31,140664,755],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[31,140667,131719],{}," 2.设置 ",[31,140670,140671],{},"white-space: nowrap;"," 3. 设置 ",[31,140674,140675],{},"text-overflow: ellipsis;",[108,140677,140423],{},[24,140679,140681],{"className":196,"code":140680,"language":198,"meta":29,"style":29},"div {\n  overflow: hidden;\n}\n",[31,140682,140683,140689,140700],{"__ignoreMap":29},[34,140684,140685,140687],{"class":36,"line":37},[34,140686,52258],{"class":44},[34,140688,57],{"class":40},[34,140690,140691,140694,140696,140698],{"class":36,"line":51},[34,140692,140693],{"class":63},"  overflow",[34,140695,67],{"class":40},[34,140697,62355],{"class":63},[34,140699,73],{"class":40},[34,140701,140702],{"class":36,"line":60},[34,140703,241],{"class":40},[108,140705,140512],{},[24,140707,140708],{"className":196,"code":140680,"language":198,"meta":29,"style":29},[31,140709,140710,140716,140726],{"__ignoreMap":29},[34,140711,140712,140714],{"class":36,"line":37},[34,140713,52258],{"class":44},[34,140715,57],{"class":40},[34,140717,140718,140720,140722,140724],{"class":36,"line":51},[34,140719,140693],{"class":63},[34,140721,67],{"class":40},[34,140723,62355],{"class":63},[34,140725,73],{"class":40},[34,140727,140728],{"class":36,"line":60},[34,140729,241],{"class":40},[108,140731,140732,140733,140736],{},"2 号盒子为 ",[31,140734,140735],{},"lifeservice"," 生活服务模块 高度为 209px",[2122,140738],{"style":127038,"src":140739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1800,140741,140742,140745,140755,140779,140790],{},[755,140743,140744],{},"设置边框（左右下边框）",[755,140746,140747,140748,140751,140752,140754],{},"里面的内容 是 ",[31,140749,140750],{},"ul > 12*li","，给",[31,140753,755],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[755,140756,140757,140758],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1800,140759,140760,140765,140774],{},[755,140761,140762,140764],{},[31,140763,140735],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[755,140766,140767,140768,140770,140771,140773],{},"可以让 ",[31,140769,140735],{}," 里面的 ",[31,140772,1800],{}," 宽度为 252，就可以装的下 4 个 小 li",[755,140775,140776,140778],{},[31,140777,140735],{}," 盒子 overflow 隐藏多余的部分就可以了",[755,140780,117097,140781,140783,140784,140786,140787,140789],{},[31,140782,755],{}," 里面放一个 ",[31,140785,1236],{},"（里面放图标），下面的文本用 ",[31,140788,108],{}," 标签包裹",[755,140791,139553,140792,140794,140795,140797,140798,139587,140800,140803],{},[31,140793,1236],{}," 设置 24px宽和28px的高（注意 ",[31,140796,1236],{}," 是行内元素， 转成行内块），给 ",[31,140799,755],{},[31,140801,140802],{},"text-align:center"," 让里面内容居中显示",[108,140805,140423],{},[24,140807,140809],{"className":196,"code":140808,"language":198,"meta":29,"style":29},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[31,140810,140811,140829,140834,140844],{"__ignoreMap":29},[34,140812,140813,140815,140817,140819,140821,140823,140825,140827],{"class":36,"line":37},[34,140814,34],{"class":44},[34,140816,13088],{"class":40},[34,140818,520],{"class":44},[34,140820,13088],{"class":40},[34,140822,24205],{"class":44},[34,140824,13088],{"class":40},[34,140826,111],{"class":44},[34,140828,57],{"class":40},[34,140830,140831],{"class":36,"line":51},[34,140832,140833],{"class":205},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[34,140835,140836,140838,140840,140842],{"class":36,"line":60},[34,140837,128669],{"class":63},[34,140839,67],{"class":40},[34,140841,128731],{"class":63},[34,140843,73],{"class":40},[34,140845,140846],{"class":36,"line":76},[34,140847,241],{"class":40},[108,140849,140512],{},[24,140851,140852],{"className":196,"code":140808,"language":198,"meta":29,"style":29},[31,140853,140854,140872,140876,140886],{"__ignoreMap":29},[34,140855,140856,140858,140860,140862,140864,140866,140868,140870],{"class":36,"line":37},[34,140857,34],{"class":44},[34,140859,13088],{"class":40},[34,140861,520],{"class":44},[34,140863,13088],{"class":40},[34,140865,24205],{"class":44},[34,140867,13088],{"class":40},[34,140869,111],{"class":44},[34,140871,57],{"class":40},[34,140873,140874],{"class":36,"line":51},[34,140875,140833],{"class":205},[34,140877,140878,140880,140882,140884],{"class":36,"line":60},[34,140879,128669],{"class":63},[34,140881,67],{"class":40},[34,140883,128731],{"class":63},[34,140885,73],{"class":40},[34,140887,140888],{"class":36,"line":76},[34,140889,241],{"class":40},[108,140891,140892,140893,140896],{},"3 号盒子为 ",[31,140894,140895],{},"bargain"," 特价商品",[1800,140898,140899],{},[755,140900,140901],{},"这个比较简单，直接插入一张图片即可",[108,140903,140423],{},[24,140905,140906],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,140907,140908],{"__ignoreMap":29},[34,140909,140910,140912,140914,140916,140918,140920,140922,140924,140926,140928,140930,140932],{"class":36,"line":37},[34,140911,41],{"class":40},[34,140913,2122],{"class":44},[34,140915,55882],{"class":149},[34,140917,153],{"class":40},[34,140919,134570],{"class":156},[34,140921,55890],{"class":149},[34,140923,153],{"class":40},[34,140925,134577],{"class":156},[34,140927,134580],{"class":149},[34,140929,153],{"class":40},[34,140931,134585],{"class":156},[34,140933,48],{"class":40},[108,140935,140512],{},[24,140937,140938],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,140939,140940],{"__ignoreMap":29},[34,140941,140942,140944,140946,140948,140950,140952,140954,140956,140958,140960,140962,140964],{"class":36,"line":37},[34,140943,41],{"class":40},[34,140945,2122],{"class":44},[34,140947,55882],{"class":149},[34,140949,153],{"class":40},[34,140951,134570],{"class":156},[34,140953,55890],{"class":149},[34,140955,153],{"class":40},[34,140957,134577],{"class":156},[34,140959,134580],{"class":149},[34,140961,153],{"class":40},[34,140963,134585],{"class":156},[34,140965,48],{"class":40},[19,140967,140969],{"id":140968},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2122,140971],{"style":127038,"src":140972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[108,140974,140975,140976,140979],{},"大盒子 ",[31,140977,140978],{},"recom"," 推荐模块 recommend",[1800,140981,140982],{},[755,140983,140984,140985,140987,140988,140991],{},"给这个 ",[31,140986,140978],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[31,140989,140990],{},"#ebebeb","），设置距离上边 12px",[108,140993,140423],{},[24,140995,140997],{"className":196,"code":140996,"language":198,"meta":29,"style":29},"div {\n  background-color: #f0f0f0;\n}\n",[31,140998,140999,141005,141016],{"__ignoreMap":29},[34,141000,141001,141003],{"class":36,"line":37},[34,141002,52258],{"class":44},[34,141004,57],{"class":40},[34,141006,141007,141009,141011,141014],{"class":36,"line":51},[34,141008,71510],{"class":63},[34,141010,67],{"class":40},[34,141012,141013],{"class":63},"#f0f0f0",[34,141015,73],{"class":40},[34,141017,141018],{"class":36,"line":60},[34,141019,241],{"class":40},[108,141021,140512],{},[24,141023,141024],{"className":196,"code":140996,"language":198,"meta":29,"style":29},[31,141025,141026,141032,141042],{"__ignoreMap":29},[34,141027,141028,141030],{"class":36,"line":37},[34,141029,52258],{"class":44},[34,141031,57],{"class":40},[34,141033,141034,141036,141038,141040],{"class":36,"line":51},[34,141035,71510],{"class":63},[34,141037,67],{"class":40},[34,141039,141013],{"class":63},[34,141041,73],{"class":40},[34,141043,141044],{"class":36,"line":60},[34,141045,241],{"class":40},[108,141047,141048],{},"里面包含 2 个盒子， 浮动即可",[108,141050,140423],{},[24,141052,141053],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,141054,141055,141061,141071],{"__ignoreMap":29},[34,141056,141057,141059],{"class":36,"line":37},[34,141058,130901],{"class":149},[34,141060,57],{"class":40},[34,141062,141063,141065,141067,141069],{"class":36,"line":51},[34,141064,131533],{"class":63},[34,141066,67],{"class":40},[34,141068,24388],{"class":63},[34,141070,73],{"class":40},[34,141072,141073],{"class":36,"line":60},[34,141074,241],{"class":40},[108,141076,141077,141078],{},"1 号盒子 ",[31,141079,141080],{},"recom_hd",[1800,141082,141083,141086],{},[755,141084,141085],{},"设置宽度205px，高度163px",[755,141087,140557,141088,141090],{},[31,141089,2122],{},"标签，插入图片即可",[108,141092,140423],{},[24,141094,141095],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,141096,141097],{"__ignoreMap":29},[34,141098,141099,141101,141103,141105,141107,141109,141111,141113,141115,141117,141119,141121],{"class":36,"line":37},[34,141100,41],{"class":40},[34,141102,2122],{"class":44},[34,141104,55882],{"class":149},[34,141106,153],{"class":40},[34,141108,134570],{"class":156},[34,141110,55890],{"class":149},[34,141112,153],{"class":40},[34,141114,134577],{"class":156},[34,141116,134580],{"class":149},[34,141118,153],{"class":40},[34,141120,134585],{"class":156},[34,141122,48],{"class":40},[108,141124,140512],{},[24,141126,141127],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,141128,141129],{"__ignoreMap":29},[34,141130,141131,141133,141135,141137,141139,141141,141143,141145,141147,141149,141151,141153],{"class":36,"line":37},[34,141132,41],{"class":40},[34,141134,2122],{"class":44},[34,141136,55882],{"class":149},[34,141138,153],{"class":40},[34,141140,134570],{"class":156},[34,141142,55890],{"class":149},[34,141144,153],{"class":40},[34,141146,134577],{"class":156},[34,141148,134580],{"class":149},[34,141150,153],{"class":40},[34,141152,134585],{"class":156},[34,141154,48],{"class":40},[108,141156,141157,141158,141161],{},"2 号盒子 ",[31,141159,141160],{},"recom_bd"," ，注意里面的小竖线",[1800,141163,141164,141175,141178,141183,141188],{},[755,141165,141166,141167,141169,141170,141172,141173],{},"右侧结构里面放 ",[31,141168,1800],{}," 包含 4个 ",[31,141171,755],{},"，每个li里面包含一个",[31,141174,2122],{},[755,141176,141177],{},"直接利用切片工具把里面的内容当成一张图片",[755,141179,139553,141180,141182],{},[31,141181,755],{}," 设置浮动",[755,141184,139553,141185,141187],{},[31,141186,2122],{}," 设置宽高，宽度 248px，高度 163px",[755,141189,141190,141191,140751,141194,141196,141197,141199,141200],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[31,141192,141193],{},"top 10px",[31,141195,755],{},"设置相对定位（注意，最后一个",[31,141198,755],{},"不用设置伪元素），可以利用 ",[31,141201,141202],{},"nth-child(-n+3){...}",[108,141204,140423],{},[24,141206,141207],{"className":196,"code":138895,"language":198,"meta":29,"style":29},[31,141208,141209,141217,141227,141237],{"__ignoreMap":29},[34,141210,141211,141213,141215],{"class":36,"line":37},[34,141212,52258],{"class":44},[34,141214,138054],{"class":149},[34,141216,57],{"class":40},[34,141218,141219,141221,141223,141225],{"class":36,"line":51},[34,141220,138061],{"class":63},[34,141222,67],{"class":40},[34,141224,8305],{"class":156},[34,141226,73],{"class":40},[34,141228,141229,141231,141233,141235],{"class":36,"line":60},[34,141230,128669],{"class":63},[34,141232,67],{"class":40},[34,141234,61512],{"class":63},[34,141236,73],{"class":40},[34,141238,141239],{"class":36,"line":76},[34,141240,241],{"class":40},[108,141242,140512],{},[24,141244,141245],{"className":196,"code":138895,"language":198,"meta":29,"style":29},[31,141246,141247,141255,141265,141275],{"__ignoreMap":29},[34,141248,141249,141251,141253],{"class":36,"line":37},[34,141250,52258],{"class":44},[34,141252,138054],{"class":149},[34,141254,57],{"class":40},[34,141256,141257,141259,141261,141263],{"class":36,"line":51},[34,141258,138061],{"class":63},[34,141260,67],{"class":40},[34,141262,8305],{"class":156},[34,141264,73],{"class":40},[34,141266,141267,141269,141271,141273],{"class":36,"line":60},[34,141268,128669],{"class":63},[34,141270,67],{"class":40},[34,141272,61512],{"class":63},[34,141274,73],{"class":40},[34,141276,141277],{"class":36,"line":76},[34,141278,241],{"class":40},[19,141280,141282],{"id":141281},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2122,141284],{"style":127038,"src":141285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[108,141287,141288],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[108,141290,141291],{},"第一楼是家用电器模块： 里面包含两个盒子",[108,141293,141294,141297],{},[31,141295,141296],{},"box_hd"," 制作",[108,141299,141077,141300,141302],{},[31,141301,141296],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2122,141304],{"style":127038,"src":141305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1800,141307,141308,141313,141318,141321],{},[755,141309,141310,141312],{},[31,141311,141296],{}," 给 30px 的高度，2个像素的下边框",[755,141314,141315,141316],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[31,141317,139564],{},[755,141319,141320],{},"左侧盒左浮动，右侧盒子右浮动",[755,141322,141323,141325,141326,141328],{},[31,141324,520],{},"标签之间的距离用左右的",[31,141327,31534],{},"撑开即可",[108,141330,141331],{},"结构代码",[24,141333,141334],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,141335,141336,141342,141352],{"__ignoreMap":29},[34,141337,141338,141340],{"class":36,"line":37},[34,141339,130901],{"class":149},[34,141341,57],{"class":40},[34,141343,141344,141346,141348,141350],{"class":36,"line":51},[34,141345,131533],{"class":63},[34,141347,67],{"class":40},[34,141349,24388],{"class":63},[34,141351,73],{"class":40},[34,141353,141354],{"class":36,"line":60},[34,141355,241],{"class":40},[108,141357,141358],{},"样式代码",[24,141360,141361],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,141362,141363,141369,141379],{"__ignoreMap":29},[34,141364,141365,141367],{"class":36,"line":37},[34,141366,130901],{"class":149},[34,141368,57],{"class":40},[34,141370,141371,141373,141375,141377],{"class":36,"line":51},[34,141372,131533],{"class":63},[34,141374,67],{"class":40},[34,141376,24388],{"class":63},[34,141378,73],{"class":40},[34,141380,141381],{"class":36,"line":60},[34,141382,241],{"class":40},[108,141384,141385,141297],{},[31,141386,141387],{},"box_bd",[108,141389,141390],{},"2 号盒子 box_bd，不要给高度",[2122,141392],{"style":127038,"src":141393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[108,141395,141396],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[108,141398,141399],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[108,141401,141402],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1800,141404,141405,141417,141433],{},[755,141406,141407,141409,141410,141413,141414,141416],{},[31,141408,141387],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[31,141411,141412],{},"tab_content","，在",[31,141415,141412],{}," 里面包裹tab选项卡对应的内容",[755,141418,141419,141420,141423,141424,141426,141427,141429,141430,141432],{},"内容被一个大盒子包裹（",[31,141421,141422],{},"tab_list_item","），里面是 ",[31,141425,1800],{}," 包裹 5个 ",[31,141428,755],{},"，每个",[31,141431,755],{},"设置对应的宽度，然后设置浮动",[755,141434,141435,141436,141438,141439,141441,141442],{},"而这5个",[31,141437,755],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[31,141440,755],{},"设置",[1800,141443,141444,141462,141465],{},[755,141445,141446,141447,141449,141450,141452,141453,141455,141456,141458,141459,141461],{},"第一个小 ",[31,141448,755],{}," 分为上下结构，上面是 ",[31,141451,1800],{}," 包裹 ",[31,141454,755],{}," ，",[31,141457,755],{},"里面包裹 ",[31,141460,520],{},"，下面插入一张图片",[755,141463,141464],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[755,141466,141467,141468,141470,141471,141473,141474,141476],{},"后面的小 ",[31,141469,755],{}," 里面先放一个",[31,141472,520],{},"标签，然后在",[31,141475,520],{},"标签里面插入图片即可",[108,141478,141331],{},[24,141480,141481],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,141482,141483],{"__ignoreMap":29},[34,141484,141485,141487,141489,141491,141493,141495,141497,141499,141501,141503,141505,141507],{"class":36,"line":37},[34,141486,41],{"class":40},[34,141488,2122],{"class":44},[34,141490,55882],{"class":149},[34,141492,153],{"class":40},[34,141494,134570],{"class":156},[34,141496,55890],{"class":149},[34,141498,153],{"class":40},[34,141500,134577],{"class":156},[34,141502,134580],{"class":149},[34,141504,153],{"class":40},[34,141506,134585],{"class":156},[34,141508,48],{"class":40},[108,141510,141358],{},[24,141512,141513],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,141514,141515],{"__ignoreMap":29},[34,141516,141517,141519,141521,141523,141525,141527,141529,141531,141533,141535,141537,141539],{"class":36,"line":37},[34,141518,41],{"class":40},[34,141520,2122],{"class":44},[34,141522,55882],{"class":149},[34,141524,153],{"class":40},[34,141526,134570],{"class":156},[34,141528,55890],{"class":149},[34,141530,153],{"class":40},[34,141532,134577],{"class":156},[34,141534,134580],{"class":149},[34,141536,153],{"class":40},[34,141538,134585],{"class":156},[34,141540,48],{"class":40},[108,141542,141543],{},"tab栏切换需求！！！！！！介绍：",[2122,141545],{"style":127038,"src":141546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1800,141548,141549,141557,141563,141566],{},[755,141550,141551,141554,141555],{},[31,141552,141553],{},"tab","栏的布局是 ",[31,141556,139564],{},[755,141558,141559,141560,141562],{},"有多少个",[31,141561,141553],{},"选项卡，那么对应就有多少个内容",[755,141564,141565],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[755,141567,141568,141569,141572,141573,141575,141576,141578],{},"等后面我们学习了",[31,141570,141571],{},"js","之后，我们就会配合",[31,141574,141571],{},"来实现，",[31,141577,141553],{},"栏的切换",[14,141580,141582],{"id":141581},"_162-列表制作","16.2 列表制作",[19,141584,141586],{"id":141585},"_1621-准备工作","16.2.1 准备工作",[1800,141588,141589,141592,141595,141598],{},[755,141590,141591],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[755,141593,141594],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[755,141596,141597],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[755,141599,141600],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[19,141602,141604,141605,101648,141607,141609],{"id":141603},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[31,141606,132058],{},[31,141608,54359],{}," 修改",[2122,141611],{"style":127038,"src":141612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1800,141614,141615],{},[755,141616,141617],{},"秒杀盒子 sk（ second kill ） 定位即可",[108,141619,140423],{},[24,141621,141622],{"className":196,"code":132485,"language":198,"meta":29,"style":29},[31,141623,141624,141628,141642,141646,141660,141664,141678,141682,141696,141700],{"__ignoreMap":29},[34,141625,141626],{"class":36,"line":37},[34,141627,132492],{"class":205},[34,141629,141630,141632,141634,141636,141638,141640],{"class":36,"line":51},[34,141631,132497],{"class":149},[34,141633,80437],{"class":40},[34,141635,129413],{"class":63},[34,141637,67],{"class":40},[34,141639,132506],{"class":63},[34,141641,129983],{"class":40},[34,141643,141644],{"class":36,"line":60},[34,141645,132513],{"class":205},[34,141647,141648,141650,141652,141654,141656,141658],{"class":36,"line":76},[34,141649,132518],{"class":149},[34,141651,80437],{"class":40},[34,141653,129413],{"class":63},[34,141655,67],{"class":40},[34,141657,55408],{"class":63},[34,141659,129983],{"class":40},[34,141661,141662],{"class":36,"line":93},[34,141663,132533],{"class":205},[34,141665,141666,141668,141670,141672,141674,141676],{"class":36,"line":99},[34,141667,132538],{"class":149},[34,141669,80437],{"class":40},[34,141671,129413],{"class":63},[34,141673,67],{"class":40},[34,141675,55475],{"class":63},[34,141677,129983],{"class":40},[34,141679,141680],{"class":36,"line":353},[34,141681,132553],{"class":205},[34,141683,141684,141686,141688,141690,141692,141694],{"class":36,"line":359},[34,141685,132558],{"class":149},[34,141687,80437],{"class":40},[34,141689,129413],{"class":63},[34,141691,67],{"class":40},[34,141693,86863],{"class":63},[34,141695,129983],{"class":40},[34,141697,141698],{"class":36,"line":579},[34,141699,132573],{"class":205},[34,141701,141702,141704,141706,141708,141710,141712],{"class":36,"line":589},[34,141703,132578],{"class":149},[34,141705,80437],{"class":40},[34,141707,129413],{"class":63},[34,141709,67],{"class":40},[34,141711,132587],{"class":63},[34,141713,129983],{"class":40},[108,141715,140512],{},[24,141717,141718],{"className":196,"code":132485,"language":198,"meta":29,"style":29},[31,141719,141720,141724,141738,141742,141756,141760,141774,141778,141792,141796],{"__ignoreMap":29},[34,141721,141722],{"class":36,"line":37},[34,141723,132492],{"class":205},[34,141725,141726,141728,141730,141732,141734,141736],{"class":36,"line":51},[34,141727,132497],{"class":149},[34,141729,80437],{"class":40},[34,141731,129413],{"class":63},[34,141733,67],{"class":40},[34,141735,132506],{"class":63},[34,141737,129983],{"class":40},[34,141739,141740],{"class":36,"line":60},[34,141741,132513],{"class":205},[34,141743,141744,141746,141748,141750,141752,141754],{"class":36,"line":76},[34,141745,132518],{"class":149},[34,141747,80437],{"class":40},[34,141749,129413],{"class":63},[34,141751,67],{"class":40},[34,141753,55408],{"class":63},[34,141755,129983],{"class":40},[34,141757,141758],{"class":36,"line":93},[34,141759,132533],{"class":205},[34,141761,141762,141764,141766,141768,141770,141772],{"class":36,"line":99},[34,141763,132538],{"class":149},[34,141765,80437],{"class":40},[34,141767,129413],{"class":63},[34,141769,67],{"class":40},[34,141771,55475],{"class":63},[34,141773,129983],{"class":40},[34,141775,141776],{"class":36,"line":353},[34,141777,132553],{"class":205},[34,141779,141780,141782,141784,141786,141788,141790],{"class":36,"line":359},[34,141781,132558],{"class":149},[34,141783,80437],{"class":40},[34,141785,129413],{"class":63},[34,141787,67],{"class":40},[34,141789,86863],{"class":63},[34,141791,129983],{"class":40},[34,141793,141794],{"class":36,"line":579},[34,141795,132573],{"class":205},[34,141797,141798,141800,141802,141804,141806,141808],{"class":36,"line":589},[34,141799,132578],{"class":149},[34,141801,80437],{"class":40},[34,141803,129413],{"class":63},[34,141805,67],{"class":40},[34,141807,132587],{"class":63},[34,141809,129983],{"class":40},[1800,141811,141812,141823],{},[755,141813,141814,141815,141818,141819,101648,141821],{},"1 号盒子左侧浮动 ",[31,141816,141817],{},"sk_list"," 里面包含 ",[31,141820,1800],{},[31,141822,755],{},[755,141824,141825,141826,141818,141829,101648,141831],{},"2 号盒子左侧浮动 ",[31,141827,141828],{},"sk_con",[31,141830,1800],{},[31,141832,755],{},[108,141834,140423],{},[24,141836,141837],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,141838,141839,141845,141855],{"__ignoreMap":29},[34,141840,141841,141843],{"class":36,"line":37},[34,141842,130901],{"class":149},[34,141844,57],{"class":40},[34,141846,141847,141849,141851,141853],{"class":36,"line":51},[34,141848,131533],{"class":63},[34,141850,67],{"class":40},[34,141852,24388],{"class":63},[34,141854,73],{"class":40},[34,141856,141857],{"class":36,"line":60},[34,141858,241],{"class":40},[108,141860,140512],{},[24,141862,141863],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,141864,141865,141871,141881],{"__ignoreMap":29},[34,141866,141867,141869],{"class":36,"line":37},[34,141868,130901],{"class":149},[34,141870,57],{"class":40},[34,141872,141873,141875,141877,141879],{"class":36,"line":51},[34,141874,131533],{"class":63},[34,141876,67],{"class":40},[34,141878,24388],{"class":63},[34,141880,73],{"class":40},[34,141882,141883],{"class":36,"line":60},[34,141884,241],{"class":40},[19,141886,141888,141889],{"id":141887},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[31,141890,141891],{},"sk_container",[2122,141893],{"style":127038,"src":141894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1800,141896,141897,141902],{},[755,141898,141077,141899,141901],{},[31,141900,141891],{}," 给宽度 1200，不要给高度",[755,141903,141904],{},"一定不要忘记清除浮动",[108,141906,140423],{},[24,141908,141909],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,141910,141911,141917,141927],{"__ignoreMap":29},[34,141912,141913,141915],{"class":36,"line":37},[34,141914,130901],{"class":149},[34,141916,57],{"class":40},[34,141918,141919,141921,141923,141925],{"class":36,"line":51},[34,141920,131533],{"class":63},[34,141922,67],{"class":40},[34,141924,24388],{"class":63},[34,141926,73],{"class":40},[34,141928,141929],{"class":36,"line":60},[34,141930,241],{"class":40},[752,141932,141933],{},[755,141934,141935],{},"sk_hd制作",[1800,141937,141938],{},[755,141939,141157,141940,141943],{},[31,141941,141942],{},"sk_hd"," ，插入图片即可",[108,141945,140423],{},[24,141947,141948],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,141949,141950],{"__ignoreMap":29},[34,141951,141952,141954,141956,141958,141960,141962,141964,141966,141968,141970,141972,141974],{"class":36,"line":37},[34,141953,41],{"class":40},[34,141955,2122],{"class":44},[34,141957,55882],{"class":149},[34,141959,153],{"class":40},[34,141961,134570],{"class":156},[34,141963,55890],{"class":149},[34,141965,153],{"class":40},[34,141967,134577],{"class":156},[34,141969,134580],{"class":149},[34,141971,153],{"class":40},[34,141973,134585],{"class":156},[34,141975,48],{"class":40},[752,141977,141978],{"start":51},[755,141979,141980],{},"sk_bd制作",[1800,141982,141983],{},[755,141984,141985,141986,141989,141990,101648,141992,141994],{},"3 号盒子 ",[31,141987,141988],{},"sk_bd"," ，里面包含很多的 ",[31,141991,1800],{},[31,141993,755],{},[1800,141995,141996,142005],{},[755,141997,141998,141999,142001,142002,142004],{},"当鼠标移入到 ",[31,142000,755],{}," 上面的时候显示红色的边框，在这里先给 ",[31,142003,755],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[755,142006,142007,142008,142010,142011,142013,142014,142017,142018,142020],{},"由于给每个 ",[31,142009,755],{}," 都设置了外边距，导致一行的最后一个 ",[31,142012,755],{}," 掉了下来，在这里我们利用 ",[31,142015,142016],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[31,142019,755],{},"，去掉外边距就好了",[108,142022,140423],{},[24,142024,142025],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,142026,142027,142033,142045],{"__ignoreMap":29},[34,142028,142029,142031],{"class":36,"line":37},[34,142030,52258],{"class":44},[34,142032,57],{"class":40},[34,142034,142035,142037,142039,142041,142043],{"class":36,"line":51},[34,142036,71105],{"class":63},[34,142038,67],{"class":40},[34,142040,987],{"class":63},[34,142042,52203],{"class":63},[34,142044,73],{"class":40},[34,142046,142047],{"class":36,"line":60},[34,142048,241],{"class":40},[108,142050,140512],{},[24,142052,142053],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,142054,142055,142061,142073],{"__ignoreMap":29},[34,142056,142057,142059],{"class":36,"line":37},[34,142058,52258],{"class":44},[34,142060,57],{"class":40},[34,142062,142063,142065,142067,142069,142071],{"class":36,"line":51},[34,142064,71105],{"class":63},[34,142066,67],{"class":40},[34,142068,987],{"class":63},[34,142070,52203],{"class":63},[34,142072,73],{"class":40},[34,142074,142075],{"class":36,"line":60},[34,142076,241],{"class":40},[14,142078,142080],{"id":142079},"_163-注册页面制作","16.3 注册页面制作",[2122,142082],{"style":127038,"src":142083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[108,142085,142086,142088],{},[111,142087,9678],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2122,142090],{"style":127038,"src":142091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[19,142093,142095],{"id":142094},"_1631-准备工作","16.3.1 准备工作",[1800,142097,142098,142101],{},[755,142099,142100],{},"创建register.html，引入 base.css，引入favicon图标",[755,142102,142103],{},"创建register.css ，在html页面进行引入",[19,142105,142107,142108,142110],{"id":142106},"_1632-header-头部实现","16.3.2 ",[31,142109,132058],{}," 头部实现",[1800,142112,142113,142116],{},[755,142114,142115],{},"整个内容用 版心 进行包裹",[755,142117,142118],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[108,142120,140423],{},[24,142122,142123],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,142124,142125],{"__ignoreMap":29},[34,142126,142127,142129,142131,142133,142135,142137,142139,142141,142143,142145,142147,142149],{"class":36,"line":37},[34,142128,41],{"class":40},[34,142130,2122],{"class":44},[34,142132,55882],{"class":149},[34,142134,153],{"class":40},[34,142136,134570],{"class":156},[34,142138,55890],{"class":149},[34,142140,153],{"class":40},[34,142142,134577],{"class":156},[34,142144,134580],{"class":149},[34,142146,153],{"class":40},[34,142148,134585],{"class":156},[34,142150,48],{"class":40},[108,142152,140512],{},[24,142154,142155],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,142156,142157],{"__ignoreMap":29},[34,142158,142159,142161,142163,142165,142167,142169,142171,142173,142175,142177,142179,142181],{"class":36,"line":37},[34,142160,41],{"class":40},[34,142162,2122],{"class":44},[34,142164,55882],{"class":149},[34,142166,153],{"class":40},[34,142168,134570],{"class":156},[34,142170,55890],{"class":149},[34,142172,153],{"class":40},[34,142174,134577],{"class":156},[34,142176,134580],{"class":149},[34,142178,153],{"class":40},[34,142180,134585],{"class":156},[34,142182,48],{"class":40},[19,142184,142186,142187,142190],{"id":142185},"_1633-registerarea-主体模块实现","16.3.3 ",[31,142188,142189],{},"registerarea"," 主体模块实现",[2122,142192],{"style":127038,"src":142193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[108,142195,142196],{},"整个大盒子 高度为 522px，设置4个边框",[108,142198,140423],{},[24,142200,142201],{"className":196,"code":131210,"language":198,"meta":29,"style":29},[31,142202,142203,142209,142225],{"__ignoreMap":29},[34,142204,142205,142207],{"class":36,"line":37},[34,142206,52258],{"class":44},[34,142208,57],{"class":40},[34,142210,142211,142213,142215,142217,142219,142221,142223],{"class":36,"line":51},[34,142212,71528],{"class":63},[34,142214,67],{"class":40},[34,142216,1013],{"class":63},[34,142218,88],{"class":87},[34,142220,52168],{"class":63},[34,142222,130445],{"class":63},[34,142224,73],{"class":40},[34,142226,142227],{"class":36,"line":60},[34,142228,241],{"class":40},[108,142230,140512],{},[24,142232,142233],{"className":196,"code":131210,"language":198,"meta":29,"style":29},[31,142234,142235,142241,142257],{"__ignoreMap":29},[34,142236,142237,142239],{"class":36,"line":37},[34,142238,52258],{"class":44},[34,142240,57],{"class":40},[34,142242,142243,142245,142247,142249,142251,142253,142255],{"class":36,"line":51},[34,142244,71528],{"class":63},[34,142246,67],{"class":40},[34,142248,1013],{"class":63},[34,142250,88],{"class":87},[34,142252,52168],{"class":63},[34,142254,130445],{"class":63},[34,142256,73],{"class":40},[34,142258,142259],{"class":36,"line":60},[34,142260,241],{"class":40},[108,142262,142263],{},"1号盒子 是一个 h3 标签，放标题",[1800,142265,142266],{},[755,142267,142268],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[108,142270,140423],{},[24,142272,142273],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,142274,142275,142281,142291],{"__ignoreMap":29},[34,142276,142277,142279],{"class":36,"line":37},[34,142278,130901],{"class":149},[34,142280,57],{"class":40},[34,142282,142283,142285,142287,142289],{"class":36,"line":51},[34,142284,131533],{"class":63},[34,142286,67],{"class":40},[34,142288,24388],{"class":63},[34,142290,73],{"class":40},[34,142292,142293],{"class":36,"line":60},[34,142294,241],{"class":40},[108,142296,140512],{},[24,142298,142299],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,142300,142301,142307,142317],{"__ignoreMap":29},[34,142302,142303,142305],{"class":36,"line":37},[34,142304,130901],{"class":149},[34,142306,57],{"class":40},[34,142308,142309,142311,142313,142315],{"class":36,"line":51},[34,142310,131533],{"class":63},[34,142312,67],{"class":40},[34,142314,24388],{"class":63},[34,142316,73],{"class":40},[34,142318,142319],{"class":36,"line":60},[34,142320,241],{"class":40},[108,142322,142323],{},"2号盒子 里面放注册的内容",[1800,142325,142326,142329,142338,142352,142365,142368,142371,142389,142403],{},[755,142327,142328],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[755,142330,142331,142332,142334,142335,142337],{},"里面的内容利用 ",[31,142333,1800],{}," 包含 ",[31,142336,755],{}," 来实现的（不需要用表格）",[755,142339,139567,142340,142342,142343,142345,142346,142348,142349,142351],{},[31,142341,755],{}," 里面，左侧放 ",[31,142344,34259],{}," 标签， 中间放",[31,142347,669],{}," 标签， 右侧放 ",[31,142350,34],{}," 提示信息",[755,142353,142354,142355,142357,142358,142360,142361,142364],{},"左侧 ",[31,142356,34259],{},"里面的文字都是右对齐，我们可以给",[31,142359,34259],{},"设置一个宽度（88px），然后利用",[31,142362,142363],{},"text-align"," 来设置右对齐",[755,142366,142367],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[755,142369,142370],{},"右侧 span修饰一下文字颜色",[755,142372,142373,142374],{},"提示信息的样式优化",[1800,142375,142376,142379,142382],{},[755,142377,142378],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[755,142380,142381],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[755,142383,142384,142385,142388],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[31,142386,142387],{},"vertical-algin"," 来设置 图片与文字对齐方式",[755,142390,142391,142392],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1800,142393,142394,142400],{},[755,142395,142396,142397,142399],{},"设置 ",[31,142398,24205],{}," 的 左右 12px 的内边距，设置一下文字颜色",[755,142401,142402],{},"分别设置 背景颜色",[755,142404,142405,142406,142408],{},"同意协议 和 完成注册 都是用 ",[31,142407,755],{}," 进行包裹",[108,142410,140423],{},[24,142412,142413],{"className":196,"code":140996,"language":198,"meta":29,"style":29},[31,142414,142415,142421,142431],{"__ignoreMap":29},[34,142416,142417,142419],{"class":36,"line":37},[34,142418,52258],{"class":44},[34,142420,57],{"class":40},[34,142422,142423,142425,142427,142429],{"class":36,"line":51},[34,142424,71510],{"class":63},[34,142426,67],{"class":40},[34,142428,141013],{"class":63},[34,142430,73],{"class":40},[34,142432,142433],{"class":36,"line":60},[34,142434,241],{"class":40},[108,142436,140512],{},[24,142438,142439],{"className":196,"code":140996,"language":198,"meta":29,"style":29},[31,142440,142441,142447,142457],{"__ignoreMap":29},[34,142442,142443,142445],{"class":36,"line":37},[34,142444,52258],{"class":44},[34,142446,57],{"class":40},[34,142448,142449,142451,142453,142455],{"class":36,"line":51},[34,142450,71510],{"class":63},[34,142452,67],{"class":40},[34,142454,141013],{"class":63},[34,142456,73],{"class":40},[34,142458,142459],{"class":36,"line":60},[34,142460,241],{"class":40},[19,142462,142464],{"id":142463},"_1634-底部实现","16.3.4 底部实现",[108,142466,140423],{},[24,142468,142469],{"className":196,"code":140996,"language":198,"meta":29,"style":29},[31,142470,142471,142477,142487],{"__ignoreMap":29},[34,142472,142473,142475],{"class":36,"line":37},[34,142474,52258],{"class":44},[34,142476,57],{"class":40},[34,142478,142479,142481,142483,142485],{"class":36,"line":51},[34,142480,71510],{"class":63},[34,142482,67],{"class":40},[34,142484,141013],{"class":63},[34,142486,73],{"class":40},[34,142488,142489],{"class":36,"line":60},[34,142490,241],{"class":40},[108,142492,140512],{},[24,142494,142495],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,142496,142497,142501,142515,142519],{"__ignoreMap":29},[34,142498,142499],{"class":36,"line":37},[34,142500,131164],{"class":205},[34,142502,142503,142505,142507,142509,142511,142513],{"class":36,"line":51},[34,142504,41],{"class":40},[34,142506,52258],{"class":44},[34,142508,54132],{"class":149},[34,142510,153],{"class":40},[34,142512,131177],{"class":156},[34,142514,48],{"class":40},[34,142516,142517],{"class":36,"line":60},[34,142518,131184],{"class":40},[34,142520,142521,142523,142525],{"class":36,"line":76},[34,142522,102],{"class":40},[34,142524,52258],{"class":44},[34,142526,48],{"class":40},[14,142528,142530],{"id":142529},"_164-项目总结","16.4 项目总结",[752,142532,142533,142536,142539,142542],{},[755,142534,142535],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[755,142537,142538],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[755,142540,142541],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[755,142543,142544],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2122,142546],{"style":127038,"src":142547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[752,142549,142550],{"start":93},[755,142551,142552],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2122,142554],{"style":127038,"src":142555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[752,142557,142558],{"start":99},[755,142559,142560],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2122,142562],{"style":127038,"src":142563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[24,142565,142566],{"className":26,"code":137210,"language":28,"meta":29,"style":29},[31,142567,142568],{"__ignoreMap":29},[34,142569,142570,142572,142574,142576,142578,142580,142582,142584,142586,142588,142590,142592],{"class":36,"line":37},[34,142571,41],{"class":40},[34,142573,669],{"class":44},[34,142575,54469],{"class":149},[34,142577,153],{"class":40},[34,142579,63337],{"class":156},[34,142581,15573],{"class":149},[34,142583,153],{"class":40},[34,142585,137231],{"class":156},[34,142587,61662],{"class":149},[34,142589,153],{"class":40},[34,142591,137238],{"class":156},[34,142593,48],{"class":40},[752,142595,142596,142599],{"start":353},[755,142597,142598],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[755,142600,142601],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[45,142603,142604],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":29,"searchDepth":51,"depth":51,"links":142606},[142607,142612,142619,142627],{"id":140233,"depth":51,"text":140234,"children":142608},[142609,142610,142611],{"id":140237,"depth":60,"text":140238},{"id":140968,"depth":60,"text":140969},{"id":141281,"depth":60,"text":141282},{"id":141581,"depth":51,"text":141582,"children":142613},[142614,142615,142617],{"id":141585,"depth":60,"text":141586},{"id":141603,"depth":60,"text":142616},"16.2.2 列表页 header 和 nav 修改",{"id":141887,"depth":60,"text":142618},"16.2.3 列表页主体 sk_container",{"id":142079,"depth":51,"text":142080,"children":142620},[142621,142622,142624,142626],{"id":142094,"depth":60,"text":142095},{"id":142106,"depth":60,"text":142623},"16.3.2 header 头部实现",{"id":142185,"depth":60,"text":142625},"16.3.3 registerarea 主体模块实现",{"id":142463,"depth":60,"text":142464},{"id":142529,"depth":51,"text":142530},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140225,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142634,"title":142635,"body":142636,"description":723,"extension":724,"meta":142744,"navigation":726,"path":142745,"seo":142746,"stem":142747,"__hash__":142748},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142637,"toc":142739},[142638,142641,142645,142648,142651,142660,142669,142673,142678,142685,142703,142706,142709,142712,142715,142718,142721,142724,142727,142730,142733,142736],[10,142639,142635],{"id":142640},"_17-web服务器与网站发布",[14,142642,142644],{"id":142643},"_171-web服务器","17.1 Web服务器",[108,142646,142647],{},"把自己网站上传到服务器上，可以让其他人访问",[2122,142649],{"style":127038,"src":142650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[108,142652,142653,142656,142657],{},[111,142654,142655],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[111,142658,142659],{},"Web 服务器等",[108,142661,142662,142663,101648,142666,490],{},"根据服务器在网络中所在的位置不同，又可分为 ",[111,142664,142665],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[111,142667,142668],{},"远程服务器",[19,142670,142672],{"id":142671},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[108,142674,142675],{},[111,142676,142677],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[108,142679,142680,142681],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[520,142682,142683],{"href":142683,"rel":142684},"http:\u002F\u002Ffree.3v.do\u002F",[24517],[1800,142686,142687,142690,142693,142700],{},[755,142688,142689],{},"去免费空间网站注册账号。",[755,142691,142692],{},"记录下主机名、用户名、密码、域名。",[755,142694,142695,142696,142699],{},"利用 ",[31,142697,142698],{},"utftp"," 软件 上传网站到远程服务器",[755,142701,142702],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[108,142704,142705],{},"使用软件上传，对上传软件文件进行解压",[2122,142707],{"style":127038,"src":142708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2122,142710],{"style":127038,"src":142711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[108,142713,142714],{},"输入刚刚申请的服务器账号信息：",[2122,142716],{"style":127038,"src":142717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2122,142719],{"style":127038,"src":142720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2122,142722],{"style":127038,"src":142723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2122,142725],{"style":127038,"src":142726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[108,142728,142729],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2122,142731],{"style":127038,"src":142732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[108,142734,142735],{},"浏览器输入域名即可访问",[108,142737,142738],{},"首页一定必须是index",{"title":29,"searchDepth":51,"depth":51,"links":142740},[142741],{"id":142643,"depth":51,"text":142644,"children":142742},[142743],{"id":142671,"depth":60,"text":142672},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142635,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142750,"title":142751,"body":142752,"description":723,"extension":724,"meta":143679,"navigation":726,"path":143680,"seo":143681,"stem":143682,"__hash__":143683},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142753,"toc":143662},[142754,142757,142761,142764,142767,142778,142781,142785,142789,142794,142797,142800,142803,142806,142810,142836,142840,142844,142847,142850,142854,142887,142891,142894,142897,142961,142965,142969,142972,142975,142978,142982,143027,143031,143034,143064,143068,143072,143075,143078,143082,143085,143154,143157,143265,143267,143273,143277,143280,143283,143379,143382,143386,143410,143414,143417,143421,143424,143428,143431,143434,143437,143440,143444,143447,143450,143454,143458,143461,143464,143467,143470,143474,143477,143481,143484,143487,143532,143536,143540,143543,143546,143549,143581,143585,143588,143622,143626,143629,143659],[10,142755,142751],{"id":142756},"_18-2d动画与3d转换",[14,142758,142760],{"id":142759},"_181-css3-2d转换","18.1 CSS3 2D转换",[108,142762,142763],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[108,142765,142766],{},"转换（transform）你可以简单理解为变形",[1800,142768,142769,142772,142775],{},[755,142770,142771],{},"移动：translate",[755,142773,142774],{},"旋转：rotate",[755,142776,142777],{},"缩放：scale",[2122,142779],{"style":127038,"src":142780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[19,142782,142784],{"id":142783},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22650,142786,142788],{"id":142787},"_18111-translate介绍","18.1.1.1 translate介绍",[108,142790,142791,142792],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[111,142793,133712],{},[2122,142795],{"style":127038,"src":142796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[108,142798,142799],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[108,142801,142802],{},"对于行内元素无效",[108,142804,142805],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22650,142807,142809],{"id":142808},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[24,142811,142812],{"className":196,"code":139242,"language":198,"meta":29,"style":29},[31,142813,142814,142820,142832],{"__ignoreMap":29},[34,142815,142816,142818],{"class":36,"line":37},[34,142817,52258],{"class":44},[34,142819,57],{"class":40},[34,142821,142822,142824,142826,142828,142830],{"class":36,"line":51},[34,142823,71105],{"class":63},[34,142825,67],{"class":40},[34,142827,987],{"class":63},[34,142829,52203],{"class":63},[34,142831,73],{"class":40},[34,142833,142834],{"class":36,"line":60},[34,142835,241],{"class":40},[19,142837,142839],{"id":142838},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22650,142841,142843],{"id":142842},"_18121-rotate介绍","18.1.2.1 rotate介绍",[108,142845,142846],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2122,142848],{"style":127038,"src":142849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22650,142851,142853],{"id":142852},"_18122-旋转效果","18.1.2.2 旋转效果",[24,142855,142857],{"className":196,"code":142856,"language":198,"meta":29,"style":29},"div {\n  transform: rotate(45deg);\n}\n",[31,142858,142859,142865,142883],{"__ignoreMap":29},[34,142860,142861,142863],{"class":36,"line":37},[34,142862,52258],{"class":44},[34,142864,57],{"class":40},[34,142866,142867,142869,142871,142874,142876,142878,142881],{"class":36,"line":51},[34,142868,137037],{"class":63},[34,142870,67],{"class":40},[34,142872,142873],{"class":63},"rotate",[34,142875,801],{"class":40},[34,142877,1324],{"class":63},[34,142879,142880],{"class":87},"deg",[34,142882,3372],{"class":40},[34,142884,142885],{"class":36,"line":60},[34,142886,241],{"class":40},[22650,142888,142890],{"id":142889},"_18123-三角做法","18.1.2.3 三角做法",[108,142892,142893],{},"该下标当经过最外层大盒子时会实现向上反转",[2122,142895],{"style":127038,"src":142896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[24,142898,142899],{"className":196,"code":135573,"language":198,"meta":29,"style":29},[31,142900,142901,142905,142911,142921,142931,142947,142957],{"__ignoreMap":29},[34,142902,142903],{"class":36,"line":37},[34,142904,135580],{"class":205},[34,142906,142907,142909],{"class":36,"line":51},[34,142908,135585],{"class":149},[34,142910,57],{"class":40},[34,142912,142913,142915,142917,142919],{"class":36,"line":60},[34,142914,71202],{"class":63},[34,142916,67],{"class":40},[34,142918,987],{"class":63},[34,142920,73],{"class":40},[34,142922,142923,142925,142927,142929],{"class":36,"line":76},[34,142924,71421],{"class":63},[34,142926,67],{"class":40},[34,142928,987],{"class":63},[34,142930,73],{"class":40},[34,142932,142933,142935,142937,142939,142941,142943,142945],{"class":36,"line":93},[34,142934,71528],{"class":63},[34,142936,67],{"class":40},[34,142938,1241],{"class":63},[34,142940,88],{"class":87},[34,142942,52168],{"class":63},[34,142944,64629],{"class":63},[34,142946,73],{"class":40},[34,142948,142949,142951,142953,142955],{"class":36,"line":99},[34,142950,135628],{"class":63},[34,142952,67],{"class":40},[34,142954,534],{"class":63},[34,142956,73],{"class":40},[34,142958,142959],{"class":36,"line":353},[34,142960,241],{"class":40},[19,142962,142964],{"id":142963},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22650,142966,142968],{"id":142967},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[108,142970,142971],{},"设置中心点",[2122,142973],{"style":127038,"src":142974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[108,142976,142977],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22650,142979,142981],{"id":142980},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[24,142983,142985],{"className":196,"code":142984,"language":198,"meta":29,"style":29},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[31,142986,142987,142992,142998,143013,143018,143023],{"__ignoreMap":29},[34,142988,142989],{"class":36,"line":37},[34,142990,142991],{"class":205},"\u002F* 转换中心点 *\u002F\n",[34,142993,142994,142996],{"class":36,"line":51},[34,142995,52258],{"class":44},[34,142997,57],{"class":40},[34,142999,143000,143003,143005,143007,143009,143011],{"class":36,"line":60},[34,143001,143002],{"class":63},"  transform-origin",[34,143004,67],{"class":40},[34,143006,52239],{"class":63},[34,143008,17796],{"class":63},[34,143010,130916],{"class":40},[34,143012,135726],{"class":205},[34,143014,143015],{"class":36,"line":76},[34,143016,143017],{"class":205},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[34,143019,143020],{"class":36,"line":93},[34,143021,143022],{"class":205},"  \u002F* transform-origin: left top; *\u002F\n",[34,143024,143025],{"class":36,"line":99},[34,143026,241],{"class":40},[22650,143028,143030],{"id":143029},"_18133-旋转案例","18.1.3.3 旋转案例",[2122,143032],{"style":127038,"src":143033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[24,143035,143036],{"className":196,"code":142856,"language":198,"meta":29,"style":29},[31,143037,143038,143044,143060],{"__ignoreMap":29},[34,143039,143040,143042],{"class":36,"line":37},[34,143041,52258],{"class":44},[34,143043,57],{"class":40},[34,143045,143046,143048,143050,143052,143054,143056,143058],{"class":36,"line":51},[34,143047,137037],{"class":63},[34,143049,67],{"class":40},[34,143051,142873],{"class":63},[34,143053,801],{"class":40},[34,143055,1324],{"class":63},[34,143057,142880],{"class":87},[34,143059,3372],{"class":40},[34,143061,143062],{"class":36,"line":60},[34,143063,241],{"class":40},[19,143065,143067],{"id":143066},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22650,143069,143071],{"id":143070},"_18141-scale介绍","18.1.4.1 scale介绍",[108,143073,143074],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2122,143076],{"style":127038,"src":143077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22650,143079,143081],{"id":143080},"_18142-分页按钮","18.1.4.2 分页按钮",[2122,143083],{"style":127038,"src":143084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[24,143086,143088],{"className":196,"code":143087,"language":198,"meta":29,"style":29},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[31,143089,143090,143096,143112,143116,143120,143125,143131,143145,143150],{"__ignoreMap":29},[34,143091,143092,143094],{"class":36,"line":37},[34,143093,52258],{"class":44},[34,143095,57],{"class":40},[34,143097,143098,143100,143102,143105,143107,143110],{"class":36,"line":51},[34,143099,137037],{"class":63},[34,143101,67],{"class":40},[34,143103,143104],{"class":63},"scale",[34,143106,801],{"class":40},[34,143108,143109],{"class":63},"1.2",[34,143111,3372],{"class":40},[34,143113,143114],{"class":36,"line":60},[34,143115,241],{"class":40},[34,143117,143118],{"class":36,"line":76},[34,143119,136514],{"class":40},[34,143121,143122],{"class":36,"line":93},[34,143123,143124],{"class":205},"\u002F* 2D 缩放 *\u002F\n",[34,143126,143127,143129],{"class":36,"line":99},[34,143128,52258],{"class":44},[34,143130,57],{"class":40},[34,143132,143133,143135,143137,143139,143141,143143],{"class":36,"line":353},[34,143134,137037],{"class":63},[34,143136,67],{"class":40},[34,143138,143104],{"class":63},[34,143140,801],{"class":40},[34,143142,143109],{"class":63},[34,143144,3372],{"class":40},[34,143146,143147],{"class":36,"line":359},[34,143148,143149],{"class":205},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[34,143151,143152],{"class":36,"line":579},[34,143153,241],{"class":40},[108,143155,143156],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[24,143158,143160],{"className":196,"code":143159,"language":198,"meta":29,"style":29},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[31,143161,143162,143167,143177,143198,143219,143223,143228,143234,143261],{"__ignoreMap":29},[34,143163,143164],{"class":36,"line":37},[34,143165,143166],{"class":205},"\u002F* 定义动画 *\u002F\n",[34,143168,143169,143172,143175],{"class":36,"line":51},[34,143170,143171],{"class":87},"@keyframes",[34,143173,143174],{"class":5869}," move",[34,143176,57],{"class":40},[34,143178,143179,143182,143184,143186,143188,143191,143193,143195],{"class":36,"line":60},[34,143180,143181],{"class":149},"  0%",[34,143183,80437],{"class":40},[34,143185,48785],{"class":63},[34,143187,67],{"class":40},[34,143189,143190],{"class":63},"translateX",[34,143192,801],{"class":40},[34,143194,987],{"class":63},[34,143196,143197],{"class":40},"); }\n",[34,143199,143200,143203,143205,143207,143209,143211,143213,143215,143217],{"class":36,"line":76},[34,143201,143202],{"class":149},"  100%",[34,143204,80437],{"class":40},[34,143206,48785],{"class":63},[34,143208,67],{"class":40},[34,143210,143190],{"class":63},[34,143212,801],{"class":40},[34,143214,1106],{"class":63},[34,143216,88],{"class":87},[34,143218,143197],{"class":40},[34,143220,143221],{"class":36,"line":93},[34,143222,241],{"class":40},[34,143224,143225],{"class":36,"line":99},[34,143226,143227],{"class":205},"\u002F* 调用动画 *\u002F\n",[34,143229,143230,143232],{"class":36,"line":353},[34,143231,52258],{"class":44},[34,143233,57],{"class":40},[34,143235,143236,143239,143241,143243,143245,143247,143249,143251,143253,143256,143259],{"class":36,"line":359},[34,143237,143238],{"class":63},"  animation",[34,143240,67],{"class":40},[34,143242,135739],{"class":63},[34,143244,25771],{"class":63},[34,143246,1490],{"class":87},[34,143248,79310],{"class":63},[34,143250,4746],{"class":63},[34,143252,1490],{"class":87},[34,143254,143255],{"class":63}," infinite",[34,143257,143258],{"class":63}," alternate",[34,143260,73],{"class":40},[34,143262,143263],{"class":36,"line":579},[34,143264,241],{"class":40},[108,143266,143156],{},[24,143268,143271],{"className":143269,"code":143270,"language":5840},[5838],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[31,143272,143270],{"__ignoreMap":29},[22650,143274,143276],{"id":143275},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[108,143278,143279],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2122,143281],{"style":127038,"src":143282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[24,143284,143285],{"className":196,"code":143159,"language":198,"meta":29,"style":29},[31,143286,143287,143291,143299,143317,143337,143341,143345,143351,143375],{"__ignoreMap":29},[34,143288,143289],{"class":36,"line":37},[34,143290,143166],{"class":205},[34,143292,143293,143295,143297],{"class":36,"line":51},[34,143294,143171],{"class":87},[34,143296,143174],{"class":5869},[34,143298,57],{"class":40},[34,143300,143301,143303,143305,143307,143309,143311,143313,143315],{"class":36,"line":60},[34,143302,143181],{"class":149},[34,143304,80437],{"class":40},[34,143306,48785],{"class":63},[34,143308,67],{"class":40},[34,143310,143190],{"class":63},[34,143312,801],{"class":40},[34,143314,987],{"class":63},[34,143316,143197],{"class":40},[34,143318,143319,143321,143323,143325,143327,143329,143331,143333,143335],{"class":36,"line":76},[34,143320,143202],{"class":149},[34,143322,80437],{"class":40},[34,143324,48785],{"class":63},[34,143326,67],{"class":40},[34,143328,143190],{"class":63},[34,143330,801],{"class":40},[34,143332,1106],{"class":63},[34,143334,88],{"class":87},[34,143336,143197],{"class":40},[34,143338,143339],{"class":36,"line":93},[34,143340,241],{"class":40},[34,143342,143343],{"class":36,"line":99},[34,143344,143227],{"class":205},[34,143346,143347,143349],{"class":36,"line":353},[34,143348,52258],{"class":44},[34,143350,57],{"class":40},[34,143352,143353,143355,143357,143359,143361,143363,143365,143367,143369,143371,143373],{"class":36,"line":359},[34,143354,143238],{"class":63},[34,143356,67],{"class":40},[34,143358,135739],{"class":63},[34,143360,25771],{"class":63},[34,143362,1490],{"class":87},[34,143364,79310],{"class":63},[34,143366,4746],{"class":63},[34,143368,1490],{"class":87},[34,143370,143255],{"class":63},[34,143372,143258],{"class":63},[34,143374,73],{"class":40},[34,143376,143377],{"class":36,"line":579},[34,143378,241],{"class":40},[108,143380,143381],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[19,143383,143385],{"id":143384},"_1823-知识点回顾","18.2.3 知识点回顾",[24,143387,143388],{"className":196,"code":129222,"language":198,"meta":29,"style":29},[31,143389,143390,143396,143406],{"__ignoreMap":29},[34,143391,143392,143394],{"class":36,"line":37},[34,143393,52258],{"class":44},[34,143395,57],{"class":40},[34,143397,143398,143400,143402,143404],{"class":36,"line":51},[34,143399,129235],{"class":63},[34,143401,67],{"class":40},[34,143403,62377],{"class":63},[34,143405,73],{"class":40},[34,143407,143408],{"class":36,"line":60},[34,143409,241],{"class":40},[14,143411,143413],{"id":143412},"_183-3d-转换","18.3 3D 转换",[108,143415,143416],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[19,143418,143420],{"id":143419},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2122,143422],{"style":127038,"src":143423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[19,143425,143427],{"id":143426},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2122,143429],{"style":127038,"src":143430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[108,143432,143433],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[108,143435,143436],{},"translate3d的效果需要搭配透视perspective来使用",[2122,143438],{"style":127038,"src":143439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[19,143441,143443],{"id":143442},"_1833-透视-perspective","18.3.3 透视 perspective",[2122,143445],{"style":127038,"src":143446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[108,143448,143449],{},"透视写在父盒子上，单位为像素",[19,143451,143453],{"id":143452},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22650,143455,143457],{"id":143456},"_18341-分开解释","18.3.4.1 分开解释",[2122,143459],{"style":127038,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2122,143462],{"style":127038,"src":143463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2122,143465],{"style":127038,"src":143466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[108,143468,143469],{},"总结来说就是左手原则",[22650,143471,143473],{"id":143472},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2122,143475],{"style":127038,"src":143476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[19,143478,143480],{"id":143479},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2122,143482],{"style":127038,"src":143483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2122,143485],{"style":127038,"src":143486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[24,143488,143490],{"className":196,"code":143489,"language":198,"meta":29,"style":29},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[31,143491,143492,143498,143511,143528],{"__ignoreMap":29},[34,143493,143494,143496],{"class":36,"line":37},[34,143495,52258],{"class":44},[34,143497,57],{"class":40},[34,143499,143500,143503,143505,143507,143509],{"class":36,"line":51},[34,143501,143502],{"class":63},"  perspective",[34,143504,67],{"class":40},[34,143506,65712],{"class":63},[34,143508,88],{"class":87},[34,143510,73],{"class":40},[34,143512,143513,143515,143517,143520,143522,143524,143526],{"class":36,"line":60},[34,143514,137037],{"class":63},[34,143516,67],{"class":40},[34,143518,143519],{"class":63},"rotateX",[34,143521,801],{"class":40},[34,143523,1324],{"class":63},[34,143525,142880],{"class":87},[34,143527,3372],{"class":40},[34,143529,143530],{"class":36,"line":76},[34,143531,241],{"class":40},[19,143533,143535],{"id":143534},"_1836-案例","18.3.6 案例",[22650,143537,143539],{"id":143538},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2122,143541],{"style":127038,"src":143542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2122,143544],{"style":127038,"src":143545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2122,143547],{"style":127038,"src":143548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[24,143550,143552],{"className":196,"code":143551,"language":198,"meta":29,"style":29},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[31,143553,143554,143559,143565,143577],{"__ignoreMap":29},[34,143555,143556],{"class":36,"line":37},[34,143557,143558],{"class":205},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[34,143560,143561,143563],{"class":36,"line":51},[34,143562,134050],{"class":149},[34,143564,57],{"class":40},[34,143566,143567,143569,143571,143573,143575],{"class":36,"line":60},[34,143568,143502],{"class":63},[34,143570,67],{"class":40},[34,143572,65712],{"class":63},[34,143574,88],{"class":87},[34,143576,73],{"class":40},[34,143578,143579],{"class":36,"line":76},[34,143580,241],{"class":40},[22650,143582,143584],{"id":143583},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2122,143586],{"style":127038,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[24,143589,143590],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,143591,143592,143596,143610,143614],{"__ignoreMap":29},[34,143593,143594],{"class":36,"line":37},[34,143595,131164],{"class":205},[34,143597,143598,143600,143602,143604,143606,143608],{"class":36,"line":51},[34,143599,41],{"class":40},[34,143601,52258],{"class":44},[34,143603,54132],{"class":149},[34,143605,153],{"class":40},[34,143607,131177],{"class":156},[34,143609,48],{"class":40},[34,143611,143612],{"class":36,"line":60},[34,143613,131184],{"class":40},[34,143615,143616,143618,143620],{"class":36,"line":76},[34,143617,102],{"class":40},[34,143619,52258],{"class":44},[34,143621,48],{"class":40},[22650,143623,143625],{"id":143624},"_18363-旋转木马","18.3.6.3 旋转木马",[2122,143627],{"style":127038,"src":143628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[24,143630,143631],{"className":196,"code":142856,"language":198,"meta":29,"style":29},[31,143632,143633,143639,143655],{"__ignoreMap":29},[34,143634,143635,143637],{"class":36,"line":37},[34,143636,52258],{"class":44},[34,143638,57],{"class":40},[34,143640,143641,143643,143645,143647,143649,143651,143653],{"class":36,"line":51},[34,143642,137037],{"class":63},[34,143644,67],{"class":40},[34,143646,142873],{"class":63},[34,143648,801],{"class":40},[34,143650,1324],{"class":63},[34,143652,142880],{"class":87},[34,143654,3372],{"class":40},[34,143656,143657],{"class":36,"line":60},[34,143658,241],{"class":40},[45,143660,143661],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":143663},[143664,143671],{"id":142759,"depth":51,"text":142760,"children":143665},[143666,143667,143668,143669,143670],{"id":142783,"depth":60,"text":142784},{"id":142838,"depth":60,"text":142839},{"id":142963,"depth":60,"text":142964},{"id":143066,"depth":60,"text":143067},{"id":143384,"depth":60,"text":143385},{"id":143412,"depth":51,"text":143413,"children":143672},[143673,143674,143675,143676,143677,143678],{"id":143419,"depth":60,"text":143420},{"id":143426,"depth":60,"text":143427},{"id":143442,"depth":60,"text":143443},{"id":143452,"depth":60,"text":143453},{"id":143479,"depth":60,"text":143480},{"id":143534,"depth":60,"text":143535},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142751,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143685,"title":143686,"body":143687,"description":723,"extension":724,"meta":143890,"navigation":726,"path":143891,"seo":143892,"stem":143893,"__hash__":143894},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143688,"toc":143879},[143689,143692,143696,143699,143702,143706,143709,143712,143715,143719,143722,143726,143729,143733,143736,143740,143754,143758,143783,143786,143789,143806,143810,143814,143817,143820,143824,143827,143830,143848,143852,143855,143869,143873,143876],[10,143690,143686],{"id":143691},"_19-移动端基础-前缀现状与视口",[14,143693,143695],{"id":143694},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2122,143697],{"style":127038,"src":143698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[108,143700,143701],{},"意思就是加个前缀，增加兼容性",[14,143703,143705],{"id":143704},"_192-移动端现状认识","19.2 移动端现状认识",[2122,143707],{"style":127038,"src":143708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[108,143710,143711],{},"调试方法：",[2122,143713],{"style":127038,"src":143714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143716,143718],{"id":143717},"_193-视口","19.3 视口",[108,143720,143721],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[19,143723,143725],{"id":143724},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2122,143727],{"style":127038,"src":143728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[19,143730,143732],{"id":143731},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2122,143734],{"style":127038,"src":143735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[19,143737,143739],{"id":143738},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1800,143741,143742,143745,143748,143751],{},[755,143743,143744],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[755,143746,143747],{},"理想视口，对设备来讲，是最理想的视口尺寸",[755,143749,143750],{},"需要手动添写meta视口标签通知浏览器操作",[755,143752,143753],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[19,143755,143757],{"id":143756},"_1934-meta视口标签","19.3.4 meta视口标签",[24,143759,143761],{"className":26,"code":143760,"language":28,"meta":29,"style":29},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[31,143762,143763],{"__ignoreMap":29},[34,143764,143765,143767,143769,143771,143773,143775,143777,143779,143781],{"class":36,"line":37},[34,143766,41],{"class":40},[34,143768,51993],{"class":44},[34,143770,15573],{"class":149},[34,143772,153],{"class":40},[34,143774,52040],{"class":156},[34,143776,52020],{"class":149},[34,143778,153],{"class":40},[34,143780,52047],{"class":156},[34,143782,48],{"class":40},[2122,143784],{"style":127038,"src":143785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[108,143787,143788],{},"标准视口设置：",[752,143790,143791,143794,143797,143800,143803],{},[755,143792,143793],{},"视口宽度和设备保持一致",[755,143795,143796],{},"视口的默认缩放比例1.0",[755,143798,143799],{},"不允许用户自行缩放",[755,143801,143802],{},"最大允许的缩放比例1.0",[755,143804,143805],{},"最小允许的缩放比例1.0",[19,143807,143809],{"id":143808},"_1935-二倍图","19.3.5 二倍图",[22650,143811,143813],{"id":143812},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2122,143815],{"style":127038,"src":143816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2122,143818],{"style":127038,"src":143819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22650,143821,143823],{"id":143822},"_19352-多倍图","19.3.5.2 多倍图",[2122,143825],{"style":127038,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[108,143828,143829],{},"二倍图法，代码如下：",[24,143831,143833],{"className":196,"code":143832,"language":198,"meta":29,"style":29},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[31,143834,143835,143840],{"__ignoreMap":29},[34,143836,143837],{"class":36,"line":37},[34,143838,143839],{"class":205},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[34,143841,143842,143845],{"class":36,"line":51},[34,143843,143844],{"class":44},"background-size",[34,143846,143847],{"class":40},": 50% 50%;\n",[22650,143849,143851],{"id":143850},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2122,143853],{"style":127038,"src":143854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[752,143856,143857,143860,143863,143866],{},[755,143858,143859],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[755,143861,143862],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[755,143864,143865],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[755,143867,143868],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22650,143870,143872],{"id":143871},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2122,143874],{"style":127038,"src":143875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[45,143877,143878],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":143880},[143881,143882,143883],{"id":143694,"depth":51,"text":143695},{"id":143704,"depth":51,"text":143705},{"id":143717,"depth":51,"text":143718,"children":143884},[143885,143886,143887,143888,143889],{"id":143724,"depth":60,"text":143725},{"id":143731,"depth":60,"text":143732},{"id":143738,"depth":60,"text":143739},{"id":143756,"depth":60,"text":143757},{"id":143808,"depth":60,"text":143809},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143686,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143896,"title":143897,"body":143898,"description":723,"extension":724,"meta":144775,"navigation":726,"path":144776,"seo":144777,"stem":144778,"__hash__":144779},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143899,"toc":144759},[143900,143903,143907,143914,143917,143924,143927,143932,143935,143939,143943,143950,143953,143956,143960,143963,143966,143969,143972,143975,143979,143982,143986,143988,143991,143994,143997,144000,144002,144005,144007,144037,144039,144069,144073,144076,144080,144083,144100,144103,144106,144182,144184,144187,144190,144193,144196,144198,144201,144204,144208,144230,144233,144236,144240,144243,144249,144252,144256,144259,144262,144266,144269,144272,144275,144279,144282,144285,144288,144291,144295,144298,144302,144309,144312,144315,144318,144321,144331,144334,144337,144344,144347,144351,144354,144357,144361,144364,144367,144370,144415,144418,144421,144424,144426,144555,144557,144595,144598,144601,144603,144721,144723,144757],[10,143901,143897],{"id":143902},"_20-移动端布局实战上篇",[14,143904,143906],{"id":143905},"_201-移动端主流方案","20.1 移动端主流方案",[752,143908,143909],{},[755,143910,143911],{},[111,143912,143913],{},"单独移动端页面（主流）",[2122,143915],{"style":127038,"src":143916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[752,143918,143919],{"start":51},[755,143920,143921],{},[111,143922,143923],{},"响应式兼容PC移动端",[2122,143925],{"style":127038,"src":143926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[752,143928,143929],{"start":60},[755,143930,143931],{},"两种页面选型布局方式",[2122,143933],{"style":127038,"src":143934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143936,143938],{"id":143937},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[19,143940,143942],{"id":143941},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[108,143944,143945,143946],{},"官网地址： ",[520,143947,143948],{"href":143948,"rel":143949},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24517],[2122,143951],{"style":127038,"src":143952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2122,143954],{"style":127038,"src":143955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[19,143957,143959],{"id":143958},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2122,143961],{"style":127038,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2122,143964],{"style":127038,"src":143965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[108,143967,143968],{},"去除高亮：",[108,143970,143971],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[108,143973,143974],{},"-webkit- tap-highlight-color: transparent;",[14,143976,143978],{"id":143977},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2122,143980],{"style":127038,"src":143981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143983,143985],{"id":143984},"_204-流式布局案例","20.4 流式布局案例",[108,143987,830],{},[108,143989,143990],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[108,143992,143993],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[108,143995,143996],{},"图片格式：",[2122,143998],{"style":127038,"src":143999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[108,144001,136096],{},[2122,144003],{"style":127038,"src":144004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[108,144006,140423],{},[24,144008,144009],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,144010,144011],{"__ignoreMap":29},[34,144012,144013,144015,144017,144019,144021,144023,144025,144027,144029,144031,144033,144035],{"class":36,"line":37},[34,144014,41],{"class":40},[34,144016,2122],{"class":44},[34,144018,55882],{"class":149},[34,144020,153],{"class":40},[34,144022,134570],{"class":156},[34,144024,55890],{"class":149},[34,144026,153],{"class":40},[34,144028,134577],{"class":156},[34,144030,134580],{"class":149},[34,144032,153],{"class":40},[34,144034,134585],{"class":156},[34,144036,48],{"class":40},[108,144038,140512],{},[24,144040,144041],{"className":26,"code":134555,"language":28,"meta":29,"style":29},[31,144042,144043],{"__ignoreMap":29},[34,144044,144045,144047,144049,144051,144053,144055,144057,144059,144061,144063,144065,144067],{"class":36,"line":37},[34,144046,41],{"class":40},[34,144048,2122],{"class":44},[34,144050,55882],{"class":149},[34,144052,153],{"class":40},[34,144054,134570],{"class":156},[34,144056,55890],{"class":149},[34,144058,153],{"class":40},[34,144060,134577],{"class":156},[34,144062,134580],{"class":149},[34,144064,153],{"class":40},[34,144066,134585],{"class":156},[34,144068,48],{"class":40},[14,144070,144072],{"id":144071},"_205-flex布局","20.5 flex布局",[2122,144074],{"style":127038,"src":144075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[19,144077,144079],{"id":144078},"_2051-布局原理","20.5.1 布局原理",[108,144081,144082],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1800,144084,144085,144088,144091,144094,144097],{},[755,144086,144087],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[755,144089,144090],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[755,144092,144093],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[755,144095,144096],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[755,144098,144099],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[108,144101,144102],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[108,144104,144105],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[24,144107,144109],{"className":196,"code":144108,"language":198,"meta":29,"style":29},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[31,144110,144111,144116,144123,144133,144145,144156,144167,144178],{"__ignoreMap":29},[34,144112,144113],{"class":36,"line":37},[34,144114,144115],{"class":205},"\u002F* Flex 弹性布局 *\u002F\n",[34,144117,144118,144121],{"class":36,"line":51},[34,144119,144120],{"class":149},".container",[34,144122,57],{"class":40},[34,144124,144125,144127,144129,144131],{"class":36,"line":60},[34,144126,128669],{"class":63},[34,144128,67],{"class":40},[34,144130,52125],{"class":63},[34,144132,73],{"class":40},[34,144134,144135,144138,144140,144143],{"class":36,"line":76},[34,144136,144137],{"class":63},"  flex-direction",[34,144139,67],{"class":40},[34,144141,144142],{"class":63},"row",[34,144144,73],{"class":40},[34,144146,144147,144150,144152,144154],{"class":36,"line":93},[34,144148,144149],{"class":63},"  justify-content",[34,144151,67],{"class":40},[34,144153,52315],{"class":63},[34,144155,73],{"class":40},[34,144157,144158,144161,144163,144165],{"class":36,"line":99},[34,144159,144160],{"class":63},"  align-items",[34,144162,67],{"class":40},[34,144164,52239],{"class":63},[34,144166,73],{"class":40},[34,144168,144169,144172,144174,144176],{"class":36,"line":353},[34,144170,144171],{"class":63},"  flex-wrap",[34,144173,67],{"class":40},[34,144175,79240],{"class":63},[34,144177,73],{"class":40},[34,144179,144180],{"class":36,"line":359},[34,144181,241],{"class":40},[108,144183,71088],{},[108,144185,144186],{},".form-item .male-label {",[108,144188,144189],{},"   margin-right: 20px;",[108,144191,144192],{},"   display: inline-flex;",[108,144194,144195],{},"   align-items: center;",[108,144197,1739],{},[2122,144199],{"style":127038,"src":144200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2122,144202],{"style":127038,"src":144203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[19,144205,144207],{"id":144206},"_2052-常见父项属性","20.5.2 常见父项属性",[752,144209,144210,144213,144216,144219,144222,144225,144228],{},[755,144211,144212],{},"flex-direction：设置主轴的方向",[755,144214,144215],{},"justify-content：设置主轴上的子元素排列方式",[755,144217,144218],{},"flex-wrap：设置子元素是否换行",[755,144220,144221],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[755,144223,144224],{},"align-items：设置侧轴上的子元素排列方式（单行）",[755,144226,144227],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[755,144229,144212],{},[2122,144231],{"style":127038,"src":144232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2122,144234],{"style":127038,"src":144235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[752,144237,144238],{"start":51},[755,144239,144215],{},[2122,144241],{"style":127038,"src":144242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[108,144244,144245,144248],{},[31,144246,144247],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[108,144250,144251],{},"跟着主轴走",[752,144253,144254],{"start":60},[755,144255,144218],{},[2122,144257],{"style":127038,"src":144258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[108,144260,144261],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[752,144263,144264],{"start":76},[755,144265,144221],{},[2122,144267],{"style":127038,"src":144268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[108,144270,144271],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[108,144273,144274],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[752,144276,144277],{"start":93},[755,144278,144224],{},[2122,144280],{"style":127038,"src":144281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[108,144283,144284],{},"align-items与align-content之间的区别：",[108,144286,144287],{},"单找items，多找content",[2122,144289],{"style":127038,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[752,144292,144293],{"start":99},[755,144294,144227],{},[2122,144296],{"style":127038,"src":144297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[19,144299,144301],{"id":144300},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[752,144303,144304],{},[755,144305,144306],{},[111,144307,144308],{},"flex 属性",[108,144310,144311],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2122,144313],{"style":127038,"src":144314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[108,144316,144317],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[108,144319,144320],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[752,144322,144323],{"start":51},[755,144324,144325,14448,144328],{},[111,144326,144327],{},"align-self",[111,144329,144330],{},"控制子项自己在侧轴上的排列方式",[2122,144332],{"style":127038,"src":144333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[108,144335,144336],{},"单个子盒子在父盒子侧轴上的排列方式",[752,144338,144339],{"start":60},[755,144340,144341,144343],{},[111,144342,95927],{}," 属性定义项目的排列顺序",[2122,144345],{"style":127038,"src":144346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[19,144348,144350],{"id":144349},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2122,144352],{"style":127038,"src":144353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[108,144355,144356],{},"必须要添加浏览器的私有前缀",[19,144358,144360],{"id":144359},"_2055-携程网首页案例","20.5.5 携程网首页案例",[108,144362,144363],{},"学到最重要的知识：",[108,144365,144366],{},"flex处理这样的布局思路",[2122,144368],{"style":127038,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[24,144371,144373],{"className":196,"code":144372,"language":198,"meta":29,"style":29},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[31,144374,144375,144381,144391,144401,144411],{"__ignoreMap":29},[34,144376,144377,144379],{"class":36,"line":37},[34,144378,144120],{"class":149},[34,144380,57],{"class":40},[34,144382,144383,144385,144387,144389],{"class":36,"line":51},[34,144384,128669],{"class":63},[34,144386,67],{"class":40},[34,144388,52125],{"class":63},[34,144390,73],{"class":40},[34,144392,144393,144395,144397,144399],{"class":36,"line":60},[34,144394,144149],{"class":63},[34,144396,67],{"class":40},[34,144398,52239],{"class":63},[34,144400,73],{"class":40},[34,144402,144403,144405,144407,144409],{"class":36,"line":76},[34,144404,144160],{"class":63},[34,144406,67],{"class":40},[34,144408,52239],{"class":63},[34,144410,73],{"class":40},[34,144412,144413],{"class":36,"line":93},[34,144414,241],{"class":40},[108,144416,144417],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[108,144419,144420],{},"使用属性选择器",[2122,144422],{"style":127038,"src":144423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[108,144425,69527],{},[24,144427,144429],{"className":26,"code":144428,"language":28,"meta":29,"style":29},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[31,144430,144431,144436,144450,144455,144475,144480,144499,144504,144523,144528,144547],{"__ignoreMap":29},[34,144432,144433],{"class":36,"line":37},[34,144434,144435],{"class":205},"\u003C!-- 携程网移动端案例结构 -->\n",[34,144437,144438,144440,144442,144444,144446,144448],{"class":36,"line":51},[34,144439,41],{"class":40},[34,144441,52258],{"class":44},[34,144443,54132],{"class":149},[34,144445,153],{"class":40},[34,144447,92953],{"class":156},[34,144449,48],{"class":40},[34,144451,144452],{"class":36,"line":60},[34,144453,144454],{"class":205},"  \u003C!-- 搜索栏 -->\n",[34,144456,144457,144459,144461,144463,144465,144468,144471,144473],{"class":36,"line":76},[34,144458,52790],{"class":40},[34,144460,52258],{"class":44},[34,144462,54132],{"class":149},[34,144464,153],{"class":40},[34,144466,144467],{"class":156},"\"search-index\"",[34,144469,144470],{"class":40},">...\u003C\u002F",[34,144472,52258],{"class":44},[34,144474,48],{"class":40},[34,144476,144477],{"class":36,"line":93},[34,144478,144479],{"class":205},"  \u003C!-- 焦点图 -->\n",[34,144481,144482,144484,144486,144488,144490,144493,144495,144497],{"class":36,"line":99},[34,144483,52790],{"class":40},[34,144485,52258],{"class":44},[34,144487,54132],{"class":149},[34,144489,153],{"class":40},[34,144491,144492],{"class":156},"\"focus\"",[34,144494,144470],{"class":40},[34,144496,52258],{"class":44},[34,144498,48],{"class":40},[34,144500,144501],{"class":36,"line":353},[34,144502,144503],{"class":205},"  \u003C!-- 主导航 -->\n",[34,144505,144506,144508,144510,144512,144514,144517,144519,144521],{"class":36,"line":359},[34,144507,52790],{"class":40},[34,144509,52258],{"class":44},[34,144511,54132],{"class":149},[34,144513,153],{"class":40},[34,144515,144516],{"class":156},"\"local-nav\"",[34,144518,144470],{"class":40},[34,144520,52258],{"class":44},[34,144522,48],{"class":40},[34,144524,144525],{"class":36,"line":579},[34,144526,144527],{"class":205},"  \u003C!-- 子导航 -->\n",[34,144529,144530,144532,144534,144536,144538,144541,144543,144545],{"class":36,"line":589},[34,144531,52790],{"class":40},[34,144533,52258],{"class":44},[34,144535,54132],{"class":149},[34,144537,153],{"class":40},[34,144539,144540],{"class":156},"\"nav-common\"",[34,144542,144470],{"class":40},[34,144544,52258],{"class":44},[34,144546,48],{"class":40},[34,144548,144549,144551,144553],{"class":36,"line":601},[34,144550,102],{"class":40},[34,144552,52258],{"class":44},[34,144554,48],{"class":40},[108,144556,71088],{},[24,144558,144559],{"className":196,"code":137505,"language":198,"meta":29,"style":29},[31,144560,144561,144575,144591],{"__ignoreMap":29},[34,144562,144563,144565,144567,144569,144571,144573],{"class":36,"line":37},[34,144564,669],{"class":44},[34,144566,1684],{"class":40},[34,144568,103737],{"class":149},[34,144570,153],{"class":87},[34,144572,63337],{"class":156},[34,144574,137522],{"class":40},[34,144576,144577,144579,144581,144583,144585,144587,144589],{"class":36,"line":51},[34,144578,71528],{"class":63},[34,144580,67],{"class":40},[34,144582,1013],{"class":63},[34,144584,88],{"class":87},[34,144586,52168],{"class":63},[34,144588,130633],{"class":63},[34,144590,73],{"class":40},[34,144592,144593],{"class":36,"line":60},[34,144594,241],{"class":40},[108,144596,144597],{},"总代码和效果展示：",[2122,144599],{"style":127038,"src":144600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[108,144602,69527],{},[24,144604,144605],{"className":26,"code":144428,"language":28,"meta":29,"style":29},[31,144606,144607,144611,144625,144629,144647,144651,144669,144673,144691,144695,144713],{"__ignoreMap":29},[34,144608,144609],{"class":36,"line":37},[34,144610,144435],{"class":205},[34,144612,144613,144615,144617,144619,144621,144623],{"class":36,"line":51},[34,144614,41],{"class":40},[34,144616,52258],{"class":44},[34,144618,54132],{"class":149},[34,144620,153],{"class":40},[34,144622,92953],{"class":156},[34,144624,48],{"class":40},[34,144626,144627],{"class":36,"line":60},[34,144628,144454],{"class":205},[34,144630,144631,144633,144635,144637,144639,144641,144643,144645],{"class":36,"line":76},[34,144632,52790],{"class":40},[34,144634,52258],{"class":44},[34,144636,54132],{"class":149},[34,144638,153],{"class":40},[34,144640,144467],{"class":156},[34,144642,144470],{"class":40},[34,144644,52258],{"class":44},[34,144646,48],{"class":40},[34,144648,144649],{"class":36,"line":93},[34,144650,144479],{"class":205},[34,144652,144653,144655,144657,144659,144661,144663,144665,144667],{"class":36,"line":99},[34,144654,52790],{"class":40},[34,144656,52258],{"class":44},[34,144658,54132],{"class":149},[34,144660,153],{"class":40},[34,144662,144492],{"class":156},[34,144664,144470],{"class":40},[34,144666,52258],{"class":44},[34,144668,48],{"class":40},[34,144670,144671],{"class":36,"line":353},[34,144672,144503],{"class":205},[34,144674,144675,144677,144679,144681,144683,144685,144687,144689],{"class":36,"line":359},[34,144676,52790],{"class":40},[34,144678,52258],{"class":44},[34,144680,54132],{"class":149},[34,144682,153],{"class":40},[34,144684,144516],{"class":156},[34,144686,144470],{"class":40},[34,144688,52258],{"class":44},[34,144690,48],{"class":40},[34,144692,144693],{"class":36,"line":579},[34,144694,144527],{"class":205},[34,144696,144697,144699,144701,144703,144705,144707,144709,144711],{"class":36,"line":589},[34,144698,52790],{"class":40},[34,144700,52258],{"class":44},[34,144702,54132],{"class":149},[34,144704,153],{"class":40},[34,144706,144540],{"class":156},[34,144708,144470],{"class":40},[34,144710,52258],{"class":44},[34,144712,48],{"class":40},[34,144714,144715,144717,144719],{"class":36,"line":601},[34,144716,102],{"class":40},[34,144718,52258],{"class":44},[34,144720,48],{"class":40},[108,144722,71088],{},[24,144724,144725],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,144726,144727,144731,144745,144749],{"__ignoreMap":29},[34,144728,144729],{"class":36,"line":37},[34,144730,131164],{"class":205},[34,144732,144733,144735,144737,144739,144741,144743],{"class":36,"line":51},[34,144734,41],{"class":40},[34,144736,52258],{"class":44},[34,144738,54132],{"class":149},[34,144740,153],{"class":40},[34,144742,131177],{"class":156},[34,144744,48],{"class":40},[34,144746,144747],{"class":36,"line":60},[34,144748,131184],{"class":40},[34,144750,144751,144753,144755],{"class":36,"line":76},[34,144752,102],{"class":40},[34,144754,52258],{"class":44},[34,144756,48],{"class":40},[45,144758,138454],{},{"title":29,"searchDepth":51,"depth":51,"links":144760},[144761,144762,144766,144767,144768],{"id":143905,"depth":51,"text":143906},{"id":143937,"depth":51,"text":143938,"children":144763},[144764,144765],{"id":143941,"depth":60,"text":143942},{"id":143958,"depth":60,"text":143959},{"id":143977,"depth":51,"text":143978},{"id":143984,"depth":51,"text":143985},{"id":144071,"depth":51,"text":144072,"children":144769},[144770,144771,144772,144773,144774],{"id":144078,"depth":60,"text":144079},{"id":144206,"depth":60,"text":144207},{"id":144300,"depth":60,"text":144301},{"id":144349,"depth":60,"text":144350},{"id":144359,"depth":60,"text":144360},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143897,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144781,"title":144782,"body":144783,"description":723,"extension":724,"meta":146010,"navigation":726,"path":146011,"seo":146012,"stem":146013,"__hash__":146014},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144784,"toc":145988},[144785,144788,144792,144796,144799,144802,144806,144811,144814,144817,144820,144823,144826,144883,144886,144891,144894,144897,144901,144912,144916,144919,144922,144929,144934,144938,144941,144947,144950,144954,144957,144964,144967,144970,144977,144980,144987,144990,144993,145000,145003,145006,145008,145025,145029,145032,145035,145038,145042,145045,145048,145051,145054,145057,145060,145062,145065,145068,145130,145133,145243,145250,145256,145259,145262,145266,145269,145273,145278,145281,145288,145291,145297,145302,145305,145308,145311,145314,145317,145320,145323,145326,145382,145384,145410,145414,145417,145420,145423,145431,145434,145437,145441,145497,145500,145504,145510,145521,145524,145529,145532,145535,145541,145544,145547,145550,145553,145556,145559,145562,145565,145590,145596,145599,145602,145605,145608,145611,145614,145619,145622,145625,145628,145636,145639,145646,145649,145652,145654,145678,145680,145683,145686,145689,145692,145695,145698,145701,145735,145738,145741,145775,145782,145785,145788,145791,145794,145797,145800,145807,145810,145813,145816,145819,145826,145829,145832,145839,145842,145845,145849,145852,145855,145858,145861,145864,145867,145870,145873,145875,145899,145901,145925,145929,145940,145943,145946,145949,145952,145955,145958,145961,145964,145967,145970,145973,145976,145979,145982,145985],[10,144786,144782],{"id":144787},"_21-移动端布局实战下篇",[14,144789,144791],{"id":144790},"_211-rem适配布局","21.1 rem适配布局",[19,144793,144795],{"id":144794},"_2111-rem单位","21.1.1 rem单位",[2122,144797],{"style":127038,"src":144798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[108,144800,144801],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[19,144803,144805],{"id":144804},"_2112-媒体查询","21.1.2 媒体查询",[752,144807,144808],{},[755,144809,144810],{},"参数介绍",[2122,144812],{"style":127038,"src":144813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2122,144815],{"style":127038,"src":144816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2122,144818],{"style":127038,"src":144819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2122,144821],{"style":127038,"src":144822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2122,144824],{"style":127038,"src":144825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[24,144827,144829],{"className":196,"code":144828,"language":198,"meta":29,"style":29},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[31,144830,144831,144836,144855,144862,144875,144879],{"__ignoreMap":29},[34,144832,144833],{"class":36,"line":37},[34,144834,144835],{"class":205},"\u002F* 媒体查询 *\u002F\n",[34,144837,144838,144841,144843,144846,144848,144851,144853],{"class":36,"line":51},[34,144839,144840],{"class":87},"@media",[34,144842,2312],{"class":40},[34,144844,144845],{"class":63},"max-width",[34,144847,67],{"class":40},[34,144849,144850],{"class":63},"768",[34,144852,88],{"class":87},[34,144854,13095],{"class":40},[34,144856,144857,144860],{"class":36,"line":60},[34,144858,144859],{"class":149},"  .container",[34,144861,57],{"class":40},[34,144863,144864,144867,144869,144871,144873],{"class":36,"line":76},[34,144865,144866],{"class":63},"    width",[34,144868,67],{"class":40},[34,144870,1106],{"class":63},[34,144872,1123],{"class":87},[34,144874,73],{"class":40},[34,144876,144877],{"class":36,"line":93},[34,144878,96],{"class":40},[34,144880,144881],{"class":36,"line":99},[34,144882,241],{"class":40},[108,144884,144885],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[752,144887,144888],{"start":51},[755,144889,144890],{},"引入资源",[2122,144892],{"style":127038,"src":144893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[108,144895,144896],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[19,144898,144900],{"id":144899},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1800,144902,144903,144906,144909],{},[755,144904,144905],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[755,144907,144908],{},"媒体查询可以根据不同设备宽度来修改样式",[755,144910,144911],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144913,144915],{"id":144914},"_212-less基础","21.2 Less基础",[108,144917,144918],{},"css冗余度较高，不利于复用，没有很好的计算能力",[108,144920,144921],{},"Less可以解决该问题，它是css的扩展语言",[108,144923,144924,144925],{},"Less中文网址： ",[520,144926,144927],{"href":144927,"rel":144928},"http:\u002F\u002Flesscss.cn\u002F",[24517],[108,144930,144931],{},[111,144932,144933],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[19,144935,144937],{"id":144936},"_2121-less安装","21.2.1 less安装",[108,144939,144940],{},"如果使用vscode，则无需进行下方安装步骤",[108,144942,144943],{},[520,144944,144945],{"href":144945,"rel":144946},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24517],[2122,144948],{"style":127038,"src":144949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[19,144951,144953],{"id":144952},"_2122-less使用","21.2.2 less使用",[108,144955,144956],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[752,144958,144959],{},[755,144960,144961],{},[111,144962,144963],{},"Less 变量",[2122,144965],{"style":127038,"src":144966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2122,144968],{"style":127038,"src":144969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[752,144971,144972],{"start":51},[755,144973,144974],{},[111,144975,144976],{},"Less 编译",[2122,144978],{"style":127038,"src":144979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[752,144981,144982],{"start":60},[755,144983,144984],{},[111,144985,144986],{},"Less 嵌套",[2122,144988],{"style":127038,"src":144989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2122,144991],{"style":127038,"src":144992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[752,144994,144995],{"start":76},[755,144996,144997],{},[111,144998,144999],{},"Less 运算",[2122,145001],{"style":127038,"src":145002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[108,145004,145005],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[108,145007,830],{},[1800,145009,145010,145013,145016,145019,145022],{},[755,145011,145012],{},"乘号（*）和除号（\u002F）的写法",[755,145014,145015],{},"运算符中间左右有个空格隔开 1px + 5",[755,145017,145018],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[755,145020,145021],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[755,145023,145024],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145026,145028],{"id":145027},"_213-rem-适配方案","21.3 rem 适配方案",[108,145030,145031],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[108,145033,145034],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2122,145036],{"style":127038,"src":145037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[19,145039,145041],{"id":145040},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[108,145043,145044],{},"rem + 媒体查询 + less 技术",[2122,145046],{"style":127038,"src":145047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[108,145049,145050],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[108,145052,145053],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2122,145055],{"style":127038,"src":145056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[108,145058,145059],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[108,145061,15286],{},[2122,145063],{"style":127038,"src":145064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[108,145066,145067],{},"index.html:",[24,145069,145071],{"className":196,"code":145070,"language":198,"meta":29,"style":29},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[31,145072,145073,145078,145084,145100,145104,145110,145126],{"__ignoreMap":29},[34,145074,145075],{"class":36,"line":37},[34,145076,145077],{"class":205},"\u002F* rem 适配方案 *\u002F\n",[34,145079,145080,145082],{"class":36,"line":51},[34,145081,51286],{"class":44},[34,145083,57],{"class":40},[34,145085,145086,145088,145090,145093,145095,145097],{"class":36,"line":60},[34,145087,228],{"class":63},[34,145089,67],{"class":40},[34,145091,145092],{"class":63},"62.5",[34,145094,1123],{"class":87},[34,145096,130916],{"class":40},[34,145098,145099],{"class":205},"\u002F* 1rem = 10px *\u002F\n",[34,145101,145102],{"class":36,"line":76},[34,145103,241],{"class":40},[34,145105,145106,145108],{"class":36,"line":93},[34,145107,130901],{"class":149},[34,145109,57],{"class":40},[34,145111,145112,145114,145116,145118,145121,145123],{"class":36,"line":99},[34,145113,71202],{"class":63},[34,145115,67],{"class":40},[34,145117,1241],{"class":63},[34,145119,145120],{"class":87},"rem",[34,145122,130916],{"class":40},[34,145124,145125],{"class":205},"\u002F* 100px *\u002F\n",[34,145127,145128],{"class":36,"line":353},[34,145129,241],{"class":40},[108,145131,145132],{},"common.less",[24,145134,145136],{"className":196,"code":145135,"language":198,"meta":29,"style":29},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[31,145137,145138,145144,145159,145163,145169,145183,145187,145191,145195,145201,145215,145219,145225,145239],{"__ignoreMap":29},[34,145139,145140,145142],{"class":36,"line":37},[34,145141,51286],{"class":44},[34,145143,57],{"class":40},[34,145145,145146,145148,145150,145152,145154,145156],{"class":36,"line":51},[34,145147,228],{"class":63},[34,145149,67],{"class":40},[34,145151,145092],{"class":63},[34,145153,1123],{"class":87},[34,145155,26719],{"class":40},[34,145157,145158],{"class":205},"\u002F* 10px *\u002F\n",[34,145160,145161],{"class":36,"line":60},[34,145162,241],{"class":40},[34,145164,145165,145167],{"class":36,"line":76},[34,145166,52258],{"class":44},[34,145168,57],{"class":40},[34,145170,145171,145173,145175,145177,145179,145181],{"class":36,"line":93},[34,145172,71202],{"class":63},[34,145174,67],{"class":40},[34,145176,1241],{"class":63},[34,145178,145120],{"class":87},[34,145180,26719],{"class":40},[34,145182,145125],{"class":205},[34,145184,145185],{"class":36,"line":99},[34,145186,241],{"class":40},[34,145188,145189],{"class":36,"line":353},[34,145190,136514],{"class":40},[34,145192,145193],{"class":36,"line":359},[34,145194,145077],{"class":205},[34,145196,145197,145199],{"class":36,"line":579},[34,145198,51286],{"class":44},[34,145200,57],{"class":40},[34,145202,145203,145205,145207,145209,145211,145213],{"class":36,"line":589},[34,145204,228],{"class":63},[34,145206,67],{"class":40},[34,145208,145092],{"class":63},[34,145210,1123],{"class":87},[34,145212,130916],{"class":40},[34,145214,145099],{"class":205},[34,145216,145217],{"class":36,"line":601},[34,145218,241],{"class":40},[34,145220,145221,145223],{"class":36,"line":613},[34,145222,130901],{"class":149},[34,145224,57],{"class":40},[34,145226,145227,145229,145231,145233,145235,145237],{"class":36,"line":618},[34,145228,71202],{"class":63},[34,145230,67],{"class":40},[34,145232,1241],{"class":63},[34,145234,145120],{"class":87},[34,145236,130916],{"class":40},[34,145238,145125],{"class":205},[34,145240,145241],{"class":36,"line":628},[34,145242,241],{"class":40},[108,145244,145245,145246,145249],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24205,145247,145248],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[24,145251,145254],{"className":145252,"code":145253,"language":5840},[5838],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[31,145255,145253],{"__ignoreMap":29},[108,145257,145258],{},"less保存时会自动变成.css文件",[108,145260,145261],{},"好好搞懂上述代码写法",[19,145263,145265],{"id":145264},"_2132-样式导入样式","21.3.2 样式导入样式",[2122,145267],{"style":127038,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[19,145270,145272],{"id":145271},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[752,145274,145275],{},[755,145276,145277],{},"准备工作",[2122,145279],{"style":127038,"src":145280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[108,145282,145283,145284],{},"github地址：",[520,145285,145286],{"href":145286,"rel":145287},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24517],[108,145289,145290],{},"下载之后，将index.js文件拖到项目中就可以了",[108,145292,145293,145294],{},"js文件引入到index.html中使用的是",[31,145295,145296],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[752,145298,145299],{"start":51},[755,145300,145301],{},"vscode插件",[2122,145303],{"style":127038,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[108,145306,145307],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[108,145309,145310],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2122,145312],{"style":127038,"src":145313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[108,145315,145316],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2122,145318],{"style":127038,"src":145319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[108,145321,145322],{},"修改成75就可以，alt+z为快捷键",[108,145324,145325],{},"index.css：",[24,145327,145328],{"className":196,"code":145070,"language":198,"meta":29,"style":29},[31,145329,145330,145334,145340,145354,145358,145364,145378],{"__ignoreMap":29},[34,145331,145332],{"class":36,"line":37},[34,145333,145077],{"class":205},[34,145335,145336,145338],{"class":36,"line":51},[34,145337,51286],{"class":44},[34,145339,57],{"class":40},[34,145341,145342,145344,145346,145348,145350,145352],{"class":36,"line":60},[34,145343,228],{"class":63},[34,145345,67],{"class":40},[34,145347,145092],{"class":63},[34,145349,1123],{"class":87},[34,145351,130916],{"class":40},[34,145353,145099],{"class":205},[34,145355,145356],{"class":36,"line":76},[34,145357,241],{"class":40},[34,145359,145360,145362],{"class":36,"line":93},[34,145361,130901],{"class":149},[34,145363,57],{"class":40},[34,145365,145366,145368,145370,145372,145374,145376],{"class":36,"line":99},[34,145367,71202],{"class":63},[34,145369,67],{"class":40},[34,145371,1241],{"class":63},[34,145373,145120],{"class":87},[34,145375,130916],{"class":40},[34,145377,145125],{"class":205},[34,145379,145380],{"class":36,"line":353},[34,145381,241],{"class":40},[108,145383,145067],{},[24,145385,145386],{"className":196,"code":127582,"language":198,"meta":29,"style":29},[31,145387,145388,145394,145406],{"__ignoreMap":29},[34,145389,145390,145392],{"class":36,"line":37},[34,145391,52446],{"class":44},[34,145393,57],{"class":40},[34,145395,145396,145398,145400,145402,145404],{"class":36,"line":51},[34,145397,228],{"class":63},[34,145399,67],{"class":40},[34,145401,1396],{"class":63},[34,145403,88],{"class":87},[34,145405,73],{"class":40},[34,145407,145408],{"class":36,"line":60},[34,145409,241],{"class":40},[14,145411,145413],{"id":145412},"_214-响应式开发","21.4 响应式开发",[108,145415,145416],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2122,145418],{"style":127038,"src":145419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[108,145421,145422],{},"做法：",[1800,145424,145425,145428],{},[755,145426,145427],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[755,145429,145430],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2122,145432],{"style":127038,"src":145433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[108,145435,145436],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[19,145438,145440],{"id":145439},"_2141-简单代码示范","21.4.1 简单代码示范",[24,145442,145443],{"className":196,"code":145070,"language":198,"meta":29,"style":29},[31,145444,145445,145449,145455,145469,145473,145479,145493],{"__ignoreMap":29},[34,145446,145447],{"class":36,"line":37},[34,145448,145077],{"class":205},[34,145450,145451,145453],{"class":36,"line":51},[34,145452,51286],{"class":44},[34,145454,57],{"class":40},[34,145456,145457,145459,145461,145463,145465,145467],{"class":36,"line":60},[34,145458,228],{"class":63},[34,145460,67],{"class":40},[34,145462,145092],{"class":63},[34,145464,1123],{"class":87},[34,145466,130916],{"class":40},[34,145468,145099],{"class":205},[34,145470,145471],{"class":36,"line":76},[34,145472,241],{"class":40},[34,145474,145475,145477],{"class":36,"line":93},[34,145476,130901],{"class":149},[34,145478,57],{"class":40},[34,145480,145481,145483,145485,145487,145489,145491],{"class":36,"line":99},[34,145482,71202],{"class":63},[34,145484,67],{"class":40},[34,145486,1241],{"class":63},[34,145488,145120],{"class":87},[34,145490,130916],{"class":40},[34,145492,145125],{"class":205},[34,145494,145495],{"class":36,"line":353},[34,145496,241],{"class":40},[108,145498,145499],{},"父盒子一般命名为container",[19,145501,145503],{"id":145502},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[108,145505,145506,145507],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[111,145508,145509],{},"使得 Web 开发更加快捷",[1800,145511,145512],{},[755,145513,145514,145515],{},"官网：",[111,145516,145517],{},[520,145518,145519],{"href":145519,"rel":145520},"http:\u002F\u002Fgetbootstrap.com\u002F",[24517],[108,145522,145523],{},"可以直接去官网拿现成的东西",[752,145525,145526],{},[755,145527,145528],{},"Bootstrap的使用",[108,145530,145531],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[108,145533,145534],{},"Bootstrap 使用四步曲：",[108,145536,145537,145540],{},[111,145538,145539],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2122,145542],{"style":127038,"src":145543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[108,145545,145546],{},"打开Bootstrap官网，然后下载",[2122,145548],{"style":127038,"src":145549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2122,145551],{"style":127038,"src":145552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[108,145554,145555],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[108,145557,145558],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[108,145560,145561],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2122,145563],{"style":127038,"src":145564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[24,145566,145568],{"className":196,"code":145567,"language":198,"meta":29,"style":29},".center {\n  color: red;\n}\n",[31,145569,145570,145576,145586],{"__ignoreMap":29},[34,145571,145572,145574],{"class":36,"line":37},[34,145573,127469],{"class":149},[34,145575,57],{"class":40},[34,145577,145578,145580,145582,145584],{"class":36,"line":51},[34,145579,217],{"class":63},[34,145581,67],{"class":40},[34,145583,58064],{"class":63},[34,145585,73],{"class":40},[34,145587,145588],{"class":36,"line":60},[34,145589,241],{"class":40},[108,145591,145592,145595],{},[31,145593,145594],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2122,145597],{"style":127038,"src":145598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2122,145600],{"style":127038,"src":145601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2122,145603],{"style":127038,"src":145604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[108,145606,145607],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2122,145609],{"style":127038,"src":145610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[108,145612,145613],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[752,145615,145616],{"start":51},[755,145617,145618],{},"布局容器",[2122,145620],{"style":127038,"src":145621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[108,145623,145624],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[108,145626,145627],{},"container-fluid用于移动式布局比较方便",[752,145629,145630],{"start":60},[755,145631,145632,145633],{},"bootstrap ",[111,145634,145635],{},"栅格系统原理",[2122,145637],{"style":127038,"src":145638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[752,145640,145641],{"start":76},[755,145642,145643],{},[111,145644,145645],{},"栅格选项参数",[2122,145647],{"style":127038,"src":145648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[108,145650,145651],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[108,145653,15286],{},[24,145655,145656],{"className":196,"code":145567,"language":198,"meta":29,"style":29},[31,145657,145658,145664,145674],{"__ignoreMap":29},[34,145659,145660,145662],{"class":36,"line":37},[34,145661,127469],{"class":149},[34,145663,57],{"class":40},[34,145665,145666,145668,145670,145672],{"class":36,"line":51},[34,145667,217],{"class":63},[34,145669,67],{"class":40},[34,145671,58064],{"class":63},[34,145673,73],{"class":40},[34,145675,145676],{"class":36,"line":60},[34,145677,241],{"class":40},[108,145679,136096],{},[2122,145681],{"style":127038,"src":145682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[108,145684,145685],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[108,145687,145688],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[108,145690,145691],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[108,145693,145694],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[108,145696,145697],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[108,145699,145700],{},"汇总展示说明：",[24,145702,145703],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,145704,145705,145709,145723,145727],{"__ignoreMap":29},[34,145706,145707],{"class":36,"line":37},[34,145708,131164],{"class":205},[34,145710,145711,145713,145715,145717,145719,145721],{"class":36,"line":51},[34,145712,41],{"class":40},[34,145714,52258],{"class":44},[34,145716,54132],{"class":149},[34,145718,153],{"class":40},[34,145720,131177],{"class":156},[34,145722,48],{"class":40},[34,145724,145725],{"class":36,"line":60},[34,145726,131184],{"class":40},[34,145728,145729,145731,145733],{"class":36,"line":76},[34,145730,102],{"class":40},[34,145732,52258],{"class":44},[34,145734,48],{"class":40},[2122,145736],{"style":127038,"src":145737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[108,145739,145740],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[24,145742,145743],{"className":26,"code":131157,"language":28,"meta":29,"style":29},[31,145744,145745,145749,145763,145767],{"__ignoreMap":29},[34,145746,145747],{"class":36,"line":37},[34,145748,131164],{"class":205},[34,145750,145751,145753,145755,145757,145759,145761],{"class":36,"line":51},[34,145752,41],{"class":40},[34,145754,52258],{"class":44},[34,145756,54132],{"class":149},[34,145758,153],{"class":40},[34,145760,131177],{"class":156},[34,145762,48],{"class":40},[34,145764,145765],{"class":36,"line":60},[34,145766,131184],{"class":40},[34,145768,145769,145771,145773],{"class":36,"line":76},[34,145770,102],{"class":40},[34,145772,52258],{"class":44},[34,145774,48],{"class":40},[752,145776,145777],{"start":93},[755,145778,145779],{},[111,145780,145781],{},"列嵌套",[2122,145783],{"style":127038,"src":145784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[108,145786,145787],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[108,145789,145790],{},"没加row内部这样：",[2122,145792],{"style":127038,"src":145793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[108,145795,145796],{},"加上row之后内部为：",[2122,145798],{"style":127038,"src":145799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[752,145801,145802],{"start":99},[755,145803,145804],{},[111,145805,145806],{},"列偏移",[2122,145808],{"style":127038,"src":145809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[108,145811,145812],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[108,145814,145815],{},"要加偏移量，即偏移份数",[108,145817,145818],{},"偏移的份数=12-两个盒子的份数",[752,145820,145821],{"start":353},[755,145822,145823],{},[111,145824,145825],{},"列排序",[2122,145827],{"style":127038,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[108,145830,145831],{},"pull拉左；push推右",[752,145833,145834],{"start":359},[755,145835,145836],{},[111,145837,145838],{},"响应式工具",[2122,145840],{"style":127038,"src":145841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[108,145843,145844],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[19,145846,145848],{"id":145847},"_2143-响应式小项目","21.4.3 响应式小项目",[108,145850,145851],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[108,145853,145854],{},"ul {",[108,145856,145857],{},"list-style: none;",[108,145859,145860],{},"margin:0;",[108,145862,145863],{},"padding:0; }",[2122,145865],{"style":127038,"src":145866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2122,145868],{"style":127038,"src":145869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[108,145871,145872],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[108,145874,69527],{},[24,145876,145877],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,145878,145879,145885,145895],{"__ignoreMap":29},[34,145880,145881,145883],{"class":36,"line":37},[34,145882,130901],{"class":149},[34,145884,57],{"class":40},[34,145886,145887,145889,145891,145893],{"class":36,"line":51},[34,145888,131533],{"class":63},[34,145890,67],{"class":40},[34,145892,24388],{"class":63},[34,145894,73],{"class":40},[34,145896,145897],{"class":36,"line":60},[34,145898,241],{"class":40},[108,145900,71088],{},[24,145902,145903],{"className":196,"code":139723,"language":198,"meta":29,"style":29},[31,145904,145905,145911,145921],{"__ignoreMap":29},[34,145906,145907,145909],{"class":36,"line":37},[34,145908,130901],{"class":149},[34,145910,57],{"class":40},[34,145912,145913,145915,145917,145919],{"class":36,"line":51},[34,145914,131533],{"class":63},[34,145916,67],{"class":40},[34,145918,24388],{"class":63},[34,145920,73],{"class":40},[34,145922,145923],{"class":36,"line":60},[34,145924,241],{"class":40},[14,145926,145928],{"id":145927},"_215-swiper-插件使用","21.5 swiper 插件使用",[1800,145930,145931,145934,145937],{},[755,145932,145933],{},"下载需要的css和js文件html页面中 引入相关文件",[755,145935,145936],{},"官网找到类似案例，复制html结构，css样式 js 语法",[755,145938,145939],{},"根据需求定制修改模块",[2122,145941],{"style":127038,"src":145942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[108,145944,145945],{},"解压后将这两部分放到项目中",[2122,145947],{"style":127038,"src":145948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[108,145950,145951],{},"这个插件可以帮助我们实现轮播图效果",[108,145953,145954],{},"用法：",[2122,145956],{"style":127038,"src":145957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[108,145959,145960],{},"找到自己喜欢的",[2122,145962],{"style":127038,"src":145963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[108,145965,145966],{},"右键，查看网页源代码",[2122,145968],{"style":127038,"src":145969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[108,145971,145972],{},"复制人家的结构内容",[108,145974,145975],{},"然后去看API文档：",[2122,145977],{"style":127038,"src":145978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[108,145980,145981],{},"可以看看如何修改样式",[108,145983,145984],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[45,145986,145987],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":145989},[145990,145995,145999,146004,146009],{"id":144790,"depth":51,"text":144791,"children":145991},[145992,145993,145994],{"id":144794,"depth":60,"text":144795},{"id":144804,"depth":60,"text":144805},{"id":144899,"depth":60,"text":144900},{"id":144914,"depth":51,"text":144915,"children":145996},[145997,145998],{"id":144936,"depth":60,"text":144937},{"id":144952,"depth":60,"text":144953},{"id":145027,"depth":51,"text":145028,"children":146000},[146001,146002,146003],{"id":145040,"depth":60,"text":145041},{"id":145264,"depth":60,"text":145265},{"id":145271,"depth":60,"text":145272},{"id":145412,"depth":51,"text":145413,"children":146005},[146006,146007,146008],{"id":145439,"depth":60,"text":145440},{"id":145502,"depth":60,"text":145503},{"id":145847,"depth":60,"text":145848},{"id":145927,"depth":51,"text":145928},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144782,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146016,"title":146017,"body":146018,"description":723,"extension":724,"meta":146238,"navigation":726,"path":146239,"seo":146240,"stem":146241,"__hash__":146242},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146019,"toc":146234},[146020,146023,146027,146030,146045,146050,146053,146058,146093,146098,146110,146115,146128,146133,146150,146155,146175,146180,146198,146201,146204,146207,146210,146214,146217,146220,146223,146226,146229,146232],[10,146021,146017],{"id":146022},"_22-代码提交与新型相对单位",[14,146024,146026],{"id":146025},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[108,146028,146029],{},"法1：",[752,146031,146032,146039,146042],{},[755,146033,146034,146035],{},"登录网站注册：",[520,146036,146037],{"href":146037,"rel":146038},"https:\u002F\u002Fgitee.com\u002F",[24517],[755,146040,146041],{},"码云创建新的仓库",[755,146043,146044],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1800,146046,146047],{},[755,146048,146049],{},"在网站根目录右键-- Git Bash Here",[2122,146051],{"style":127038,"src":146052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1800,146054,146055],{},[755,146056,146057],{},"如果是第一次利用git提交，请配置好全局选项",[24,146059,146061],{"className":117926,"code":146060,"language":117928,"meta":29,"style":29},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[31,146062,146063,146079],{"__ignoreMap":29},[34,146064,146065,146068,146070,146073,146076],{"class":36,"line":37},[34,146066,146067],{"class":149},"git",[34,146069,120349],{"class":156},[34,146071,146072],{"class":63}," --global",[34,146074,146075],{"class":156}," user.name",[34,146077,146078],{"class":156}," \"你的名字\"\n",[34,146080,146081,146083,146085,146087,146090],{"class":36,"line":51},[34,146082,146067],{"class":149},[34,146084,120349],{"class":156},[34,146086,146072],{"class":63},[34,146088,146089],{"class":156}," user.email",[34,146091,146092],{"class":156}," \"你的邮箱\"\n",[1800,146094,146095],{},[755,146096,146097],{},"初始化仓库",[24,146099,146101],{"className":117926,"code":146100,"language":117928,"meta":29,"style":29},"git init\n",[31,146102,146103],{"__ignoreMap":29},[34,146104,146105,146107],{"class":36,"line":37},[34,146106,146067],{"class":149},[34,146108,146109],{"class":156}," init\n",[1800,146111,146112],{},[755,146113,146114],{},"把本地文件放到暂存区",[24,146116,146118],{"className":117926,"code":146117,"language":117928,"meta":29,"style":29},"git add .\n",[31,146119,146120],{"__ignoreMap":29},[34,146121,146122,146124,146126],{"class":36,"line":37},[34,146123,146067],{"class":149},[34,146125,5862],{"class":156},[34,146127,29392],{"class":156},[1800,146129,146130],{},[755,146131,146132],{},"把本地文件放到本地仓库里面",[24,146134,146136],{"className":117926,"code":146135,"language":117928,"meta":29,"style":29},"git commit -m \"first commit\"\n",[31,146137,146138],{"__ignoreMap":29},[34,146139,146140,146142,146145,146147],{"class":36,"line":37},[34,146141,146067],{"class":149},[34,146143,146144],{"class":156}," commit",[34,146146,101512],{"class":63},[34,146148,146149],{"class":156}," \"first commit\"\n",[1800,146151,146152],{},[755,146153,146154],{},"链接远程仓库",[24,146156,146158],{"className":117926,"code":146157,"language":117928,"meta":29,"style":29},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[31,146159,146160],{"__ignoreMap":29},[34,146161,146162,146164,146167,146169,146172],{"class":36,"line":37},[34,146163,146067],{"class":149},[34,146165,146166],{"class":156}," remote",[34,146168,5862],{"class":156},[34,146170,146171],{"class":156}," origin",[34,146173,146174],{"class":156}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1800,146176,146177],{},[755,146178,146179],{},"把本地仓库的文件推送到远程仓库 push",[24,146181,146183],{"className":117926,"code":146182,"language":117928,"meta":29,"style":29},"git push -u origin master\n",[31,146184,146185],{"__ignoreMap":29},[34,146186,146187,146189,146191,146193,146195],{"class":36,"line":37},[34,146188,146067],{"class":149},[34,146190,29667],{"class":156},[34,146192,28941],{"class":63},[34,146194,146171],{"class":156},[34,146196,146197],{"class":156}," master\n",[2122,146199],{"style":127038,"src":146200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[108,146202,146203],{},"上方方法暂未实现，后边学完git后在整",[108,146205,146206],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2122,146208],{"style":127038,"src":146209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146211,146213],{"id":146212},"_222-新型相对单位","22.2 新型相对单位",[2122,146215],{"style":127038,"src":146216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2122,146218],{"style":127038,"src":146219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[108,146221,146222],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[108,146224,146225],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2122,146227],{"style":127038,"src":146228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[108,146230,146231],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[45,146233,24610],{},{"title":29,"searchDepth":51,"depth":51,"links":146235},[146236,146237],{"id":146025,"depth":51,"text":146026},{"id":146212,"depth":51,"text":146213},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146017,"description":723},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146244,"title":146245,"body":146246,"description":146250,"extension":724,"meta":146251,"navigation":726,"path":146252,"seo":146253,"stem":146254,"__hash__":146255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146247,"toc":146248},[],{"title":29,"searchDepth":51,"depth":51,"links":146249},[],"自己正经开始学编程的第一门语言！",{"category":93469},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146245,"description":146250},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146257,"title":146258,"body":146259,"description":723,"extension":724,"meta":147406,"navigation":726,"path":147407,"seo":147408,"stem":147409,"__hash__":147410},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146260,"toc":147382},[146261,146264,146268,146271,146274,146299,146302,146308,146312,146315,146342,146345,146385,146388,146400,146403,146409,146413,146417,146444,146461,146468,146472,146475,146501,146504,146508,146511,146551,146554,146571,146577,146581,146586,146630,146633,146651,146654,146722,146726,146733,146736,146751,146754,146763,146766,146777,146780,146789,146792,146809,146812,146827,146831,146835,146838,146840,146860,146864,146867,146870,146881,146884,146890,146894,146900,146927,146930,146942,146945,146956,146959,146965,146969,146975,147025,147028,147070,147073,147106,147109,147143,147147,147150,147170,147173,147209,147212,147225,147229,147233,147239,147242,147255,147259,147262,147268,147271,147275,147278,147281,147330,147334,147350,147356,147363,147369,147379],[10,146262,146258],{"id":146263},"_1-python环境与第一个程序",[14,146265,146267],{"id":146266},"_11-什么是python","1.1 什么是Python",[108,146269,146270],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[108,146272,146273],{},"理解 Python 时抓住三个关键词：",[752,146275,146276,146279,146282],{},[755,146277,146278],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[755,146280,146281],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[755,146283,146284,146285,1008,146288,1008,146291,1008,146294,1008,146296,29036],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[31,146286,146287],{},"os",[31,146289,146290],{},"sys",[31,146292,146293],{},"json",[31,146295,58503],{},[31,146297,146298],{},"datetime",[108,146300,146301],{},"Python 程序的运行链路：",[24,146303,146306],{"className":146304,"code":146305,"language":5840,"meta":29},[5838],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[31,146307,146305],{"__ignoreMap":29},[14,146309,146311],{"id":146310},"_12-python解释器","1.2 Python解释器",[108,146313,146314],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[24,146316,146318],{"className":24474,"code":146317,"language":24476,"meta":29,"style":29},"python --version\npython3 --version\npython\npython3\n",[31,146319,146320,146326,146332,146337],{"__ignoreMap":29},[34,146321,146322,146324],{"class":36,"line":37},[34,146323,31031],{"class":149},[34,146325,26945],{"class":63},[34,146327,146328,146330],{"class":36,"line":51},[34,146329,101509],{"class":149},[34,146331,26945],{"class":63},[34,146333,146334],{"class":36,"line":60},[34,146335,146336],{"class":149},"python\n",[34,146338,146339],{"class":36,"line":76},[34,146340,146341],{"class":149},"python3\n",[108,146343,146344],{},"进入交互模式后，可以直接输入表达式：",[24,146346,146348],{"className":31029,"code":146347,"language":31031,"meta":29,"style":29},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[31,146349,146350,146361,146366,146380],{"__ignoreMap":29},[34,146351,146352,146355,146357,146359],{"class":36,"line":37},[34,146353,146354],{"class":87},">>>",[34,146356,25771],{"class":63},[34,146358,46217],{"class":87},[34,146360,48374],{"class":63},[34,146362,146363],{"class":36,"line":51},[34,146364,146365],{"class":63},"3\n",[34,146367,146368,146370,146373,146375,146378],{"class":36,"line":60},[34,146369,146354],{"class":87},[34,146371,146372],{"class":63}," print",[34,146374,801],{"class":40},[34,146376,146377],{"class":156},"\"hello python\"",[34,146379,807],{"class":40},[34,146381,146382],{"class":36,"line":76},[34,146383,146384],{"class":40},"hello python\n",[108,146386,146387],{},"退出交互模式：",[24,146389,146391],{"className":31029,"code":146390,"language":31031,"meta":29,"style":29},"exit()\n",[31,146392,146393],{"__ignoreMap":29},[34,146394,146395,146398],{"class":36,"line":37},[34,146396,146397],{"class":63},"exit",[34,146399,2629],{"class":40},[108,146401,146402],{},"或使用快捷键：",[24,146404,146407],{"className":146405,"code":146406,"language":5840,"meta":29},[5838],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[31,146408,146406],{"__ignoreMap":29},[14,146410,146412],{"id":146411},"_13-安装python","1.3 安装Python",[19,146414,146416],{"id":146415},"_131-windows安装","1.3.1 Windows安装",[752,146418,146419,146426,146429,146435,146441],{},[755,146420,146421,146422],{},"打开 Python 官网：",[520,146423,146424],{"href":146424,"rel":146425},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24517],[755,146427,146428],{},"下载 Windows Installer。",[755,146430,146431,146432,29036],{},"安装时勾选 ",[31,146433,146434],{},"Add Python to PATH",[755,146436,146437,146438,29036],{},"点击 ",[31,146439,146440],{},"Install Now",[755,146442,146443],{},"安装完成后打开命令提示符验证：",[24,146445,146447],{"className":24474,"code":146446,"language":24476,"meta":29,"style":29},"python --version\npip --version\n",[31,146448,146449,146455],{"__ignoreMap":29},[34,146450,146451,146453],{"class":36,"line":37},[34,146452,31031],{"class":149},[34,146454,26945],{"class":63},[34,146456,146457,146459],{"class":36,"line":51},[34,146458,24483],{"class":149},[34,146460,26945],{"class":63},[108,146462,146463,146464,146467],{},"如果提示 ",[31,146465,146466],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[19,146469,146471],{"id":146470},"_132-macos安装","1.3.2 macOS安装",[108,146473,146474],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[24,146476,146478],{"className":24474,"code":146477,"language":24476,"meta":29,"style":29},"brew install python\npython3 --version\npip3 --version\n",[31,146479,146480,146489,146495],{"__ignoreMap":29},[34,146481,146482,146485,146487],{"class":36,"line":37},[34,146483,146484],{"class":149},"brew",[34,146486,24486],{"class":156},[34,146488,124948],{"class":156},[34,146490,146491,146493],{"class":36,"line":51},[34,146492,101509],{"class":149},[34,146494,26945],{"class":63},[34,146496,146497,146499],{"class":36,"line":60},[34,146498,120330],{"class":149},[34,146500,26945],{"class":63},[108,146502,146503],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[19,146505,146507],{"id":146506},"_133-linux安装","1.3.3 Linux安装",[108,146509,146510],{},"Ubuntu\u002FDebian：",[24,146512,146514],{"className":24474,"code":146513,"language":24476,"meta":29,"style":29},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[31,146515,146516,146524,146539,146545],{"__ignoreMap":29},[34,146517,146518,146520,146522],{"class":36,"line":37},[34,146519,25229],{"class":149},[34,146521,117947],{"class":156},[34,146523,26894],{"class":156},[34,146525,146526,146528,146530,146532,146534,146536],{"class":36,"line":51},[34,146527,25229],{"class":149},[34,146529,117947],{"class":156},[34,146531,24486],{"class":156},[34,146533,105033],{"class":156},[34,146535,101428],{"class":156},[34,146537,146538],{"class":156}," python3-venv\n",[34,146540,146541,146543],{"class":36,"line":60},[34,146542,101509],{"class":149},[34,146544,26945],{"class":63},[34,146546,146547,146549],{"class":36,"line":76},[34,146548,120330],{"class":149},[34,146550,26945],{"class":63},[108,146552,146553],{},"Fedora：",[24,146555,146557],{"className":24474,"code":146556,"language":24476,"meta":29,"style":29},"sudo dnf install python3 python3-pip\n",[31,146558,146559],{"__ignoreMap":29},[34,146560,146561,146563,146565,146567,146569],{"class":36,"line":37},[34,146562,25229],{"class":149},[34,146564,26967],{"class":156},[34,146566,24486],{"class":156},[34,146568,105033],{"class":156},[34,146570,120395],{"class":156},[108,146572,146573,146574,146576],{},"Linux 上通常使用 ",[31,146575,101509],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146578,146580],{"id":146579},"_14-pip包管理器","1.4 pip包管理器",[108,146582,146583,146585],{},[31,146584,24483],{}," 用来安装第三方库。",[24,146587,146589],{"className":24474,"code":146588,"language":24476,"meta":29,"style":29},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[31,146590,146591,146600,146609,146617,146623],{"__ignoreMap":29},[34,146592,146593,146595,146597],{"class":36,"line":37},[34,146594,24483],{"class":149},[34,146596,24486],{"class":156},[34,146598,146599],{"class":156}," requests\n",[34,146601,146602,146604,146607],{"class":36,"line":51},[34,146603,24483],{"class":149},[34,146605,146606],{"class":156}," uninstall",[34,146608,146599],{"class":156},[34,146610,146611,146613,146615],{"class":36,"line":60},[34,146612,24483],{"class":149},[34,146614,118204],{"class":156},[34,146616,146599],{"class":156},[34,146618,146619,146621],{"class":36,"line":76},[34,146620,24483],{"class":149},[34,146622,119585],{"class":156},[34,146624,146625,146627],{"class":36,"line":93},[34,146626,24483],{"class":149},[34,146628,146629],{"class":156}," freeze\n",[108,146631,146632],{},"国内网络较慢时可以临时使用镜像：",[24,146634,146636],{"className":24474,"code":146635,"language":24476,"meta":29,"style":29},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[31,146637,146638],{"__ignoreMap":29},[34,146639,146640,146642,146644,146647,146649],{"class":36,"line":37},[34,146641,24483],{"class":149},[34,146643,24486],{"class":156},[34,146645,146646],{"class":156}," requests",[34,146648,27082],{"class":63},[34,146650,120358],{"class":156},[108,146652,146653],{},"常见第三方库：",[934,146655,146656,146665],{},[937,146657,146658],{},[940,146659,146660,146663],{},[943,146661,146662],{},"库",[943,146664,103326],{},[980,146666,146667,146675,146682,146690,146698,146706,146714],{},[940,146668,146669,146672],{},[985,146670,146671],{},"requests",[985,146673,146674],{},"网络请求",[940,146676,146677,146679],{},[985,146678,101256],{},[985,146680,146681],{},"数值计算",[940,146683,146684,146687],{},[985,146685,146686],{},"pandas",[985,146688,146689],{},"表格数据处理",[940,146691,146692,146695],{},[985,146693,146694],{},"matplotlib",[985,146696,146697],{},"绘图",[940,146699,146700,146703],{},[985,146701,146702],{},"pyecharts",[985,146704,146705],{},"ECharts 图表",[940,146707,146708,146711],{},[985,146709,146710],{},"flask",[985,146712,146713],{},"Web 后端",[940,146715,146716,146719],{},[985,146717,146718],{},"pytest",[985,146720,146721],{},"自动化测试",[14,146723,146725],{"id":146724},"_15-虚拟环境","1.5 虚拟环境",[108,146727,146728,146729,146732],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[31,146730,146731],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[108,146734,146735],{},"创建虚拟环境：",[24,146737,146739],{"className":24474,"code":146738,"language":24476,"meta":29,"style":29},"python -m venv .venv\n",[31,146740,146741],{"__ignoreMap":29},[34,146742,146743,146745,146747,146749],{"class":36,"line":37},[34,146744,31031],{"class":149},[34,146746,101512],{"class":63},[34,146748,101515],{"class":156},[34,146750,101518],{"class":156},[108,146752,146753],{},"Windows 激活：",[24,146755,146757],{"className":24474,"code":146756,"language":24476,"meta":29,"style":29},".venv\\Scripts\\activate\n",[31,146758,146759],{"__ignoreMap":29},[34,146760,146761],{"class":36,"line":37},[34,146762,146756],{"class":149},[108,146764,146765],{},"macOS\u002FLinux 激活：",[24,146767,146769],{"className":24474,"code":146768,"language":24476,"meta":29,"style":29},"source .venv\u002Fbin\u002Factivate\n",[31,146770,146771],{"__ignoreMap":29},[34,146772,146773,146775],{"class":36,"line":37},[34,146774,101523],{"class":63},[34,146776,101526],{"class":156},[108,146778,146779],{},"退出虚拟环境：",[24,146781,146783],{"className":24474,"code":146782,"language":24476,"meta":29,"style":29},"deactivate\n",[31,146784,146785],{"__ignoreMap":29},[34,146786,146787],{"class":36,"line":37},[34,146788,146782],{"class":149},[108,146790,146791],{},"保存依赖：",[24,146793,146795],{"className":24474,"code":146794,"language":24476,"meta":29,"style":29},"pip freeze > requirements.txt\n",[31,146796,146797],{"__ignoreMap":29},[34,146798,146799,146801,146804,146806],{"class":36,"line":37},[34,146800,24483],{"class":149},[34,146802,146803],{"class":156}," freeze",[34,146805,26874],{"class":87},[34,146807,146808],{"class":156}," requirements.txt\n",[108,146810,146811],{},"安装依赖：",[24,146813,146815],{"className":24474,"code":146814,"language":24476,"meta":29,"style":29},"pip install -r requirements.txt\n",[31,146816,146817],{"__ignoreMap":29},[34,146818,146819,146821,146823,146825],{"class":36,"line":37},[34,146820,24483],{"class":149},[34,146822,24486],{"class":156},[34,146824,120269],{"class":63},[34,146826,146808],{"class":156},[14,146828,146830],{"id":146829},"_16-开发工具","1.6 开发工具",[19,146832,146834],{"id":146833},"_161-pycharm","1.6.1 PyCharm",[108,146836,146837],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[108,146839,122692],{},[752,146841,146842,146845,146848,146854,146857],{},[755,146843,146844],{},"New Project：创建项目。",[755,146846,146847],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[755,146849,146850,146851,126613],{},"New Python File：创建 ",[31,146852,146853],{},".py",[755,146855,146856],{},"Run：运行当前文件。",[755,146858,146859],{},"Debug：断点调试。",[19,146861,146863],{"id":146862},"_162-vs-code","1.6.2 VS Code",[108,146865,146866],{},"VS Code 轻量，适合后续多语言开发。",[108,146868,146869],{},"建议安装插件：",[752,146871,146872,146875,146878],{},[755,146873,146874],{},"Python。",[755,146876,146877],{},"Pylance。",[755,146879,146880],{},"Jupyter。",[108,146882,146883],{},"选择解释器：",[24,146885,146888],{"className":146886,"code":146887,"language":5840,"meta":29},[5838],"Ctrl + Shift + P -> Python: Select Interpreter\n",[31,146889,146887],{"__ignoreMap":29},[14,146891,146893],{"id":146892},"_17-第一个python程序","1.7 第一个Python程序",[108,146895,146896,146897,25271],{},"创建文件 ",[31,146898,146899],{},"hello.py",[24,146901,146903],{"className":31029,"code":146902,"language":31031,"meta":29,"style":29},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[31,146904,146905,146916],{"__ignoreMap":29},[34,146906,146907,146909,146911,146914],{"class":36,"line":37},[34,146908,31066],{"class":63},[34,146910,801],{"class":40},[34,146912,146913],{"class":156},"\"Hello World\"",[34,146915,807],{"class":40},[34,146917,146918,146920,146922,146925],{"class":36,"line":51},[34,146919,31066],{"class":63},[34,146921,801],{"class":40},[34,146923,146924],{"class":156},"\"你好，Python\"",[34,146926,807],{"class":40},[108,146928,146929],{},"在终端运行：",[24,146931,146933],{"className":24474,"code":146932,"language":24476,"meta":29,"style":29},"python hello.py\n",[31,146934,146935],{"__ignoreMap":29},[34,146936,146937,146939],{"class":36,"line":37},[34,146938,31031],{"class":149},[34,146940,146941],{"class":156}," hello.py\n",[108,146943,146944],{},"或：",[24,146946,146948],{"className":24474,"code":146947,"language":24476,"meta":29,"style":29},"python3 hello.py\n",[31,146949,146950],{"__ignoreMap":29},[34,146951,146952,146954],{"class":36,"line":37},[34,146953,101509],{"class":149},[34,146955,146941],{"class":156},[108,146957,146958],{},"输出：",[24,146960,146963],{"className":146961,"code":146962,"language":5840,"meta":29},[5838],"Hello World\n你好，Python\n",[31,146964,146962],{"__ignoreMap":29},[14,146966,146968],{"id":146967},"_18-print函数","1.8 print函数",[108,146970,146971,146974],{},[31,146972,146973],{},"print()"," 用来输出内容。",[24,146976,146978],{"className":31029,"code":146977,"language":31031,"meta":29,"style":29},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[31,146979,146980,146990,147000,147010],{"__ignoreMap":29},[34,146981,146982,146984,146986,146988],{"class":36,"line":37},[34,146983,31066],{"class":63},[34,146985,801],{"class":40},[34,146987,6497],{"class":156},[34,146989,807],{"class":40},[34,146991,146992,146994,146996,146998],{"class":36,"line":51},[34,146993,31066],{"class":63},[34,146995,801],{"class":40},[34,146997,1106],{"class":63},[34,146999,807],{"class":40},[34,147001,147002,147004,147006,147008],{"class":36,"line":60},[34,147003,31066],{"class":63},[34,147005,801],{"class":40},[34,147007,848],{"class":63},[34,147009,807],{"class":40},[34,147011,147012,147014,147016,147019,147021,147023],{"class":36,"line":76},[34,147013,31066],{"class":63},[34,147015,801],{"class":40},[34,147017,147018],{"class":156},"\"年龄:\"",[34,147020,13088],{"class":40},[34,147022,1445],{"class":63},[34,147024,807],{"class":40},[108,147026,147027],{},"多个内容用逗号隔开，默认中间加空格：",[24,147029,147031],{"className":31029,"code":147030,"language":31031,"meta":29,"style":29},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[31,147032,147033,147043,147053],{"__ignoreMap":29},[34,147034,147035,147038,147040],{"class":36,"line":37},[34,147036,147037],{"class":40},"name ",[34,147039,153],{"class":87},[34,147041,147042],{"class":156}," \"张三\"\n",[34,147044,147045,147048,147050],{"class":36,"line":51},[34,147046,147047],{"class":40},"age ",[34,147049,153],{"class":87},[34,147051,147052],{"class":63}," 18\n",[34,147054,147055,147057,147059,147062,147065,147067],{"class":36,"line":60},[34,147056,31066],{"class":63},[34,147058,801],{"class":40},[34,147060,147061],{"class":156},"\"姓名:\"",[34,147063,147064],{"class":40},", name, ",[34,147066,147018],{"class":156},[34,147068,147069],{"class":40},", age)\n",[108,147071,147072],{},"修改分隔符：",[24,147074,147076],{"className":31029,"code":147075,"language":31031,"meta":29,"style":29},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[31,147077,147078],{"__ignoreMap":29},[34,147079,147080,147082,147084,147087,147089,147091,147093,147095,147097,147100,147102,147104],{"class":36,"line":37},[34,147081,31066],{"class":63},[34,147083,801],{"class":40},[34,147085,147086],{"class":156},"\"2024\"",[34,147088,13088],{"class":40},[34,147090,54961],{"class":156},[34,147092,13088],{"class":40},[34,147094,54961],{"class":156},[34,147096,13088],{"class":40},[34,147098,147099],{"class":5869},"sep",[34,147101,153],{"class":87},[34,147103,33134],{"class":156},[34,147105,807],{"class":40},[108,147107,147108],{},"修改结尾符：",[24,147110,147112],{"className":31029,"code":147111,"language":31031,"meta":29,"style":29},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[31,147113,147114,147132],{"__ignoreMap":29},[34,147115,147116,147118,147120,147122,147124,147126,147128,147130],{"class":36,"line":37},[34,147117,31066],{"class":63},[34,147119,801],{"class":40},[34,147121,6497],{"class":156},[34,147123,13088],{"class":40},[34,147125,46452],{"class":5869},[34,147127,153],{"class":87},[34,147129,5012],{"class":156},[34,147131,807],{"class":40},[34,147133,147134,147136,147138,147141],{"class":36,"line":51},[34,147135,31066],{"class":63},[34,147137,801],{"class":40},[34,147139,147140],{"class":156},"\"python\"",[34,147142,807],{"class":40},[14,147144,147146],{"id":147145},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[108,147148,147149],{},"交互运行适合临时验证：",[24,147151,147153],{"className":31029,"code":147152,"language":31031,"meta":29,"style":29},">>> 10 * 3\n30\n",[31,147154,147155,147165],{"__ignoreMap":29},[34,147156,147157,147159,147161,147163],{"class":36,"line":37},[34,147158,146354],{"class":87},[34,147160,2691],{"class":63},[34,147162,7171],{"class":87},[34,147164,120666],{"class":63},[34,147166,147167],{"class":36,"line":51},[34,147168,147169],{"class":63},"30\n",[108,147171,147172],{},"脚本运行适合保存程序：",[24,147174,147176],{"className":31029,"code":147175,"language":31031,"meta":29,"style":29},"price = 8\ncount = 5\nprint(price * count)\n",[31,147177,147178,147188,147197],{"__ignoreMap":29},[34,147179,147180,147183,147185],{"class":36,"line":37},[34,147181,147182],{"class":40},"price ",[34,147184,153],{"class":87},[34,147186,147187],{"class":63}," 8\n",[34,147189,147190,147193,147195],{"class":36,"line":51},[34,147191,147192],{"class":40},"count ",[34,147194,153],{"class":87},[34,147196,55072],{"class":63},[34,147198,147199,147201,147204,147206],{"class":36,"line":60},[34,147200,31066],{"class":63},[34,147202,147203],{"class":40},"(price ",[34,147205,1250],{"class":87},[34,147207,147208],{"class":40}," count)\n",[108,147210,147211],{},"实际学习中推荐：",[752,147213,147214,147217,147222],{},[755,147215,147216],{},"临时试一个语法，用交互模式。",[755,147218,147219,147220,126613],{},"写完整练习，用 ",[31,147221,146853],{},[755,147223,147224],{},"写项目，用独立目录和虚拟环境。",[14,147226,147228],{"id":147227},"_110-常见错误","1.10 常见错误",[19,147230,147232],{"id":147231},"_1101-命令找不到","1.10.1 命令找不到",[24,147234,147237],{"className":147235,"code":147236,"language":5840,"meta":29},[5838],"python: command not found\n",[31,147238,147236],{"__ignoreMap":29},[108,147240,147241],{},"原因：",[752,147243,147244,147247,147250],{},[755,147245,147246],{},"没安装 Python。",[755,147248,147249],{},"PATH 没配置。",[755,147251,147252,147253,29036],{},"Linux\u002FmacOS 应该使用 ",[31,147254,101509],{},[19,147256,147258],{"id":147257},"_1102-文件名冲突","1.10.2 文件名冲突",[108,147260,147261],{},"不要把文件命名为：",[24,147263,147266],{"className":147264,"code":147265,"language":5840,"meta":29},[5838],"random.py\njson.py\ntime.py\nrequests.py\n",[31,147267,147265],{"__ignoreMap":29},[108,147269,147270],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[19,147272,147274],{"id":147273},"_1103-中文乱码","1.10.3 中文乱码",[108,147276,147277],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[108,147279,147280],{},"如果读写文件出现乱码，要明确指定编码：",[24,147282,147284],{"className":31029,"code":147283,"language":31031,"meta":29,"style":29},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[31,147285,147286,147320],{"__ignoreMap":29},[34,147287,147288,147290,147293,147295,147298,147300,147303,147305,147308,147310,147313,147315,147317],{"class":36,"line":37},[34,147289,108463],{"class":87},[34,147291,147292],{"class":63}," open",[34,147294,801],{"class":40},[34,147296,147297],{"class":156},"\"data.txt\"",[34,147299,13088],{"class":40},[34,147301,147302],{"class":156},"\"r\"",[34,147304,13088],{"class":40},[34,147306,147307],{"class":5869},"encoding",[34,147309,153],{"class":87},[34,147311,147312],{"class":156},"\"utf-8\"",[34,147314,14367],{"class":40},[34,147316,32034],{"class":87},[34,147318,147319],{"class":40}," f:\n",[34,147321,147322,147325,147327],{"class":36,"line":51},[34,147323,147324],{"class":40},"    content ",[34,147326,153],{"class":87},[34,147328,147329],{"class":40}," f.read()\n",[14,147331,147333],{"id":147332},"_111-本章练习","1.11 本章练习",[752,147335,147336,147339,147345],{},[755,147337,147338],{},"安装 Python，并在终端输出版本号。",[755,147340,147341,147342,147344],{},"新建 ",[31,147343,146899],{},"，输出自己的姓名、年龄、学习目标。",[755,147346,104996,147347,147349],{},[31,147348,146973],{}," 输出下面格式：",[24,147351,147354],{"className":147352,"code":147353,"language":5840,"meta":29},[5838],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[31,147355,147353],{"__ignoreMap":29},[752,147357,147358],{"start":76},[755,147359,104996,147360,147362],{},[31,147361,147099],{}," 输出日期：",[24,147364,147367],{"className":147365,"code":147366,"language":5840,"meta":29},[5838],"2024-10-10\n",[31,147368,147366],{"__ignoreMap":29},[752,147370,147371],{"start":93},[755,147372,104996,147373,147375,147376,147378],{},[31,147374,46452],{}," 让两次 ",[31,147377,146973],{}," 输出在同一行。",[45,147380,147381],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":147383},[147384,147385,147386,147391,147392,147393,147397,147398,147399,147400,147405],{"id":146266,"depth":51,"text":146267},{"id":146310,"depth":51,"text":146311},{"id":146411,"depth":51,"text":146412,"children":147387},[147388,147389,147390],{"id":146415,"depth":60,"text":146416},{"id":146470,"depth":60,"text":146471},{"id":146506,"depth":60,"text":146507},{"id":146579,"depth":51,"text":146580},{"id":146724,"depth":51,"text":146725},{"id":146829,"depth":51,"text":146830,"children":147394},[147395,147396],{"id":146833,"depth":60,"text":146834},{"id":146862,"depth":60,"text":146863},{"id":146892,"depth":51,"text":146893},{"id":146967,"depth":51,"text":146968},{"id":147145,"depth":51,"text":147146},{"id":147227,"depth":51,"text":147228,"children":147401},[147402,147403,147404],{"id":147231,"depth":60,"text":147232},{"id":147257,"depth":60,"text":147258},{"id":147273,"depth":60,"text":147274},{"id":147332,"depth":51,"text":147333},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146258,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147412,"title":147413,"body":147414,"description":723,"extension":724,"meta":149818,"navigation":726,"path":149819,"seo":149820,"stem":149821,"__hash__":149822},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147415,"toc":149803},[147416,147419,147423,147426,147429,147446,147449,147491,147494,147498,147501,147504,147541,147544,147578,147581,147673,147677,147691,147694,147721,147724,147728,147831,147838,147841,147858,147862,147869,148058,148061,148134,148138,148141,148225,148228,148260,148264,148468,148471,148475,148481,148583,148586,148842,148846,148849,148852,148866,148868,149054,149058,149420,149426,149430,149433,149557,149560,149739,149742,149746,149779,149783,149800],[10,147417,147413],{"id":147418},"_10-json与pyecharts折线图",[14,147420,147422],{"id":147421},"_101-数据可视化","10.1 数据可视化",[108,147424,147425],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[108,147427,147428],{},"常见图表：",[752,147430,147431,147434,147437,147440,147443],{},[755,147432,147433],{},"折线图：看趋势。",[755,147435,147436],{},"柱状图：看分类对比。",[755,147438,147439],{},"饼图：看占比。",[755,147441,147442],{},"地图：看地域分布。",[755,147444,147445],{},"散点图：看两个变量之间的关系。",[108,147447,147448],{},"Python 可视化常用库：",[934,147450,147451,147459],{},[937,147452,147453],{},[940,147454,147455,147457],{},[943,147456,146662],{},[943,147458,24392],{},[980,147460,147461,147468,147476,147483],{},[940,147462,147463,147465],{},[985,147464,146694],{},[985,147466,147467],{},"基础、经典、可定制",[940,147469,147470,147473],{},[985,147471,147472],{},"seaborn",[985,147474,147475],{},"统计图表更美观",[940,147477,147478,147480],{},[985,147479,146702],{},[985,147481,147482],{},"生成交互式网页图表",[940,147484,147485,147488],{},[985,147486,147487],{},"plotly",[985,147489,147490],{},"交互图表能力强",[108,147492,147493],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147495,147497],{"id":147496},"_102-json回顾","10.2 JSON回顾",[108,147499,147500],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[108,147502,147503],{},"Python 字典：",[24,147505,147507],{"className":31029,"code":147506,"language":31031,"meta":29,"style":29},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[31,147508,147509,147517,147528,147537],{"__ignoreMap":29},[34,147510,147511,147513,147515],{"class":36,"line":37},[34,147512,102288],{"class":40},[34,147514,153],{"class":87},[34,147516,57],{"class":40},[34,147518,147519,147522,147524,147526],{"class":36,"line":51},[34,147520,147521],{"class":156},"    \"name\"",[34,147523,67],{"class":40},[34,147525,69904],{"class":156},[34,147527,32117],{"class":40},[34,147529,147530,147533,147535],{"class":36,"line":60},[34,147531,147532],{"class":156},"    \"value\"",[34,147534,67],{"class":40},[34,147536,98088],{"class":63},[34,147538,147539],{"class":36,"line":76},[34,147540,241],{"class":40},[108,147542,147543],{},"JSON 字符串：",[24,147545,147548],{"className":147546,"code":147547,"language":146293,"meta":29,"style":29},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[31,147549,147550,147554,147565,147574],{"__ignoreMap":29},[34,147551,147552],{"class":36,"line":37},[34,147553,2206],{"class":40},[34,147555,147556,147559,147561,147563],{"class":36,"line":51},[34,147557,147558],{"class":63},"  \"name\"",[34,147560,67],{"class":40},[34,147562,69904],{"class":156},[34,147564,32117],{"class":40},[34,147566,147567,147570,147572],{"class":36,"line":60},[34,147568,147569],{"class":63},"  \"value\"",[34,147571,67],{"class":40},[34,147573,98088],{"class":63},[34,147575,147576],{"class":36,"line":76},[34,147577,241],{"class":40},[108,147579,147580],{},"Python 与 JSON 的转换：",[24,147582,147584],{"className":31029,"code":147583,"language":31031,"meta":29,"style":29},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[31,147585,147586,147593,147597,147622,147626,147645,147652,147656,147666],{"__ignoreMap":29},[34,147587,147588,147590],{"class":36,"line":37},[34,147589,31043],{"class":87},[34,147591,147592],{"class":40}," json\n",[34,147594,147595],{"class":36,"line":51},[34,147596,3053],{"emptyLinePlaceholder":726},[34,147598,147599,147601,147603,147605,147607,147609,147611,147613,147616,147618,147620],{"class":36,"line":60},[34,147600,102288],{"class":40},[34,147602,153],{"class":87},[34,147604,5101],{"class":40},[34,147606,63317],{"class":156},[34,147608,67],{"class":40},[34,147610,69904],{"class":156},[34,147612,13088],{"class":40},[34,147614,147615],{"class":156},"\"value\"",[34,147617,67],{"class":40},[34,147619,1106],{"class":63},[34,147621,241],{"class":40},[34,147623,147624],{"class":36,"line":76},[34,147625,3053],{"emptyLinePlaceholder":726},[34,147627,147628,147631,147633,147636,147639,147641,147643],{"class":36,"line":93},[34,147629,147630],{"class":40},"json_text ",[34,147632,153],{"class":87},[34,147634,147635],{"class":40}," json.dumps(data, ",[34,147637,147638],{"class":5869},"ensure_ascii",[34,147640,153],{"class":87},[34,147642,34638],{"class":63},[34,147644,807],{"class":40},[34,147646,147647,147649],{"class":36,"line":99},[34,147648,31066],{"class":63},[34,147650,147651],{"class":40},"(json_text)\n",[34,147653,147654],{"class":36,"line":353},[34,147655,3053],{"emptyLinePlaceholder":726},[34,147657,147658,147661,147663],{"class":36,"line":359},[34,147659,147660],{"class":40},"new_data ",[34,147662,153],{"class":87},[34,147664,147665],{"class":40}," json.loads(json_text)\n",[34,147667,147668,147670],{"class":36,"line":579},[34,147669,31066],{"class":63},[34,147671,147672],{"class":40},"(new_data)\n",[14,147674,147676],{"id":147675},"_103-安装pyecharts","10.3 安装pyecharts",[24,147678,147680],{"className":24474,"code":147679,"language":24476,"meta":29,"style":29},"pip install pyecharts\n",[31,147681,147682],{"__ignoreMap":29},[34,147683,147684,147686,147688],{"class":36,"line":37},[34,147685,24483],{"class":149},[34,147687,24486],{"class":156},[34,147689,147690],{"class":156}," pyecharts\n",[108,147692,147693],{},"验证：",[24,147695,147697],{"className":31029,"code":147696,"language":31031,"meta":29,"style":29},"import pyecharts\n\nprint(pyecharts.__version__)\n",[31,147698,147699,147705,147709],{"__ignoreMap":29},[34,147700,147701,147703],{"class":36,"line":37},[34,147702,31043],{"class":87},[34,147704,147690],{"class":40},[34,147706,147707],{"class":36,"line":51},[34,147708,3053],{"emptyLinePlaceholder":726},[34,147710,147711,147713,147716,147719],{"class":36,"line":60},[34,147712,31066],{"class":63},[34,147714,147715],{"class":40},"(pyecharts.",[34,147717,147718],{"class":63},"__version__",[34,147720,807],{"class":40},[108,147722,147723],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147725,147727],{"id":147726},"_104-第一个折线图","10.4 第一个折线图",[24,147729,147731],{"className":31029,"code":147730,"language":31031,"meta":29,"style":29},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[31,147732,147733,147745,147749,147759,147789,147821],{"__ignoreMap":29},[34,147734,147735,147737,147740,147742],{"class":36,"line":37},[34,147736,31388],{"class":87},[34,147738,147739],{"class":40}," pyecharts.charts ",[34,147741,31043],{"class":87},[34,147743,147744],{"class":40}," Line\n",[34,147746,147747],{"class":36,"line":51},[34,147748,3053],{"emptyLinePlaceholder":726},[34,147750,147751,147754,147756],{"class":36,"line":60},[34,147752,147753],{"class":40},"line ",[34,147755,153],{"class":87},[34,147757,147758],{"class":40}," Line()\n",[34,147760,147761,147764,147767,147769,147772,147774,147777,147779,147782,147784,147787],{"class":36,"line":76},[34,147762,147763],{"class":40},"line.add_xaxis([",[34,147765,147766],{"class":156},"\"周一\"",[34,147768,13088],{"class":40},[34,147770,147771],{"class":156},"\"周二\"",[34,147773,13088],{"class":40},[34,147775,147776],{"class":156},"\"周三\"",[34,147778,13088],{"class":40},[34,147780,147781],{"class":156},"\"周四\"",[34,147783,13088],{"class":40},[34,147785,147786],{"class":156},"\"周五\"",[34,147788,5310],{"class":40},[34,147790,147791,147794,147797,147799,147801,147803,147805,147807,147809,147811,147814,147816,147819],{"class":36,"line":93},[34,147792,147793],{"class":40},"line.add_yaxis(",[34,147795,147796],{"class":156},"\"销售额\"",[34,147798,78148],{"class":40},[34,147800,1106],{"class":63},[34,147802,13088],{"class":40},[34,147804,1611],{"class":63},[34,147806,13088],{"class":40},[34,147808,1656],{"class":63},[34,147810,13088],{"class":40},[34,147812,147813],{"class":63},"150",[34,147815,13088],{"class":40},[34,147817,147818],{"class":63},"180",[34,147820,5310],{"class":40},[34,147822,147823,147826,147829],{"class":36,"line":99},[34,147824,147825],{"class":40},"line.render(",[34,147827,147828],{"class":156},"\"line.html\"",[34,147830,807],{"class":40},[108,147832,147833,147834,147837],{},"运行后会生成 ",[31,147835,147836],{},"line.html","，用浏览器打开即可看到图表。",[108,147839,147840],{},"核心步骤：",[752,147842,147843,147846,147849,147852,147855],{},[755,147844,147845],{},"导入图表类。",[755,147847,147848],{},"创建图表对象。",[755,147850,147851],{},"添加 x 轴数据。",[755,147853,147854],{},"添加 y 轴数据。",[755,147856,147857],{},"渲染为 HTML。",[14,147859,147861],{"id":147860},"_105-全局配置","10.5 全局配置",[108,147863,147864,147865,147868],{},"常用配置在 ",[31,147866,147867],{},"pyecharts.options"," 中。",[24,147870,147872],{"className":31029,"code":147871,"language":31031,"meta":29,"style":29},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[31,147873,147874,147891,147901,147905,147913,147937,147965,147970,147989,148008,148026,148046,148050],{"__ignoreMap":29},[34,147875,147876,147878,147881,147883,147886,147888],{"class":36,"line":37},[34,147877,31388],{"class":87},[34,147879,147880],{"class":40}," pyecharts ",[34,147882,31043],{"class":87},[34,147884,147885],{"class":40}," options ",[34,147887,32034],{"class":87},[34,147889,147890],{"class":40}," opts\n",[34,147892,147893,147895,147897,147899],{"class":36,"line":51},[34,147894,31388],{"class":87},[34,147896,147739],{"class":40},[34,147898,31043],{"class":87},[34,147900,147744],{"class":40},[34,147902,147903],{"class":36,"line":60},[34,147904,3053],{"emptyLinePlaceholder":726},[34,147906,147907,147909,147911],{"class":36,"line":76},[34,147908,147753],{"class":40},[34,147910,153],{"class":87},[34,147912,147758],{"class":40},[34,147914,147915,147917,147919,147921,147923,147925,147927,147929,147931,147933,147935],{"class":36,"line":93},[34,147916,147763],{"class":40},[34,147918,147766],{"class":156},[34,147920,13088],{"class":40},[34,147922,147771],{"class":156},[34,147924,13088],{"class":40},[34,147926,147776],{"class":156},[34,147928,13088],{"class":40},[34,147930,147781],{"class":156},[34,147932,13088],{"class":40},[34,147934,147786],{"class":156},[34,147936,5310],{"class":40},[34,147938,147939,147941,147943,147945,147947,147949,147951,147953,147955,147957,147959,147961,147963],{"class":36,"line":99},[34,147940,147793],{"class":40},[34,147942,147796],{"class":156},[34,147944,78148],{"class":40},[34,147946,1106],{"class":63},[34,147948,13088],{"class":40},[34,147950,1611],{"class":63},[34,147952,13088],{"class":40},[34,147954,1656],{"class":63},[34,147956,13088],{"class":40},[34,147958,147813],{"class":63},[34,147960,13088],{"class":40},[34,147962,147818],{"class":63},[34,147964,5310],{"class":40},[34,147966,147967],{"class":36,"line":353},[34,147968,147969],{"class":40},"line.set_global_opts(\n",[34,147971,147972,147975,147977,147980,147982,147984,147987],{"class":36,"line":359},[34,147973,147974],{"class":5869},"    title_opts",[34,147976,153],{"class":87},[34,147978,147979],{"class":40},"opts.TitleOpts(",[34,147981,52056],{"class":5869},[34,147983,153],{"class":87},[34,147985,147986],{"class":156},"\"一周销售额\"",[34,147988,38698],{"class":40},[34,147990,147991,147994,147996,147999,148001,148003,148006],{"class":36,"line":579},[34,147992,147993],{"class":5869},"    xaxis_opts",[34,147995,153],{"class":87},[34,147997,147998],{"class":40},"opts.AxisOpts(",[34,148000,80440],{"class":5869},[34,148002,153],{"class":87},[34,148004,148005],{"class":156},"\"日期\"",[34,148007,38698],{"class":40},[34,148009,148010,148013,148015,148017,148019,148021,148024],{"class":36,"line":589},[34,148011,148012],{"class":5869},"    yaxis_opts",[34,148014,153],{"class":87},[34,148016,147998],{"class":40},[34,148018,80440],{"class":5869},[34,148020,153],{"class":87},[34,148022,148023],{"class":156},"\"金额\"",[34,148025,38698],{"class":40},[34,148027,148028,148031,148033,148036,148039,148041,148044],{"class":36,"line":601},[34,148029,148030],{"class":5869},"    tooltip_opts",[34,148032,153],{"class":87},[34,148034,148035],{"class":40},"opts.TooltipOpts(",[34,148037,148038],{"class":5869},"trigger",[34,148040,153],{"class":87},[34,148042,148043],{"class":156},"\"axis\"",[34,148045,38698],{"class":40},[34,148047,148048],{"class":36,"line":613},[34,148049,807],{"class":40},[34,148051,148052,148054,148056],{"class":36,"line":618},[34,148053,147825],{"class":40},[34,148055,147828],{"class":156},[34,148057,807],{"class":40},[108,148059,148060],{},"常见全局配置：",[934,148062,148063,148072],{},[937,148064,148065],{},[940,148066,148067,148070],{},[943,148068,148069],{},"配置",[943,148071,103326],{},[980,148073,148074,148084,148094,148104,148114,148124],{},[940,148075,148076,148081],{},[985,148077,148078],{},[31,148079,148080],{},"TitleOpts",[985,148082,148083],{},"标题",[940,148085,148086,148091],{},[985,148087,148088],{},[31,148089,148090],{},"LegendOpts",[985,148092,148093],{},"图例",[940,148095,148096,148101],{},[985,148097,148098],{},[31,148099,148100],{},"TooltipOpts",[985,148102,148103],{},"提示框",[940,148105,148106,148111],{},[985,148107,148108],{},[31,148109,148110],{},"AxisOpts",[985,148112,148113],{},"坐标轴",[940,148115,148116,148121],{},[985,148117,148118],{},[31,148119,148120],{},"VisualMapOpts",[985,148122,148123],{},"视觉映射",[940,148125,148126,148131],{},[985,148127,148128],{},[31,148129,148130],{},"DataZoomOpts",[985,148132,148133],{},"区域缩放",[14,148135,148137],{"id":148136},"_106-系列配置","10.6 系列配置",[108,148139,148140],{},"系列配置作用于某一组数据。",[24,148142,148144],{"className":31029,"code":148143,"language":31031,"meta":29,"style":29},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[31,148145,148146,148151,148162,148191,148202,148221],{"__ignoreMap":29},[34,148147,148148],{"class":36,"line":37},[34,148149,148150],{"class":40},"line.add_yaxis(\n",[34,148152,148153,148156,148158,148160],{"class":36,"line":51},[34,148154,148155],{"class":5869},"    series_name",[34,148157,153],{"class":87},[34,148159,147796],{"class":156},[34,148161,32117],{"class":40},[34,148163,148164,148167,148169,148171,148173,148175,148177,148179,148181,148183,148185,148187,148189],{"class":36,"line":60},[34,148165,148166],{"class":5869},"    y_axis",[34,148168,153],{"class":87},[34,148170,1684],{"class":40},[34,148172,1106],{"class":63},[34,148174,13088],{"class":40},[34,148176,1611],{"class":63},[34,148178,13088],{"class":40},[34,148180,1656],{"class":63},[34,148182,13088],{"class":40},[34,148184,147813],{"class":63},[34,148186,13088],{"class":40},[34,148188,147818],{"class":63},[34,148190,88466],{"class":40},[34,148192,148193,148196,148198,148200],{"class":36,"line":76},[34,148194,148195],{"class":5869},"    is_smooth",[34,148197,153],{"class":87},[34,148199,32127],{"class":63},[34,148201,32117],{"class":40},[34,148203,148204,148207,148209,148212,148215,148217,148219],{"class":36,"line":93},[34,148205,148206],{"class":5869},"    label_opts",[34,148208,153],{"class":87},[34,148210,148211],{"class":40},"opts.LabelOpts(",[34,148213,148214],{"class":5869},"is_show",[34,148216,153],{"class":87},[34,148218,32127],{"class":63},[34,148220,38698],{"class":40},[34,148222,148223],{"class":36,"line":99},[34,148224,807],{"class":40},[108,148226,148227],{},"常用参数：",[752,148229,148230,148236,148242,148248,148254],{},[755,148231,148232,148235],{},[31,148233,148234],{},"series_name","：系列名称。",[755,148237,148238,148241],{},[31,148239,148240],{},"y_axis","：y 轴数据。",[755,148243,148244,148247],{},[31,148245,148246],{},"is_smooth","：是否平滑曲线。",[755,148249,148250,148253],{},[31,148251,148252],{},"label_opts","：标签配置。",[755,148255,148256,148259],{},[31,148257,148258],{},"symbol_size","：标记点大小。",[14,148261,148263],{"id":148262},"_107-多条折线","10.7 多条折线",[24,148265,148267],{"className":31029,"code":148266,"language":31031,"meta":29,"style":29},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[31,148268,148269,148283,148293,148297,148326,148330,148338,148343,148381,148418,148422,148439,148455,148459],{"__ignoreMap":29},[34,148270,148271,148273,148275,148277,148279,148281],{"class":36,"line":37},[34,148272,31388],{"class":87},[34,148274,147880],{"class":40},[34,148276,31043],{"class":87},[34,148278,147885],{"class":40},[34,148280,32034],{"class":87},[34,148282,147890],{"class":40},[34,148284,148285,148287,148289,148291],{"class":36,"line":51},[34,148286,31388],{"class":87},[34,148288,147739],{"class":40},[34,148290,31043],{"class":87},[34,148292,147744],{"class":40},[34,148294,148295],{"class":36,"line":60},[34,148296,3053],{"emptyLinePlaceholder":726},[34,148298,148299,148302,148304,148306,148308,148310,148312,148314,148316,148318,148320,148322,148324],{"class":36,"line":76},[34,148300,148301],{"class":40},"dates ",[34,148303,153],{"class":87},[34,148305,52872],{"class":40},[34,148307,147766],{"class":156},[34,148309,13088],{"class":40},[34,148311,147771],{"class":156},[34,148313,13088],{"class":40},[34,148315,147776],{"class":156},[34,148317,13088],{"class":40},[34,148319,147781],{"class":156},[34,148321,13088],{"class":40},[34,148323,147786],{"class":156},[34,148325,33897],{"class":40},[34,148327,148328],{"class":36,"line":93},[34,148329,3053],{"emptyLinePlaceholder":726},[34,148331,148332,148334,148336],{"class":36,"line":99},[34,148333,147753],{"class":40},[34,148335,153],{"class":87},[34,148337,147758],{"class":40},[34,148339,148340],{"class":36,"line":353},[34,148341,148342],{"class":40},"line.add_xaxis(dates)\n",[34,148344,148345,148347,148350,148352,148354,148356,148359,148361,148363,148365,148367,148369,148371,148373,148375,148377,148379],{"class":36,"line":359},[34,148346,147793],{"class":40},[34,148348,148349],{"class":156},"\"线上销售\"",[34,148351,78148],{"class":40},[34,148353,1106],{"class":63},[34,148355,13088],{"class":40},[34,148357,148358],{"class":63},"130",[34,148360,13088],{"class":40},[34,148362,1611],{"class":63},[34,148364,13088],{"class":40},[34,148366,21700],{"class":63},[34,148368,13088],{"class":40},[34,148370,2376],{"class":63},[34,148372,112832],{"class":40},[34,148374,148246],{"class":5869},[34,148376,153],{"class":87},[34,148378,32127],{"class":63},[34,148380,807],{"class":40},[34,148382,148383,148385,148388,148390,148392,148394,148396,148398,148400,148402,148404,148406,148408,148410,148412,148414,148416],{"class":36,"line":579},[34,148384,147793],{"class":40},[34,148386,148387],{"class":156},"\"线下销售\"",[34,148389,78148],{"class":40},[34,148391,1407],{"class":63},[34,148393,13088],{"class":40},[34,148395,1656],{"class":63},[34,148397,13088],{"class":40},[34,148399,1106],{"class":63},[34,148401,13088],{"class":40},[34,148403,1611],{"class":63},[34,148405,13088],{"class":40},[34,148407,147813],{"class":63},[34,148409,112832],{"class":40},[34,148411,148246],{"class":5869},[34,148413,153],{"class":87},[34,148415,32127],{"class":63},[34,148417,807],{"class":40},[34,148419,148420],{"class":36,"line":589},[34,148421,147969],{"class":40},[34,148423,148424,148426,148428,148430,148432,148434,148437],{"class":36,"line":601},[34,148425,147974],{"class":5869},[34,148427,153],{"class":87},[34,148429,147979],{"class":40},[34,148431,52056],{"class":5869},[34,148433,153],{"class":87},[34,148435,148436],{"class":156},"\"线上线下销售趋势\"",[34,148438,38698],{"class":40},[34,148440,148441,148443,148445,148447,148449,148451,148453],{"class":36,"line":613},[34,148442,148030],{"class":5869},[34,148444,153],{"class":87},[34,148446,148035],{"class":40},[34,148448,148038],{"class":5869},[34,148450,153],{"class":87},[34,148452,148043],{"class":156},[34,148454,38698],{"class":40},[34,148456,148457],{"class":36,"line":618},[34,148458,807],{"class":40},[34,148460,148461,148463,148466],{"class":36,"line":628},[34,148462,147825],{"class":40},[34,148464,148465],{"class":156},"\"sales.html\"",[34,148467,807],{"class":40},[108,148469,148470],{},"多条折线适合比较不同指标或不同地区。",[14,148472,148474],{"id":148473},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[108,148476,148477,148478,25271],{},"假设 ",[31,148479,148480],{},"sales.json",[24,148482,148484],{"className":147546,"code":148483,"language":146293,"meta":29,"style":29},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[31,148485,148486,148491,148523,148551,148579],{"__ignoreMap":29},[34,148487,148488],{"class":36,"line":37},[34,148489,148490],{"class":40},"[\n",[34,148492,148493,148496,148499,148501,148503,148505,148508,148510,148512,148514,148517,148519,148521],{"class":36,"line":51},[34,148494,148495],{"class":40},"  {",[34,148497,148498],{"class":63},"\"date\"",[34,148500,67],{"class":40},[34,148502,147766],{"class":156},[34,148504,13088],{"class":40},[34,148506,148507],{"class":63},"\"online\"",[34,148509,67],{"class":40},[34,148511,1106],{"class":63},[34,148513,13088],{"class":40},[34,148515,148516],{"class":63},"\"offline\"",[34,148518,67],{"class":40},[34,148520,1407],{"class":63},[34,148522,5583],{"class":40},[34,148524,148525,148527,148529,148531,148533,148535,148537,148539,148541,148543,148545,148547,148549],{"class":36,"line":60},[34,148526,148495],{"class":40},[34,148528,148498],{"class":63},[34,148530,67],{"class":40},[34,148532,147771],{"class":156},[34,148534,13088],{"class":40},[34,148536,148507],{"class":63},[34,148538,67],{"class":40},[34,148540,148358],{"class":63},[34,148542,13088],{"class":40},[34,148544,148516],{"class":63},[34,148546,67],{"class":40},[34,148548,1656],{"class":63},[34,148550,5583],{"class":40},[34,148552,148553,148555,148557,148559,148561,148563,148565,148567,148569,148571,148573,148575,148577],{"class":36,"line":76},[34,148554,148495],{"class":40},[34,148556,148498],{"class":63},[34,148558,67],{"class":40},[34,148560,147776],{"class":156},[34,148562,13088],{"class":40},[34,148564,148507],{"class":63},[34,148566,67],{"class":40},[34,148568,1611],{"class":63},[34,148570,13088],{"class":40},[34,148572,148516],{"class":63},[34,148574,67],{"class":40},[34,148576,1106],{"class":63},[34,148578,241],{"class":40},[34,148580,148581],{"class":36,"line":93},[34,148582,33897],{"class":40},[108,148584,148585],{},"读取并绘图：",[24,148587,148589],{"className":31029,"code":148588,"language":31031,"meta":29,"style":29},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[31,148590,148591,148597,148611,148621,148625,148657,148670,148674,148682,148691,148700,148704,148716,148725,148734,148743,148747,148755,148759,148776,148793,148797,148814,148830,148834],{"__ignoreMap":29},[34,148592,148593,148595],{"class":36,"line":37},[34,148594,31043],{"class":87},[34,148596,147592],{"class":40},[34,148598,148599,148601,148603,148605,148607,148609],{"class":36,"line":51},[34,148600,31388],{"class":87},[34,148602,147880],{"class":40},[34,148604,31043],{"class":87},[34,148606,147885],{"class":40},[34,148608,32034],{"class":87},[34,148610,147890],{"class":40},[34,148612,148613,148615,148617,148619],{"class":36,"line":60},[34,148614,31388],{"class":87},[34,148616,147739],{"class":40},[34,148618,31043],{"class":87},[34,148620,147744],{"class":40},[34,148622,148623],{"class":36,"line":76},[34,148624,3053],{"emptyLinePlaceholder":726},[34,148626,148627,148629,148631,148633,148636,148638,148640,148642,148644,148646,148648,148650,148652,148655],{"class":36,"line":93},[34,148628,108463],{"class":87},[34,148630,147292],{"class":63},[34,148632,801],{"class":40},[34,148634,148635],{"class":156},"\"sales.json\"",[34,148637,13088],{"class":40},[34,148639,147302],{"class":156},[34,148641,13088],{"class":40},[34,148643,147307],{"class":5869},[34,148645,153],{"class":87},[34,148647,147312],{"class":156},[34,148649,14367],{"class":40},[34,148651,32034],{"class":87},[34,148653,148654],{"class":5869}," file",[34,148656,4392],{"class":40},[34,148658,148659,148661,148663,148666,148668],{"class":36,"line":99},[34,148660,102051],{"class":40},[34,148662,153],{"class":87},[34,148664,148665],{"class":40}," json.load(",[34,148667,46005],{"class":5869},[34,148669,807],{"class":40},[34,148671,148672],{"class":36,"line":353},[34,148673,3053],{"emptyLinePlaceholder":726},[34,148675,148676,148678,148680],{"class":36,"line":359},[34,148677,148301],{"class":40},[34,148679,153],{"class":87},[34,148681,52484],{"class":40},[34,148683,148684,148687,148689],{"class":36,"line":579},[34,148685,148686],{"class":40},"online_sales ",[34,148688,153],{"class":87},[34,148690,52484],{"class":40},[34,148692,148693,148696,148698],{"class":36,"line":589},[34,148694,148695],{"class":40},"offline_sales ",[34,148697,153],{"class":87},[34,148699,52484],{"class":40},[34,148701,148702],{"class":36,"line":601},[34,148703,3053],{"emptyLinePlaceholder":726},[34,148705,148706,148708,148711,148713],{"class":36,"line":613},[34,148707,3678],{"class":87},[34,148709,148710],{"class":40}," item ",[34,148712,26695],{"class":87},[34,148714,148715],{"class":40}," data:\n",[34,148717,148718,148721,148723],{"class":36,"line":618},[34,148719,148720],{"class":40},"    dates.append(item[",[34,148722,148498],{"class":156},[34,148724,5310],{"class":40},[34,148726,148727,148730,148732],{"class":36,"line":628},[34,148728,148729],{"class":40},"    online_sales.append(item[",[34,148731,148507],{"class":156},[34,148733,5310],{"class":40},[34,148735,148736,148739,148741],{"class":36,"line":640},[34,148737,148738],{"class":40},"    offline_sales.append(item[",[34,148740,148516],{"class":156},[34,148742,5310],{"class":40},[34,148744,148745],{"class":36,"line":2301},[34,148746,3053],{"emptyLinePlaceholder":726},[34,148748,148749,148751,148753],{"class":36,"line":2307},[34,148750,147753],{"class":40},[34,148752,153],{"class":87},[34,148754,147758],{"class":40},[34,148756,148757],{"class":36,"line":2328},[34,148758,148342],{"class":40},[34,148760,148761,148763,148765,148768,148770,148772,148774],{"class":36,"line":2333},[34,148762,147793],{"class":40},[34,148764,148349],{"class":156},[34,148766,148767],{"class":40},", online_sales, ",[34,148769,148246],{"class":5869},[34,148771,153],{"class":87},[34,148773,32127],{"class":63},[34,148775,807],{"class":40},[34,148777,148778,148780,148782,148785,148787,148789,148791],{"class":36,"line":2347},[34,148779,147793],{"class":40},[34,148781,148387],{"class":156},[34,148783,148784],{"class":40},", offline_sales, ",[34,148786,148246],{"class":5869},[34,148788,153],{"class":87},[34,148790,32127],{"class":63},[34,148792,807],{"class":40},[34,148794,148795],{"class":36,"line":2352},[34,148796,147969],{"class":40},[34,148798,148799,148801,148803,148805,148807,148809,148812],{"class":36,"line":2381},[34,148800,147974],{"class":5869},[34,148802,153],{"class":87},[34,148804,147979],{"class":40},[34,148806,52056],{"class":5869},[34,148808,153],{"class":87},[34,148810,148811],{"class":156},"\"销售趋势\"",[34,148813,38698],{"class":40},[34,148815,148816,148818,148820,148822,148824,148826,148828],{"class":36,"line":2386},[34,148817,148030],{"class":5869},[34,148819,153],{"class":87},[34,148821,148035],{"class":40},[34,148823,148038],{"class":5869},[34,148825,153],{"class":87},[34,148827,148043],{"class":156},[34,148829,38698],{"class":40},[34,148831,148832],{"class":36,"line":2403},[34,148833,807],{"class":40},[34,148835,148836,148838,148840],{"class":36,"line":2408},[34,148837,147825],{"class":40},[34,148839,148465],{"class":156},[34,148841,807],{"class":40},[14,148843,148845],{"id":148844},"_109-数据清洗","10.9 数据清洗",[108,148847,148848],{},"真实数据经常不整齐，需要清洗。",[108,148850,148851],{},"常见问题：",[752,148853,148854,148857,148860,148863],{},[755,148855,148856],{},"数字是字符串。",[755,148858,148859],{},"字段缺失。",[755,148861,148862],{},"空值。",[755,148864,148865],{},"日期格式不统一。",[108,148867,15788],{},[24,148869,148871],{"className":31029,"code":148870,"language":31031,"meta":29,"style":29},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[31,148872,148873,148882,148905,148925,148946,148950,148954,148962,148971,148975,148986,149000,149009,149014,149018,149026,149036,149040,149047],{"__ignoreMap":29},[34,148874,148875,148878,148880],{"class":36,"line":37},[34,148876,148877],{"class":40},"raw_data ",[34,148879,153],{"class":87},[34,148881,56090],{"class":40},[34,148883,148884,148887,148889,148891,148893,148895,148898,148900,148903],{"class":36,"line":51},[34,148885,148886],{"class":40},"    {",[34,148888,148498],{"class":156},[34,148890,67],{"class":40},[34,148892,147766],{"class":156},[34,148894,13088],{"class":40},[34,148896,148897],{"class":156},"\"sales\"",[34,148899,67],{"class":40},[34,148901,148902],{"class":156},"\"100\"",[34,148904,5583],{"class":40},[34,148906,148907,148909,148911,148913,148915,148917,148919,148921,148923],{"class":36,"line":60},[34,148908,148886],{"class":40},[34,148910,148498],{"class":156},[34,148912,67],{"class":40},[34,148914,147771],{"class":156},[34,148916,13088],{"class":40},[34,148918,148897],{"class":156},[34,148920,67],{"class":40},[34,148922,8305],{"class":156},[34,148924,5583],{"class":40},[34,148926,148927,148929,148931,148933,148935,148937,148939,148941,148944],{"class":36,"line":76},[34,148928,148886],{"class":40},[34,148930,148498],{"class":156},[34,148932,67],{"class":40},[34,148934,147776],{"class":156},[34,148936,13088],{"class":40},[34,148938,148897],{"class":156},[34,148940,67],{"class":40},[34,148942,148943],{"class":156},"\"120\"",[34,148945,5583],{"class":40},[34,148947,148948],{"class":36,"line":93},[34,148949,33897],{"class":40},[34,148951,148952],{"class":36,"line":99},[34,148953,3053],{"emptyLinePlaceholder":726},[34,148955,148956,148958,148960],{"class":36,"line":353},[34,148957,148301],{"class":40},[34,148959,153],{"class":87},[34,148961,52484],{"class":40},[34,148963,148964,148967,148969],{"class":36,"line":359},[34,148965,148966],{"class":40},"sales ",[34,148968,153],{"class":87},[34,148970,52484],{"class":40},[34,148972,148973],{"class":36,"line":579},[34,148974,3053],{"emptyLinePlaceholder":726},[34,148976,148977,148979,148981,148983],{"class":36,"line":589},[34,148978,3678],{"class":87},[34,148980,148710],{"class":40},[34,148982,26695],{"class":87},[34,148984,148985],{"class":40}," raw_data:\n",[34,148987,148988,148991,148993,148996,148998],{"class":36,"line":601},[34,148989,148990],{"class":40},"    value ",[34,148992,153],{"class":87},[34,148994,148995],{"class":40}," item.get(",[34,148997,148897],{"class":156},[34,148999,807],{"class":40},[34,149001,149002,149004,149006],{"class":36,"line":613},[34,149003,3754],{"class":87},[34,149005,39581],{"class":87},[34,149007,149008],{"class":40}," value:\n",[34,149010,149011],{"class":36,"line":618},[34,149012,149013],{"class":87},"        continue\n",[34,149015,149016],{"class":36,"line":628},[34,149017,3053],{"emptyLinePlaceholder":726},[34,149019,149020,149022,149024],{"class":36,"line":640},[34,149021,148720],{"class":40},[34,149023,148498],{"class":156},[34,149025,5310],{"class":40},[34,149027,149028,149031,149033],{"class":36,"line":2301},[34,149029,149030],{"class":40},"    sales.append(",[34,149032,804],{"class":63},[34,149034,149035],{"class":40},"(value))\n",[34,149037,149038],{"class":36,"line":2307},[34,149039,3053],{"emptyLinePlaceholder":726},[34,149041,149042,149044],{"class":36,"line":2328},[34,149043,31066],{"class":63},[34,149045,149046],{"class":40},"(dates)\n",[34,149048,149049,149051],{"class":36,"line":2333},[34,149050,31066],{"class":63},[34,149052,149053],{"class":40},"(sales)\n",[14,149055,149057],{"id":149056},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[24,149059,149061],{"className":31029,"code":149060,"language":31031,"meta":29,"style":29},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[31,149062,149063,149077,149087,149091,149099,149120,149142,149164,149186,149208,149212,149216,149238,149259,149263,149271,149275,149279,149289,149298,149308,149324,149328,149332,149349,149365,149381,149397,149407,149411],{"__ignoreMap":29},[34,149064,149065,149067,149069,149071,149073,149075],{"class":36,"line":37},[34,149066,31388],{"class":87},[34,149068,147880],{"class":40},[34,149070,31043],{"class":87},[34,149072,147885],{"class":40},[34,149074,32034],{"class":87},[34,149076,147890],{"class":40},[34,149078,149079,149081,149083,149085],{"class":36,"line":51},[34,149080,31388],{"class":87},[34,149082,147739],{"class":40},[34,149084,31043],{"class":87},[34,149086,147744],{"class":40},[34,149088,149089],{"class":36,"line":60},[34,149090,3053],{"emptyLinePlaceholder":726},[34,149092,149093,149095,149097],{"class":36,"line":76},[34,149094,148966],{"class":40},[34,149096,153],{"class":87},[34,149098,56090],{"class":40},[34,149100,149101,149103,149105,149107,149110,149112,149114,149116,149118],{"class":36,"line":93},[34,149102,148886],{"class":40},[34,149104,148498],{"class":156},[34,149106,67],{"class":40},[34,149108,149109],{"class":156},"\"2024-10-01\"",[34,149111,13088],{"class":40},[34,149113,84714],{"class":156},[34,149115,67],{"class":40},[34,149117,92653],{"class":63},[34,149119,5583],{"class":40},[34,149121,149122,149124,149126,149128,149131,149133,149135,149137,149140],{"class":36,"line":99},[34,149123,148886],{"class":40},[34,149125,148498],{"class":156},[34,149127,67],{"class":40},[34,149129,149130],{"class":156},"\"2024-10-02\"",[34,149132,13088],{"class":40},[34,149134,84714],{"class":156},[34,149136,67],{"class":40},[34,149138,149139],{"class":63},"1800",[34,149141,5583],{"class":40},[34,149143,149144,149146,149148,149150,149153,149155,149157,149159,149162],{"class":36,"line":353},[34,149145,148886],{"class":40},[34,149147,148498],{"class":156},[34,149149,67],{"class":40},[34,149151,149152],{"class":156},"\"2024-10-03\"",[34,149154,13088],{"class":40},[34,149156,84714],{"class":156},[34,149158,67],{"class":40},[34,149160,149161],{"class":63},"1500",[34,149163,5583],{"class":40},[34,149165,149166,149168,149170,149172,149175,149177,149179,149181,149184],{"class":36,"line":359},[34,149167,148886],{"class":40},[34,149169,148498],{"class":156},[34,149171,67],{"class":40},[34,149173,149174],{"class":156},"\"2024-10-04\"",[34,149176,13088],{"class":40},[34,149178,84714],{"class":156},[34,149180,67],{"class":40},[34,149182,149183],{"class":63},"2100",[34,149185,5583],{"class":40},[34,149187,149188,149190,149192,149194,149197,149199,149201,149203,149206],{"class":36,"line":579},[34,149189,148886],{"class":40},[34,149191,148498],{"class":156},[34,149193,67],{"class":40},[34,149195,149196],{"class":156},"\"2024-10-05\"",[34,149198,13088],{"class":40},[34,149200,84714],{"class":156},[34,149202,67],{"class":40},[34,149204,149205],{"class":63},"2600",[34,149207,5583],{"class":40},[34,149209,149210],{"class":36,"line":589},[34,149211,33897],{"class":40},[34,149213,149214],{"class":36,"line":601},[34,149215,3053],{"emptyLinePlaceholder":726},[34,149217,149218,149220,149222,149225,149227,149229,149231,149233,149235],{"class":36,"line":613},[34,149219,148301],{"class":40},[34,149221,153],{"class":87},[34,149223,149224],{"class":40}," [item[",[34,149226,148498],{"class":156},[34,149228,5096],{"class":40},[34,149230,3678],{"class":87},[34,149232,148710],{"class":40},[34,149234,26695],{"class":87},[34,149236,149237],{"class":40}," sales]\n",[34,149239,149240,149243,149245,149247,149249,149251,149253,149255,149257],{"class":36,"line":618},[34,149241,149242],{"class":40},"amounts ",[34,149244,153],{"class":87},[34,149246,149224],{"class":40},[34,149248,84714],{"class":156},[34,149250,5096],{"class":40},[34,149252,3678],{"class":87},[34,149254,148710],{"class":40},[34,149256,26695],{"class":87},[34,149258,149237],{"class":40},[34,149260,149261],{"class":36,"line":628},[34,149262,3053],{"emptyLinePlaceholder":726},[34,149264,149265,149267,149269],{"class":36,"line":640},[34,149266,147753],{"class":40},[34,149268,153],{"class":87},[34,149270,147758],{"class":40},[34,149272,149273],{"class":36,"line":2301},[34,149274,148342],{"class":40},[34,149276,149277],{"class":36,"line":2307},[34,149278,148150],{"class":40},[34,149280,149281,149283,149285,149287],{"class":36,"line":2328},[34,149282,148155],{"class":5869},[34,149284,153],{"class":87},[34,149286,147796],{"class":156},[34,149288,32117],{"class":40},[34,149290,149291,149293,149295],{"class":36,"line":2333},[34,149292,148166],{"class":5869},[34,149294,153],{"class":87},[34,149296,149297],{"class":40},"amounts,\n",[34,149299,149300,149302,149304,149306],{"class":36,"line":2347},[34,149301,148195],{"class":5869},[34,149303,153],{"class":87},[34,149305,32127],{"class":63},[34,149307,32117],{"class":40},[34,149309,149310,149312,149314,149316,149318,149320,149322],{"class":36,"line":2352},[34,149311,148206],{"class":5869},[34,149313,153],{"class":87},[34,149315,148211],{"class":40},[34,149317,148214],{"class":5869},[34,149319,153],{"class":87},[34,149321,32127],{"class":63},[34,149323,38698],{"class":40},[34,149325,149326],{"class":36,"line":2381},[34,149327,807],{"class":40},[34,149329,149330],{"class":36,"line":2386},[34,149331,147969],{"class":40},[34,149333,149334,149336,149338,149340,149342,149344,149347],{"class":36,"line":2403},[34,149335,147974],{"class":5869},[34,149337,153],{"class":87},[34,149339,147979],{"class":40},[34,149341,52056],{"class":5869},[34,149343,153],{"class":87},[34,149345,149346],{"class":156},"\"每日销售额\"",[34,149348,38698],{"class":40},[34,149350,149351,149353,149355,149357,149359,149361,149363],{"class":36,"line":2408},[34,149352,147993],{"class":5869},[34,149354,153],{"class":87},[34,149356,147998],{"class":40},[34,149358,80440],{"class":5869},[34,149360,153],{"class":87},[34,149362,148005],{"class":156},[34,149364,38698],{"class":40},[34,149366,149367,149369,149371,149373,149375,149377,149379],{"class":36,"line":2413},[34,149368,148012],{"class":5869},[34,149370,153],{"class":87},[34,149372,147998],{"class":40},[34,149374,80440],{"class":5869},[34,149376,153],{"class":87},[34,149378,148023],{"class":156},[34,149380,38698],{"class":40},[34,149382,149383,149385,149387,149389,149391,149393,149395],{"class":36,"line":2418},[34,149384,148030],{"class":5869},[34,149386,153],{"class":87},[34,149388,148035],{"class":40},[34,149390,148038],{"class":5869},[34,149392,153],{"class":87},[34,149394,148043],{"class":156},[34,149396,38698],{"class":40},[34,149398,149399,149402,149404],{"class":36,"line":2432},[34,149400,149401],{"class":5869},"    datazoom_opts",[34,149403,153],{"class":87},[34,149405,149406],{"class":40},"[opts.DataZoomOpts()],\n",[34,149408,149409],{"class":36,"line":2437},[34,149410,807],{"class":40},[34,149412,149413,149415,149418],{"class":36,"line":3230},[34,149414,147825],{"class":40},[34,149416,149417],{"class":156},"\"daily_sales.html\"",[34,149419,807],{"class":40},[108,149421,149422,149425],{},[31,149423,149424],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149427,149429],{"id":149428},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[108,149431,149432],{},"如果数据结构如下：",[24,149434,149436],{"className":31029,"code":149435,"language":31031,"meta":29,"style":29},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[31,149437,149438,149446,149454,149476,149497,149502,149509,149529,149549,149553],{"__ignoreMap":29},[34,149439,149440,149442,149444],{"class":36,"line":37},[34,149441,102288],{"class":40},[34,149443,153],{"class":87},[34,149445,57],{"class":40},[34,149447,149448,149451],{"class":36,"line":51},[34,149449,149450],{"class":156},"    \"北京\"",[34,149452,149453],{"class":40},": [\n",[34,149455,149456,149458,149460,149462,149465,149467,149470,149472,149474],{"class":36,"line":60},[34,149457,5570],{"class":40},[34,149459,148498],{"class":156},[34,149461,67],{"class":40},[34,149463,149464],{"class":156},"\"2024-01-01\"",[34,149466,13088],{"class":40},[34,149468,149469],{"class":156},"\"confirm\"",[34,149471,67],{"class":40},[34,149473,1241],{"class":63},[34,149475,5583],{"class":40},[34,149477,149478,149480,149482,149484,149487,149489,149491,149493,149495],{"class":36,"line":76},[34,149479,5570],{"class":40},[34,149481,148498],{"class":156},[34,149483,67],{"class":40},[34,149485,149486],{"class":156},"\"2024-01-02\"",[34,149488,13088],{"class":40},[34,149490,149469],{"class":156},[34,149492,67],{"class":40},[34,149494,1293],{"class":63},[34,149496,5583],{"class":40},[34,149498,149499],{"class":36,"line":93},[34,149500,149501],{"class":40},"    ],\n",[34,149503,149504,149507],{"class":36,"line":99},[34,149505,149506],{"class":156},"    \"上海\"",[34,149508,149453],{"class":40},[34,149510,149511,149513,149515,149517,149519,149521,149523,149525,149527],{"class":36,"line":353},[34,149512,5570],{"class":40},[34,149514,148498],{"class":156},[34,149516,67],{"class":40},[34,149518,149464],{"class":156},[34,149520,13088],{"class":40},[34,149522,149469],{"class":156},[34,149524,67],{"class":40},[34,149526,1190],{"class":63},[34,149528,5583],{"class":40},[34,149530,149531,149533,149535,149537,149539,149541,149543,149545,149547],{"class":36,"line":359},[34,149532,5570],{"class":40},[34,149534,148498],{"class":156},[34,149536,67],{"class":40},[34,149538,149486],{"class":156},[34,149540,13088],{"class":40},[34,149542,149469],{"class":156},[34,149544,67],{"class":40},[34,149546,1318],{"class":63},[34,149548,5583],{"class":40},[34,149550,149551],{"class":36,"line":579},[34,149552,149501],{"class":40},[34,149554,149555],{"class":36,"line":589},[34,149556,241],{"class":40},[108,149558,149559],{},"绘制多地区趋势：",[24,149561,149563],{"className":31029,"code":149562,"language":31031,"meta":29,"style":29},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[31,149564,149565,149579,149589,149593,149618,149622,149630,149634,149638,149650,149672,149685,149689,149693,149710,149726,149730],{"__ignoreMap":29},[34,149566,149567,149569,149571,149573,149575,149577],{"class":36,"line":37},[34,149568,31388],{"class":87},[34,149570,147880],{"class":40},[34,149572,31043],{"class":87},[34,149574,147885],{"class":40},[34,149576,32034],{"class":87},[34,149578,147890],{"class":40},[34,149580,149581,149583,149585,149587],{"class":36,"line":51},[34,149582,31388],{"class":87},[34,149584,147739],{"class":40},[34,149586,31043],{"class":87},[34,149588,147744],{"class":40},[34,149590,149591],{"class":36,"line":60},[34,149592,3053],{"emptyLinePlaceholder":726},[34,149594,149595,149597,149599,149601,149603,149605,149607,149609,149611,149614,149616],{"class":36,"line":76},[34,149596,148301],{"class":40},[34,149598,153],{"class":87},[34,149600,149224],{"class":40},[34,149602,148498],{"class":156},[34,149604,5096],{"class":40},[34,149606,3678],{"class":87},[34,149608,148710],{"class":40},[34,149610,26695],{"class":87},[34,149612,149613],{"class":40}," data[",[34,149615,69904],{"class":156},[34,149617,78157],{"class":40},[34,149619,149620],{"class":36,"line":93},[34,149621,3053],{"emptyLinePlaceholder":726},[34,149623,149624,149626,149628],{"class":36,"line":99},[34,149625,147753],{"class":40},[34,149627,153],{"class":87},[34,149629,147758],{"class":40},[34,149631,149632],{"class":36,"line":353},[34,149633,148342],{"class":40},[34,149635,149636],{"class":36,"line":359},[34,149637,3053],{"emptyLinePlaceholder":726},[34,149639,149640,149642,149645,149647],{"class":36,"line":579},[34,149641,3678],{"class":87},[34,149643,149644],{"class":40}," city, records ",[34,149646,26695],{"class":87},[34,149648,149649],{"class":40}," data.items():\n",[34,149651,149652,149655,149657,149659,149661,149663,149665,149667,149669],{"class":36,"line":589},[34,149653,149654],{"class":40},"    values ",[34,149656,153],{"class":87},[34,149658,149224],{"class":40},[34,149660,149469],{"class":156},[34,149662,5096],{"class":40},[34,149664,3678],{"class":87},[34,149666,148710],{"class":40},[34,149668,26695],{"class":87},[34,149670,149671],{"class":40}," records]\n",[34,149673,149674,149677,149679,149681,149683],{"class":36,"line":601},[34,149675,149676],{"class":40},"    line.add_yaxis(city, values, ",[34,149678,148246],{"class":5869},[34,149680,153],{"class":87},[34,149682,32127],{"class":63},[34,149684,807],{"class":40},[34,149686,149687],{"class":36,"line":613},[34,149688,3053],{"emptyLinePlaceholder":726},[34,149690,149691],{"class":36,"line":618},[34,149692,147969],{"class":40},[34,149694,149695,149697,149699,149701,149703,149705,149708],{"class":36,"line":628},[34,149696,147974],{"class":5869},[34,149698,153],{"class":87},[34,149700,147979],{"class":40},[34,149702,52056],{"class":5869},[34,149704,153],{"class":87},[34,149706,149707],{"class":156},"\"多地区趋势图\"",[34,149709,38698],{"class":40},[34,149711,149712,149714,149716,149718,149720,149722,149724],{"class":36,"line":640},[34,149713,148030],{"class":5869},[34,149715,153],{"class":87},[34,149717,148035],{"class":40},[34,149719,148038],{"class":5869},[34,149721,153],{"class":87},[34,149723,148043],{"class":156},[34,149725,38698],{"class":40},[34,149727,149728],{"class":36,"line":2301},[34,149729,807],{"class":40},[34,149731,149732,149734,149737],{"class":36,"line":2307},[34,149733,147825],{"class":40},[34,149735,149736],{"class":156},"\"trend.html\"",[34,149738,807],{"class":40},[108,149740,149741],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149743,149745],{"id":149744},"_1012-易错点","10.12 易错点",[752,149747,149748,149754,149760,149770,149776],{},[755,149749,149750,149753],{},[31,149751,149752],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[755,149755,149756,149759],{},[31,149757,149758],{},"render()"," 生成的是 HTML，不是图片。",[755,149761,149762,149763,149766,149767,29036],{},"JSON 字符串用 ",[31,149764,149765],{},"json.loads()","，JSON 文件用 ",[31,149768,149769],{},"json.load()",[755,149771,149772,149773,29036],{},"中文 JSON 保存时加 ",[31,149774,149775],{},"ensure_ascii=False",[755,149777,149778],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149780,149782],{"id":149781},"_1013-本章练习","10.13 本章练习",[752,149784,149785,149788,149791,149794,149797],{},[755,149786,149787],{},"安装 pyecharts 并生成第一个折线图。",[755,149789,149790],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[755,149792,149793],{},"绘制两条折线，对比线上和线下销售额。",[755,149795,149796],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[755,149798,149799],{},"对含有空值的销售数据进行清洗后再绘图。",[45,149801,149802],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":29,"searchDepth":51,"depth":51,"links":149804},[149805,149806,149807,149808,149809,149810,149811,149812,149813,149814,149815,149816,149817],{"id":147421,"depth":51,"text":147422},{"id":147496,"depth":51,"text":147497},{"id":147675,"depth":51,"text":147676},{"id":147726,"depth":51,"text":147727},{"id":147860,"depth":51,"text":147861},{"id":148136,"depth":51,"text":148137},{"id":148262,"depth":51,"text":148263},{"id":148473,"depth":51,"text":148474},{"id":148844,"depth":51,"text":148845},{"id":149056,"depth":51,"text":149057},{"id":149428,"depth":51,"text":149429},{"id":149744,"depth":51,"text":149745},{"id":149781,"depth":51,"text":149782},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147413,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149824,"title":149825,"body":149826,"description":723,"extension":724,"meta":152186,"navigation":726,"path":152187,"seo":152188,"stem":152189,"__hash__":152190},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149827,"toc":152163},[149828,149831,149835,149838,149841,149917,149920,150011,150014,150018,150021,150065,150078,150082,150085,150152,150155,150159,150162,150246,150254,150258,150263,150404,150407,150418,150424,150430,150544,150548,150551,150554,150807,150810,150814,150817,150921,150924,150928,151079,151083,151090,151203,151207,151210,151316,151319,151323,151326,151357,151360,151465,151468,151472,151476,151486,151554,151558,151565,151629,151632,151636,151642,151738,151747,151751,152075,152084,152088,152116,152120,152160],[10,149829,149825],{"id":149830},"_11-面向对象基础",[14,149832,149834],{"id":149833},"_111-什么是面向对象","11.1 什么是面向对象",[108,149836,149837],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[108,149839,149840],{},"面向过程：",[24,149842,149844],{"className":31029,"code":149843,"language":31031,"meta":29,"style":29},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[31,149845,149846,149855,149863,149867,149877,149908,149912],{"__ignoreMap":29},[34,149847,149848,149850,149852],{"class":36,"line":37},[34,149849,147037],{"class":40},[34,149851,153],{"class":87},[34,149853,149854],{"class":156}," \"小明\"\n",[34,149856,149857,149859,149861],{"class":36,"line":51},[34,149858,147047],{"class":40},[34,149860,153],{"class":87},[34,149862,147052],{"class":63},[34,149864,149865],{"class":36,"line":60},[34,149866,3053],{"emptyLinePlaceholder":726},[34,149868,149869,149871,149874],{"class":36,"line":76},[34,149870,32598],{"class":87},[34,149872,149873],{"class":149}," introduce",[34,149875,149876],{"class":40},"(name, age):\n",[34,149878,149879,149881,149883,149885,149888,149890,149892,149894,149897,149899,149901,149903,149906],{"class":36,"line":93},[34,149880,31950],{"class":63},[34,149882,801],{"class":40},[34,149884,851],{"class":87},[34,149886,149887],{"class":156},"\"我叫",[34,149889,1690],{"class":63},[34,149891,80440],{"class":40},[34,149893,1739],{"class":63},[34,149895,149896],{"class":156},"，今年",[34,149898,1690],{"class":63},[34,149900,70856],{"class":40},[34,149902,1739],{"class":63},[34,149904,149905],{"class":156},"岁\"",[34,149907,807],{"class":40},[34,149909,149910],{"class":36,"line":99},[34,149911,3053],{"emptyLinePlaceholder":726},[34,149913,149914],{"class":36,"line":353},[34,149915,149916],{"class":40},"introduce(name, age)\n",[108,149918,149919],{},"面向对象：",[24,149921,149923],{"className":31029,"code":149922,"language":31031,"meta":29,"style":29},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[31,149924,149925,149933,149941,149970,149974,149978,149988,149997,150006],{"__ignoreMap":29},[34,149926,149927,149929,149931],{"class":36,"line":37},[34,149928,15347],{"class":87},[34,149930,8551],{"class":149},[34,149932,4392],{"class":40},[34,149934,149935,149937,149939],{"class":36,"line":51},[34,149936,31452],{"class":87},[34,149938,149873],{"class":149},[34,149940,31458],{"class":40},[34,149942,149943,149945,149947,149949,149951,149954,149956,149958,149960,149962,149964,149966,149968],{"class":36,"line":60},[34,149944,33102],{"class":63},[34,149946,801],{"class":40},[34,149948,851],{"class":87},[34,149950,149887],{"class":156},[34,149952,149953],{"class":63},"{self",[34,149955,80931],{"class":40},[34,149957,1739],{"class":63},[34,149959,149896],{"class":156},[34,149961,149953],{"class":63},[34,149963,80943],{"class":40},[34,149965,1739],{"class":63},[34,149967,149905],{"class":156},[34,149969,807],{"class":40},[34,149971,149972],{"class":36,"line":76},[34,149973,3053],{"emptyLinePlaceholder":726},[34,149975,149976],{"class":36,"line":93},[34,149977,3053],{"emptyLinePlaceholder":726},[34,149979,149980,149983,149985],{"class":36,"line":99},[34,149981,149982],{"class":40},"student ",[34,149984,153],{"class":87},[34,149986,149987],{"class":40}," Student()\n",[34,149989,149990,149993,149995],{"class":36,"line":353},[34,149991,149992],{"class":40},"student.name ",[34,149994,153],{"class":87},[34,149996,149854],{"class":156},[34,149998,149999,150002,150004],{"class":36,"line":359},[34,150000,150001],{"class":40},"student.age ",[34,150003,153],{"class":87},[34,150005,147052],{"class":63},[34,150007,150008],{"class":36,"line":579},[34,150009,150010],{"class":40},"student.introduce()\n",[108,150012,150013],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150015,150017],{"id":150016},"_112-类和对象","11.2 类和对象",[108,150019,150020],{},"类是模板，对象是根据模板创建出来的具体实例。",[24,150022,150024],{"className":31029,"code":150023,"language":31031,"meta":29,"style":29},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[31,150025,150026,150034,150039,150043,150047,150056],{"__ignoreMap":29},[34,150027,150028,150030,150032],{"class":36,"line":37},[34,150029,15347],{"class":87},[34,150031,8551],{"class":149},[34,150033,4392],{"class":40},[34,150035,150036],{"class":36,"line":51},[34,150037,150038],{"class":87},"    pass\n",[34,150040,150041],{"class":36,"line":60},[34,150042,3053],{"emptyLinePlaceholder":726},[34,150044,150045],{"class":36,"line":76},[34,150046,3053],{"emptyLinePlaceholder":726},[34,150048,150049,150052,150054],{"class":36,"line":93},[34,150050,150051],{"class":40},"student1 ",[34,150053,153],{"class":87},[34,150055,149987],{"class":40},[34,150057,150058,150061,150063],{"class":36,"line":99},[34,150059,150060],{"class":40},"student2 ",[34,150062,153],{"class":87},[34,150064,149987],{"class":40},[108,150066,150067,150070,150071,101648,150074,150077],{},[31,150068,150069],{},"Student"," 是类，",[31,150072,150073],{},"student1",[31,150075,150076],{},"student2"," 是对象。",[14,150079,150081],{"id":150080},"_113-属性","11.3 属性",[108,150083,150084],{},"属性是对象保存的数据。",[24,150086,150088],{"className":31029,"code":150087,"language":31031,"meta":29,"style":29},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[31,150089,150090,150098,150102,150106,150110,150118,150126,150134,150138,150145],{"__ignoreMap":29},[34,150091,150092,150094,150096],{"class":36,"line":37},[34,150093,15347],{"class":87},[34,150095,8551],{"class":149},[34,150097,4392],{"class":40},[34,150099,150100],{"class":36,"line":51},[34,150101,150038],{"class":87},[34,150103,150104],{"class":36,"line":60},[34,150105,3053],{"emptyLinePlaceholder":726},[34,150107,150108],{"class":36,"line":76},[34,150109,3053],{"emptyLinePlaceholder":726},[34,150111,150112,150114,150116],{"class":36,"line":93},[34,150113,149982],{"class":40},[34,150115,153],{"class":87},[34,150117,149987],{"class":40},[34,150119,150120,150122,150124],{"class":36,"line":99},[34,150121,149992],{"class":40},[34,150123,153],{"class":87},[34,150125,149854],{"class":156},[34,150127,150128,150130,150132],{"class":36,"line":353},[34,150129,150001],{"class":40},[34,150131,153],{"class":87},[34,150133,147052],{"class":63},[34,150135,150136],{"class":36,"line":359},[34,150137,3053],{"emptyLinePlaceholder":726},[34,150139,150140,150142],{"class":36,"line":579},[34,150141,31066],{"class":63},[34,150143,150144],{"class":40},"(student.name)\n",[34,150146,150147,150149],{"class":36,"line":589},[34,150148,31066],{"class":63},[34,150150,150151],{"class":40},"(student.age)\n",[108,150153,150154],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150156,150158],{"id":150157},"_114-方法","11.4 方法",[108,150160,150161],{},"类中的函数叫方法。",[24,150163,150164],{"className":31029,"code":149922,"language":31031,"meta":29,"style":29},[31,150165,150166,150174,150182,150210,150214,150218,150226,150234,150242],{"__ignoreMap":29},[34,150167,150168,150170,150172],{"class":36,"line":37},[34,150169,15347],{"class":87},[34,150171,8551],{"class":149},[34,150173,4392],{"class":40},[34,150175,150176,150178,150180],{"class":36,"line":51},[34,150177,31452],{"class":87},[34,150179,149873],{"class":149},[34,150181,31458],{"class":40},[34,150183,150184,150186,150188,150190,150192,150194,150196,150198,150200,150202,150204,150206,150208],{"class":36,"line":60},[34,150185,33102],{"class":63},[34,150187,801],{"class":40},[34,150189,851],{"class":87},[34,150191,149887],{"class":156},[34,150193,149953],{"class":63},[34,150195,80931],{"class":40},[34,150197,1739],{"class":63},[34,150199,149896],{"class":156},[34,150201,149953],{"class":63},[34,150203,80943],{"class":40},[34,150205,1739],{"class":63},[34,150207,149905],{"class":156},[34,150209,807],{"class":40},[34,150211,150212],{"class":36,"line":76},[34,150213,3053],{"emptyLinePlaceholder":726},[34,150215,150216],{"class":36,"line":93},[34,150217,3053],{"emptyLinePlaceholder":726},[34,150219,150220,150222,150224],{"class":36,"line":99},[34,150221,149982],{"class":40},[34,150223,153],{"class":87},[34,150225,149987],{"class":40},[34,150227,150228,150230,150232],{"class":36,"line":353},[34,150229,149992],{"class":40},[34,150231,153],{"class":87},[34,150233,149854],{"class":156},[34,150235,150236,150238,150240],{"class":36,"line":359},[34,150237,150001],{"class":40},[34,150239,153],{"class":87},[34,150241,147052],{"class":63},[34,150243,150244],{"class":36,"line":579},[34,150245,150010],{"class":40},[108,150247,150248,150250,150251,150253],{},[31,150249,31474],{}," 表示当前对象。调用方法时不需要手动传入 ",[31,150252,31474],{},"，Python 会自动传。",[14,150255,150257],{"id":150256},"_115-构造方法__init__","11.5 构造方法__init__",[108,150259,150260,150262],{},[31,150261,31480],{}," 在对象创建时自动执行，用于初始化属性。",[24,150264,150266],{"className":31029,"code":150265,"language":31031,"meta":29,"style":29},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[31,150267,150268,150276,150285,150297,150309,150320,150324,150332,150370,150374,150378,150400],{"__ignoreMap":29},[34,150269,150270,150272,150274],{"class":36,"line":37},[34,150271,15347],{"class":87},[34,150273,8551],{"class":149},[34,150275,4392],{"class":40},[34,150277,150278,150280,150282],{"class":36,"line":51},[34,150279,31452],{"class":87},[34,150281,31455],{"class":63},[34,150283,150284],{"class":40},"(self, name, age, score):\n",[34,150286,150287,150289,150292,150294],{"class":36,"line":60},[34,150288,31496],{"class":63},[34,150290,150291],{"class":40},".name ",[34,150293,153],{"class":87},[34,150295,150296],{"class":40}," name\n",[34,150298,150299,150301,150304,150306],{"class":36,"line":76},[34,150300,31496],{"class":63},[34,150302,150303],{"class":40},".age ",[34,150305,153],{"class":87},[34,150307,150308],{"class":40}," age\n",[34,150310,150311,150313,150316,150318],{"class":36,"line":93},[34,150312,31496],{"class":63},[34,150314,150315],{"class":40},".score ",[34,150317,153],{"class":87},[34,150319,2238],{"class":40},[34,150321,150322],{"class":36,"line":99},[34,150323,3053],{"emptyLinePlaceholder":726},[34,150325,150326,150328,150330],{"class":36,"line":353},[34,150327,31452],{"class":87},[34,150329,149873],{"class":149},[34,150331,31458],{"class":40},[34,150333,150334,150336,150338,150340,150342,150344,150346,150348,150350,150352,150354,150356,150359,150361,150364,150366,150368],{"class":36,"line":359},[34,150335,33102],{"class":63},[34,150337,801],{"class":40},[34,150339,851],{"class":87},[34,150341,149887],{"class":156},[34,150343,149953],{"class":63},[34,150345,80931],{"class":40},[34,150347,1739],{"class":63},[34,150349,149896],{"class":156},[34,150351,149953],{"class":63},[34,150353,80943],{"class":40},[34,150355,1739],{"class":63},[34,150357,150358],{"class":156},"岁，成绩",[34,150360,149953],{"class":63},[34,150362,150363],{"class":40},".score",[34,150365,1739],{"class":63},[34,150367,1046],{"class":156},[34,150369,807],{"class":40},[34,150371,150372],{"class":36,"line":579},[34,150373,3053],{"emptyLinePlaceholder":726},[34,150375,150376],{"class":36,"line":589},[34,150377,3053],{"emptyLinePlaceholder":726},[34,150379,150380,150382,150384,150387,150390,150392,150394,150396,150398],{"class":36,"line":601},[34,150381,149982],{"class":40},[34,150383,153],{"class":87},[34,150385,150386],{"class":40}," Student(",[34,150388,150389],{"class":156},"\"小明\"",[34,150391,13088],{"class":40},[34,150393,1445],{"class":63},[34,150395,13088],{"class":40},[34,150397,1782],{"class":63},[34,150399,807],{"class":40},[34,150401,150402],{"class":36,"line":613},[34,150403,150010],{"class":40},[108,150405,150406],{},"构造方法的好处：",[752,150408,150409,150412,150415],{},[755,150410,150411],{},"创建对象时必须提供必要数据。",[755,150413,150414],{},"属性初始化集中，不容易漏。",[755,150416,150417],{},"对象状态更完整。",[14,150419,150421,150422],{"id":150420},"_116-str","11.6 ",[111,150423,1962],{},[108,150425,150426,150427,29036],{},"直接打印对象时，默认输出不直观。可以定义 ",[31,150428,150429],{},"__str__",[24,150431,150433],{"className":31029,"code":150432,"language":31031,"meta":29,"style":29},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[31,150434,150435,150443,150452,150462,150472,150476,150485,150513,150517,150521,150537],{"__ignoreMap":29},[34,150436,150437,150439,150441],{"class":36,"line":37},[34,150438,15347],{"class":87},[34,150440,8551],{"class":149},[34,150442,4392],{"class":40},[34,150444,150445,150447,150449],{"class":36,"line":51},[34,150446,31452],{"class":87},[34,150448,31455],{"class":63},[34,150450,150451],{"class":40},"(self, name, age):\n",[34,150453,150454,150456,150458,150460],{"class":36,"line":60},[34,150455,31496],{"class":63},[34,150457,150291],{"class":40},[34,150459,153],{"class":87},[34,150461,150296],{"class":40},[34,150463,150464,150466,150468,150470],{"class":36,"line":76},[34,150465,31496],{"class":63},[34,150467,150303],{"class":40},[34,150469,153],{"class":87},[34,150471,150308],{"class":40},[34,150473,150474],{"class":36,"line":93},[34,150475,3053],{"emptyLinePlaceholder":726},[34,150477,150478,150480,150483],{"class":36,"line":99},[34,150479,31452],{"class":87},[34,150481,150482],{"class":63}," __str__",[34,150484,31458],{"class":40},[34,150486,150487,150489,150492,150495,150497,150499,150501,150504,150506,150508,150510],{"class":36,"line":353},[34,150488,15405],{"class":87},[34,150490,150491],{"class":87}," f",[34,150493,150494],{"class":156},"\"Student(name=",[34,150496,149953],{"class":63},[34,150498,80931],{"class":40},[34,150500,1739],{"class":63},[34,150502,150503],{"class":156},", age=",[34,150505,149953],{"class":63},[34,150507,80943],{"class":40},[34,150509,1739],{"class":63},[34,150511,150512],{"class":156},")\"\n",[34,150514,150515],{"class":36,"line":359},[34,150516,3053],{"emptyLinePlaceholder":726},[34,150518,150519],{"class":36,"line":579},[34,150520,3053],{"emptyLinePlaceholder":726},[34,150522,150523,150525,150527,150529,150531,150533,150535],{"class":36,"line":589},[34,150524,149982],{"class":40},[34,150526,153],{"class":87},[34,150528,150386],{"class":40},[34,150530,150389],{"class":156},[34,150532,13088],{"class":40},[34,150534,1445],{"class":63},[34,150536,807],{"class":40},[34,150538,150539,150541],{"class":36,"line":601},[34,150540,31066],{"class":63},[34,150542,150543],{"class":40},"(student)\n",[14,150545,150547],{"id":150546},"_117-封装","11.7 封装",[108,150549,150550],{},"封装就是把数据和方法放到类中，并控制访问方式。",[108,150552,150553],{},"Python 中以双下划线开头的属性通常视为私有属性。",[24,150555,150557],{"className":31029,"code":150556,"language":31031,"meta":29,"style":29},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[31,150558,150559,150568,150577,150589,150601,150605,150614,150623,150627,150637,150650,150661,150666,150677,150681,150690,150702,150713,150717,150730,150741,150745,150756,150760,150764,150782,150791,150800],{"__ignoreMap":29},[34,150560,150561,150563,150566],{"class":36,"line":37},[34,150562,15347],{"class":87},[34,150564,150565],{"class":149}," Account",[34,150567,4392],{"class":40},[34,150569,150570,150572,150574],{"class":36,"line":51},[34,150571,31452],{"class":87},[34,150573,31455],{"class":63},[34,150575,150576],{"class":40},"(self, owner, balance):\n",[34,150578,150579,150581,150584,150586],{"class":36,"line":60},[34,150580,31496],{"class":63},[34,150582,150583],{"class":40},".owner ",[34,150585,153],{"class":87},[34,150587,150588],{"class":40}," owner\n",[34,150590,150591,150593,150596,150598],{"class":36,"line":76},[34,150592,31496],{"class":63},[34,150594,150595],{"class":40},".__balance ",[34,150597,153],{"class":87},[34,150599,150600],{"class":40}," balance\n",[34,150602,150603],{"class":36,"line":93},[34,150604,3053],{"emptyLinePlaceholder":726},[34,150606,150607,150609,150612],{"class":36,"line":99},[34,150608,31452],{"class":87},[34,150610,150611],{"class":149}," get_balance",[34,150613,31458],{"class":40},[34,150615,150616,150618,150620],{"class":36,"line":353},[34,150617,15405],{"class":87},[34,150619,39524],{"class":63},[34,150621,150622],{"class":40},".__balance\n",[34,150624,150625],{"class":36,"line":359},[34,150626,3053],{"emptyLinePlaceholder":726},[34,150628,150629,150631,150634],{"class":36,"line":579},[34,150630,31452],{"class":87},[34,150632,150633],{"class":149}," deposit",[34,150635,150636],{"class":40},"(self, money):\n",[34,150638,150639,150641,150644,150646,150648],{"class":36,"line":589},[34,150640,3150],{"class":87},[34,150642,150643],{"class":40}," money ",[34,150645,2247],{"class":87},[34,150647,4746],{"class":63},[34,150649,4392],{"class":40},[34,150651,150652,150654,150656,150659],{"class":36,"line":601},[34,150653,35301],{"class":63},[34,150655,801],{"class":40},[34,150657,150658],{"class":156},"\"存款金额必须大于0\"",[34,150660,807],{"class":40},[34,150662,150663],{"class":36,"line":613},[34,150664,150665],{"class":87},"            return\n",[34,150667,150668,150670,150672,150674],{"class":36,"line":618},[34,150669,31496],{"class":63},[34,150671,150595],{"class":40},[34,150673,10130],{"class":87},[34,150675,150676],{"class":40}," money\n",[34,150678,150679],{"class":36,"line":628},[34,150680,3053],{"emptyLinePlaceholder":726},[34,150682,150683,150685,150688],{"class":36,"line":640},[34,150684,31452],{"class":87},[34,150686,150687],{"class":149}," withdraw",[34,150689,150636],{"class":40},[34,150691,150692,150694,150696,150698,150700],{"class":36,"line":2301},[34,150693,3150],{"class":87},[34,150695,150643],{"class":40},[34,150697,2247],{"class":87},[34,150699,4746],{"class":63},[34,150701,4392],{"class":40},[34,150703,150704,150706,150708,150711],{"class":36,"line":2307},[34,150705,35301],{"class":63},[34,150707,801],{"class":40},[34,150709,150710],{"class":156},"\"取款金额必须大于0\"",[34,150712,807],{"class":40},[34,150714,150715],{"class":36,"line":2328},[34,150716,150665],{"class":87},[34,150718,150719,150721,150723,150725,150727],{"class":36,"line":2333},[34,150720,3150],{"class":87},[34,150722,150643],{"class":40},[34,150724,1753],{"class":87},[34,150726,39524],{"class":63},[34,150728,150729],{"class":40},".__balance:\n",[34,150731,150732,150734,150736,150739],{"class":36,"line":2347},[34,150733,35301],{"class":63},[34,150735,801],{"class":40},[34,150737,150738],{"class":156},"\"余额不足\"",[34,150740,807],{"class":40},[34,150742,150743],{"class":36,"line":2352},[34,150744,150665],{"class":87},[34,150746,150747,150749,150751,150754],{"class":36,"line":2381},[34,150748,31496],{"class":63},[34,150750,150595],{"class":40},[34,150752,150753],{"class":87},"-=",[34,150755,150676],{"class":40},[34,150757,150758],{"class":36,"line":2386},[34,150759,3053],{"emptyLinePlaceholder":726},[34,150761,150762],{"class":36,"line":2403},[34,150763,3053],{"emptyLinePlaceholder":726},[34,150765,150766,150769,150771,150774,150776,150778,150780],{"class":36,"line":2408},[34,150767,150768],{"class":40},"account ",[34,150770,153],{"class":87},[34,150772,150773],{"class":40}," Account(",[34,150775,150389],{"class":156},[34,150777,13088],{"class":40},[34,150779,7063],{"class":63},[34,150781,807],{"class":40},[34,150783,150784,150787,150789],{"class":36,"line":2413},[34,150785,150786],{"class":40},"account.deposit(",[34,150788,2376],{"class":63},[34,150790,807],{"class":40},[34,150792,150793,150796,150798],{"class":36,"line":2418},[34,150794,150795],{"class":40},"account.withdraw(",[34,150797,1106],{"class":63},[34,150799,807],{"class":40},[34,150801,150802,150804],{"class":36,"line":2432},[34,150803,31066],{"class":63},[34,150805,150806],{"class":40},"(account.get_balance())\n",[108,150808,150809],{},"封装的意义是避免外部随意修改内部状态。",[14,150811,150813],{"id":150812},"_118-继承","11.8 继承",[108,150815,150816],{},"继承可以让子类复用父类的属性和方法。",[24,150818,150820],{"className":31029,"code":150819,"language":31031,"meta":29,"style":29},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[31,150821,150822,150831,150840,150851,150855,150859,150873,150882,150893,150897,150901,150911,150916],{"__ignoreMap":29},[34,150823,150824,150826,150829],{"class":36,"line":37},[34,150825,15347],{"class":87},[34,150827,150828],{"class":149}," Animal",[34,150830,4392],{"class":40},[34,150832,150833,150835,150838],{"class":36,"line":51},[34,150834,31452],{"class":87},[34,150836,150837],{"class":149}," eat",[34,150839,31458],{"class":40},[34,150841,150842,150844,150846,150849],{"class":36,"line":60},[34,150843,33102],{"class":63},[34,150845,801],{"class":40},[34,150847,150848],{"class":156},"\"吃东西\"",[34,150850,807],{"class":40},[34,150852,150853],{"class":36,"line":76},[34,150854,3053],{"emptyLinePlaceholder":726},[34,150856,150857],{"class":36,"line":93},[34,150858,3053],{"emptyLinePlaceholder":726},[34,150860,150861,150863,150866,150868,150871],{"class":36,"line":99},[34,150862,15347],{"class":87},[34,150864,150865],{"class":149}," Dog",[34,150867,801],{"class":40},[34,150869,150870],{"class":149},"Animal",[34,150872,31437],{"class":40},[34,150874,150875,150877,150880],{"class":36,"line":353},[34,150876,31452],{"class":87},[34,150878,150879],{"class":149}," bark",[34,150881,31458],{"class":40},[34,150883,150884,150886,150888,150891],{"class":36,"line":359},[34,150885,33102],{"class":63},[34,150887,801],{"class":40},[34,150889,150890],{"class":156},"\"汪汪\"",[34,150892,807],{"class":40},[34,150894,150895],{"class":36,"line":579},[34,150896,3053],{"emptyLinePlaceholder":726},[34,150898,150899],{"class":36,"line":589},[34,150900,3053],{"emptyLinePlaceholder":726},[34,150902,150903,150906,150908],{"class":36,"line":601},[34,150904,150905],{"class":40},"dog ",[34,150907,153],{"class":87},[34,150909,150910],{"class":40}," Dog()\n",[34,150912,150913],{"class":36,"line":613},[34,150914,150915],{"class":40},"dog.eat()\n",[34,150917,150918],{"class":36,"line":618},[34,150919,150920],{"class":40},"dog.bark()\n",[108,150922,150923],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150925,150927],{"id":150926},"_119-方法重写","11.9 方法重写",[24,150929,150931],{"className":31029,"code":150930,"language":31031,"meta":29,"style":29},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[31,150932,150933,150941,150950,150961,150965,150969,150981,150989,150999,151003,151007,151020,151028,151039,151043,151047,151055,151065,151069,151074],{"__ignoreMap":29},[34,150934,150935,150937,150939],{"class":36,"line":37},[34,150936,15347],{"class":87},[34,150938,150828],{"class":149},[34,150940,4392],{"class":40},[34,150942,150943,150945,150948],{"class":36,"line":51},[34,150944,31452],{"class":87},[34,150946,150947],{"class":149}," speak",[34,150949,31458],{"class":40},[34,150951,150952,150954,150956,150959],{"class":36,"line":60},[34,150953,33102],{"class":63},[34,150955,801],{"class":40},[34,150957,150958],{"class":156},"\"动物叫\"",[34,150960,807],{"class":40},[34,150962,150963],{"class":36,"line":76},[34,150964,3053],{"emptyLinePlaceholder":726},[34,150966,150967],{"class":36,"line":93},[34,150968,3053],{"emptyLinePlaceholder":726},[34,150970,150971,150973,150975,150977,150979],{"class":36,"line":99},[34,150972,15347],{"class":87},[34,150974,150865],{"class":149},[34,150976,801],{"class":40},[34,150978,150870],{"class":149},[34,150980,31437],{"class":40},[34,150982,150983,150985,150987],{"class":36,"line":353},[34,150984,31452],{"class":87},[34,150986,150947],{"class":149},[34,150988,31458],{"class":40},[34,150990,150991,150993,150995,150997],{"class":36,"line":359},[34,150992,33102],{"class":63},[34,150994,801],{"class":40},[34,150996,150890],{"class":156},[34,150998,807],{"class":40},[34,151000,151001],{"class":36,"line":579},[34,151002,3053],{"emptyLinePlaceholder":726},[34,151004,151005],{"class":36,"line":589},[34,151006,3053],{"emptyLinePlaceholder":726},[34,151008,151009,151011,151014,151016,151018],{"class":36,"line":601},[34,151010,15347],{"class":87},[34,151012,151013],{"class":149}," Cat",[34,151015,801],{"class":40},[34,151017,150870],{"class":149},[34,151019,31437],{"class":40},[34,151021,151022,151024,151026],{"class":36,"line":613},[34,151023,31452],{"class":87},[34,151025,150947],{"class":149},[34,151027,31458],{"class":40},[34,151029,151030,151032,151034,151037],{"class":36,"line":618},[34,151031,33102],{"class":63},[34,151033,801],{"class":40},[34,151035,151036],{"class":156},"\"喵喵\"",[34,151038,807],{"class":40},[34,151040,151041],{"class":36,"line":628},[34,151042,3053],{"emptyLinePlaceholder":726},[34,151044,151045],{"class":36,"line":640},[34,151046,3053],{"emptyLinePlaceholder":726},[34,151048,151049,151051,151053],{"class":36,"line":2301},[34,151050,150905],{"class":40},[34,151052,153],{"class":87},[34,151054,150910],{"class":40},[34,151056,151057,151060,151062],{"class":36,"line":2307},[34,151058,151059],{"class":40},"cat ",[34,151061,153],{"class":87},[34,151063,151064],{"class":40}," Cat()\n",[34,151066,151067],{"class":36,"line":2328},[34,151068,3053],{"emptyLinePlaceholder":726},[34,151070,151071],{"class":36,"line":2333},[34,151072,151073],{"class":40},"dog.speak()\n",[34,151075,151076],{"class":36,"line":2347},[34,151077,151078],{"class":40},"cat.speak()\n",[14,151080,151082],{"id":151081},"_1110-super","11.10 super",[108,151084,151085,151086,151089],{},"子类可以通过 ",[31,151087,151088],{},"super()"," 调用父类方法。",[24,151091,151093],{"className":31029,"code":151092,"language":31031,"meta":29,"style":29},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[31,151094,151095,151103,151112,151122,151126,151130,151142,151151,151162,151172,151176,151180,151196],{"__ignoreMap":29},[34,151096,151097,151099,151101],{"class":36,"line":37},[34,151098,15347],{"class":87},[34,151100,16222],{"class":149},[34,151102,4392],{"class":40},[34,151104,151105,151107,151109],{"class":36,"line":51},[34,151106,31452],{"class":87},[34,151108,31455],{"class":63},[34,151110,151111],{"class":40},"(self, name):\n",[34,151113,151114,151116,151118,151120],{"class":36,"line":60},[34,151115,31496],{"class":63},[34,151117,150291],{"class":40},[34,151119,153],{"class":87},[34,151121,150296],{"class":40},[34,151123,151124],{"class":36,"line":76},[34,151125,3053],{"emptyLinePlaceholder":726},[34,151127,151128],{"class":36,"line":93},[34,151129,3053],{"emptyLinePlaceholder":726},[34,151131,151132,151134,151136,151138,151140],{"class":36,"line":99},[34,151133,15347],{"class":87},[34,151135,8551],{"class":149},[34,151137,801],{"class":40},[34,151139,19698],{"class":149},[34,151141,31437],{"class":40},[34,151143,151144,151146,151148],{"class":36,"line":353},[34,151145,31452],{"class":87},[34,151147,31455],{"class":63},[34,151149,151150],{"class":40},"(self, name, score):\n",[34,151152,151153,151155,151157,151159],{"class":36,"line":359},[34,151154,31468],{"class":63},[34,151156,17913],{"class":40},[34,151158,31480],{"class":63},[34,151160,151161],{"class":40},"(name)\n",[34,151163,151164,151166,151168,151170],{"class":36,"line":579},[34,151165,31496],{"class":63},[34,151167,150315],{"class":40},[34,151169,153],{"class":87},[34,151171,2238],{"class":40},[34,151173,151174],{"class":36,"line":589},[34,151175,3053],{"emptyLinePlaceholder":726},[34,151177,151178],{"class":36,"line":601},[34,151179,3053],{"emptyLinePlaceholder":726},[34,151181,151182,151184,151186,151188,151190,151192,151194],{"class":36,"line":613},[34,151183,149982],{"class":40},[34,151185,153],{"class":87},[34,151187,150386],{"class":40},[34,151189,150389],{"class":156},[34,151191,13088],{"class":40},[34,151193,1782],{"class":63},[34,151195,807],{"class":40},[34,151197,151198,151200],{"class":36,"line":618},[34,151199,31066],{"class":63},[34,151201,151202],{"class":40},"(student.name, student.score)\n",[14,151204,151206],{"id":151205},"_1111-多态","11.11 多态",[108,151208,151209],{},"多态指不同对象响应同一个方法，表现出不同结果。",[24,151211,151213],{"className":31029,"code":151212,"language":31031,"meta":29,"style":29},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[31,151214,151215,151223,151231,151241,151245,151249,151257,151265,151275,151279,151283,151293,151298,151302,151306,151311],{"__ignoreMap":29},[34,151216,151217,151219,151221],{"class":36,"line":37},[34,151218,15347],{"class":87},[34,151220,150865],{"class":149},[34,151222,4392],{"class":40},[34,151224,151225,151227,151229],{"class":36,"line":51},[34,151226,31452],{"class":87},[34,151228,150947],{"class":149},[34,151230,31458],{"class":40},[34,151232,151233,151235,151237,151239],{"class":36,"line":60},[34,151234,33102],{"class":63},[34,151236,801],{"class":40},[34,151238,150890],{"class":156},[34,151240,807],{"class":40},[34,151242,151243],{"class":36,"line":76},[34,151244,3053],{"emptyLinePlaceholder":726},[34,151246,151247],{"class":36,"line":93},[34,151248,3053],{"emptyLinePlaceholder":726},[34,151250,151251,151253,151255],{"class":36,"line":99},[34,151252,15347],{"class":87},[34,151254,151013],{"class":149},[34,151256,4392],{"class":40},[34,151258,151259,151261,151263],{"class":36,"line":353},[34,151260,31452],{"class":87},[34,151262,150947],{"class":149},[34,151264,31458],{"class":40},[34,151266,151267,151269,151271,151273],{"class":36,"line":359},[34,151268,33102],{"class":63},[34,151270,801],{"class":40},[34,151272,151036],{"class":156},[34,151274,807],{"class":40},[34,151276,151277],{"class":36,"line":579},[34,151278,3053],{"emptyLinePlaceholder":726},[34,151280,151281],{"class":36,"line":589},[34,151282,3053],{"emptyLinePlaceholder":726},[34,151284,151285,151287,151290],{"class":36,"line":601},[34,151286,32598],{"class":87},[34,151288,151289],{"class":149}," make_sound",[34,151291,151292],{"class":40},"(animal):\n",[34,151294,151295],{"class":36,"line":613},[34,151296,151297],{"class":40},"    animal.speak()\n",[34,151299,151300],{"class":36,"line":618},[34,151301,3053],{"emptyLinePlaceholder":726},[34,151303,151304],{"class":36,"line":628},[34,151305,3053],{"emptyLinePlaceholder":726},[34,151307,151308],{"class":36,"line":640},[34,151309,151310],{"class":40},"make_sound(Dog())\n",[34,151312,151313],{"class":36,"line":2301},[34,151314,151315],{"class":40},"make_sound(Cat())\n",[108,151317,151318],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151320,151322],{"id":151321},"_1112-类属性和实例属性","11.12 类属性和实例属性",[108,151324,151325],{},"实例属性属于对象：",[24,151327,151329],{"className":31029,"code":151328,"language":31031,"meta":29,"style":29},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[31,151330,151331,151339,151347],{"__ignoreMap":29},[34,151332,151333,151335,151337],{"class":36,"line":37},[34,151334,15347],{"class":87},[34,151336,8551],{"class":149},[34,151338,4392],{"class":40},[34,151340,151341,151343,151345],{"class":36,"line":51},[34,151342,31452],{"class":87},[34,151344,31455],{"class":63},[34,151346,151111],{"class":40},[34,151348,151349,151351,151353,151355],{"class":36,"line":60},[34,151350,31496],{"class":63},[34,151352,150291],{"class":40},[34,151354,153],{"class":87},[34,151356,150296],{"class":40},[108,151358,151359],{},"类属性属于类，所有对象共享：",[24,151361,151363],{"className":31029,"code":151362,"language":31031,"meta":29,"style":29},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[31,151364,151365,151373,151383,151387,151395,151405,151409,151413,151426,151440,151444,151451,151458],{"__ignoreMap":29},[34,151366,151367,151369,151371],{"class":36,"line":37},[34,151368,15347],{"class":87},[34,151370,8551],{"class":149},[34,151372,4392],{"class":40},[34,151374,151375,151378,151380],{"class":36,"line":51},[34,151376,151377],{"class":40},"    school ",[34,151379,153],{"class":87},[34,151381,151382],{"class":156}," \"黑马学校\"\n",[34,151384,151385],{"class":36,"line":60},[34,151386,3053],{"emptyLinePlaceholder":726},[34,151388,151389,151391,151393],{"class":36,"line":76},[34,151390,31452],{"class":87},[34,151392,31455],{"class":63},[34,151394,151111],{"class":40},[34,151396,151397,151399,151401,151403],{"class":36,"line":93},[34,151398,31496],{"class":63},[34,151400,150291],{"class":40},[34,151402,153],{"class":87},[34,151404,150296],{"class":40},[34,151406,151407],{"class":36,"line":99},[34,151408,3053],{"emptyLinePlaceholder":726},[34,151410,151411],{"class":36,"line":353},[34,151412,3053],{"emptyLinePlaceholder":726},[34,151414,151415,151418,151420,151422,151424],{"class":36,"line":359},[34,151416,151417],{"class":40},"s1 ",[34,151419,153],{"class":87},[34,151421,150386],{"class":40},[34,151423,150389],{"class":156},[34,151425,807],{"class":40},[34,151427,151428,151431,151433,151435,151438],{"class":36,"line":579},[34,151429,151430],{"class":40},"s2 ",[34,151432,153],{"class":87},[34,151434,150386],{"class":40},[34,151436,151437],{"class":156},"\"小红\"",[34,151439,807],{"class":40},[34,151441,151442],{"class":36,"line":589},[34,151443,3053],{"emptyLinePlaceholder":726},[34,151445,151446,151448],{"class":36,"line":601},[34,151447,31066],{"class":63},[34,151449,151450],{"class":40},"(s1.school)\n",[34,151452,151453,151455],{"class":36,"line":613},[34,151454,31066],{"class":63},[34,151456,151457],{"class":40},"(s2.school)\n",[34,151459,151460,151462],{"class":36,"line":618},[34,151461,31066],{"class":63},[34,151463,151464],{"class":40},"(Student.school)\n",[108,151466,151467],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151469,151471],{"id":151470},"_1113-类方法和静态方法","11.13 类方法和静态方法",[19,151473,151475],{"id":151474},"_11131-类方法","11.13.1 类方法",[108,151477,151478,151479,151482,151483,29036],{},"类方法使用 ",[31,151480,151481],{},"@classmethod","，第一个参数通常是 ",[31,151484,151485],{},"cls",[24,151487,151489],{"className":31029,"code":151488,"language":31031,"meta":29,"style":29},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[31,151490,151491,151499,151507,151511,151519,151529,151539,151543,151547],{"__ignoreMap":29},[34,151492,151493,151495,151497],{"class":36,"line":37},[34,151494,15347],{"class":87},[34,151496,8551],{"class":149},[34,151498,4392],{"class":40},[34,151500,151501,151503,151505],{"class":36,"line":51},[34,151502,151377],{"class":40},[34,151504,153],{"class":87},[34,151506,151382],{"class":156},[34,151508,151509],{"class":36,"line":60},[34,151510,3053],{"emptyLinePlaceholder":726},[34,151512,151513,151516],{"class":36,"line":76},[34,151514,151515],{"class":149},"    @",[34,151517,151518],{"class":63},"classmethod\n",[34,151520,151521,151523,151526],{"class":36,"line":93},[34,151522,31452],{"class":87},[34,151524,151525],{"class":149}," get_school",[34,151527,151528],{"class":40},"(cls):\n",[34,151530,151531,151533,151536],{"class":36,"line":99},[34,151532,15405],{"class":87},[34,151534,151535],{"class":63}," cls",[34,151537,151538],{"class":40},".school\n",[34,151540,151541],{"class":36,"line":353},[34,151542,3053],{"emptyLinePlaceholder":726},[34,151544,151545],{"class":36,"line":359},[34,151546,3053],{"emptyLinePlaceholder":726},[34,151548,151549,151551],{"class":36,"line":579},[34,151550,31066],{"class":63},[34,151552,151553],{"class":40},"(Student.get_school())\n",[19,151555,151557],{"id":151556},"_11132-静态方法","11.13.2 静态方法",[108,151559,151560,151561,151564],{},"静态方法使用 ",[31,151562,151563],{},"@staticmethod","，不需要访问实例和类。",[24,151566,151568],{"className":31029,"code":151567,"language":31031,"meta":29,"style":29},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[31,151569,151570,151579,151586,151595,151606,151610,151614],{"__ignoreMap":29},[34,151571,151572,151574,151577],{"class":36,"line":37},[34,151573,15347],{"class":87},[34,151575,151576],{"class":149}," MathUtils",[34,151578,4392],{"class":40},[34,151580,151581,151583],{"class":36,"line":51},[34,151582,151515],{"class":149},[34,151584,151585],{"class":63},"staticmethod\n",[34,151587,151588,151590,151592],{"class":36,"line":60},[34,151589,31452],{"class":87},[34,151591,5862],{"class":149},[34,151593,151594],{"class":40},"(a, b):\n",[34,151596,151597,151599,151601,151603],{"class":36,"line":76},[34,151598,15405],{"class":87},[34,151600,11522],{"class":40},[34,151602,1276],{"class":87},[34,151604,151605],{"class":40}," b\n",[34,151607,151608],{"class":36,"line":93},[34,151609,3053],{"emptyLinePlaceholder":726},[34,151611,151612],{"class":36,"line":99},[34,151613,3053],{"emptyLinePlaceholder":726},[34,151615,151616,151618,151621,151623,151625,151627],{"class":36,"line":353},[34,151617,31066],{"class":63},[34,151619,151620],{"class":40},"(MathUtils.add(",[34,151622,1013],{"class":63},[34,151624,13088],{"class":40},[34,151626,875],{"class":63},[34,151628,31148],{"class":40},[108,151630,151631],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151633,151635],{"id":151634},"_1114-dataclass","11.14 dataclass",[108,151637,151638,151641],{},[31,151639,151640],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[24,151643,151645],{"className":31029,"code":151644,"language":31031,"meta":29,"style":29},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[31,151646,151647,151659,151663,151667,151672,151680,151688,151696,151704,151708,151712,151732],{"__ignoreMap":29},[34,151648,151649,151651,151654,151656],{"class":36,"line":37},[34,151650,31388],{"class":87},[34,151652,151653],{"class":40}," dataclasses ",[34,151655,31043],{"class":87},[34,151657,151658],{"class":40}," dataclass\n",[34,151660,151661],{"class":36,"line":51},[34,151662,3053],{"emptyLinePlaceholder":726},[34,151664,151665],{"class":36,"line":60},[34,151666,3053],{"emptyLinePlaceholder":726},[34,151668,151669],{"class":36,"line":76},[34,151670,151671],{"class":149},"@dataclass\n",[34,151673,151674,151676,151678],{"class":36,"line":93},[34,151675,15347],{"class":87},[34,151677,8551],{"class":149},[34,151679,4392],{"class":40},[34,151681,151682,151685],{"class":36,"line":99},[34,151683,151684],{"class":40},"    name: ",[34,151686,151687],{"class":63},"str\n",[34,151689,151690,151693],{"class":36,"line":353},[34,151691,151692],{"class":40},"    age: ",[34,151694,151695],{"class":63},"int\n",[34,151697,151698,151701],{"class":36,"line":359},[34,151699,151700],{"class":40},"    score: ",[34,151702,151703],{"class":63},"float\n",[34,151705,151706],{"class":36,"line":579},[34,151707,3053],{"emptyLinePlaceholder":726},[34,151709,151710],{"class":36,"line":589},[34,151711,3053],{"emptyLinePlaceholder":726},[34,151713,151714,151716,151718,151720,151722,151724,151726,151728,151730],{"class":36,"line":601},[34,151715,149982],{"class":40},[34,151717,153],{"class":87},[34,151719,150386],{"class":40},[34,151721,150389],{"class":156},[34,151723,13088],{"class":40},[34,151725,1445],{"class":63},[34,151727,13088],{"class":40},[34,151729,1782],{"class":63},[34,151731,807],{"class":40},[34,151733,151734,151736],{"class":36,"line":613},[34,151735,31066],{"class":63},[34,151737,150543],{"class":40},[108,151739,151740,151741,1008,151743,151746],{},"它会自动生成 ",[31,151742,31480],{},[31,151744,151745],{},"__repr__"," 等方法。适合数据模型类。",[14,151748,151750],{"id":151749},"_1115-小案例学生类","11.15 小案例：学生类",[24,151752,151754],{"className":31029,"code":151753,"language":31031,"meta":29,"style":29},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[31,151755,151756,151764,151773,151785,151795,151805,151815,151819,151828,151841,151845,151854,151860,151872,151884,151896,151908,151912,151916,151922,151932,151941,151951,151959,151967,151976,151980,151984,151992,152028,152032,152036,152061,152068],{"__ignoreMap":29},[34,151757,151758,151760,151762],{"class":36,"line":37},[34,151759,15347],{"class":87},[34,151761,8551],{"class":149},[34,151763,4392],{"class":40},[34,151765,151766,151768,151770],{"class":36,"line":51},[34,151767,31452],{"class":87},[34,151769,31455],{"class":63},[34,151771,151772],{"class":40},"(self, student_id, name, age, score):\n",[34,151774,151775,151777,151780,151782],{"class":36,"line":60},[34,151776,31496],{"class":63},[34,151778,151779],{"class":40},".student_id ",[34,151781,153],{"class":87},[34,151783,151784],{"class":40}," student_id\n",[34,151786,151787,151789,151791,151793],{"class":36,"line":76},[34,151788,31496],{"class":63},[34,151790,150291],{"class":40},[34,151792,153],{"class":87},[34,151794,150296],{"class":40},[34,151796,151797,151799,151801,151803],{"class":36,"line":93},[34,151798,31496],{"class":63},[34,151800,150303],{"class":40},[34,151802,153],{"class":87},[34,151804,150308],{"class":40},[34,151806,151807,151809,151811,151813],{"class":36,"line":99},[34,151808,31496],{"class":63},[34,151810,150315],{"class":40},[34,151812,153],{"class":87},[34,151814,2238],{"class":40},[34,151816,151817],{"class":36,"line":353},[34,151818,3053],{"emptyLinePlaceholder":726},[34,151820,151821,151823,151826],{"class":36,"line":359},[34,151822,31452],{"class":87},[34,151824,151825],{"class":149}," is_passed",[34,151827,31458],{"class":40},[34,151829,151830,151832,151834,151836,151838],{"class":36,"line":579},[34,151831,15405],{"class":87},[34,151833,39524],{"class":63},[34,151835,150315],{"class":40},[34,151837,2364],{"class":87},[34,151839,151840],{"class":63}," 60\n",[34,151842,151843],{"class":36,"line":589},[34,151844,3053],{"emptyLinePlaceholder":726},[34,151846,151847,151849,151852],{"class":36,"line":601},[34,151848,31452],{"class":87},[34,151850,151851],{"class":149}," to_dict",[34,151853,31458],{"class":40},[34,151855,151856,151858],{"class":36,"line":613},[34,151857,15405],{"class":87},[34,151859,57],{"class":40},[34,151861,151862,151865,151867,151869],{"class":36,"line":618},[34,151863,151864],{"class":156},"            \"student_id\"",[34,151866,67],{"class":40},[34,151868,31474],{"class":63},[34,151870,151871],{"class":40},".student_id,\n",[34,151873,151874,151877,151879,151881],{"class":36,"line":628},[34,151875,151876],{"class":156},"            \"name\"",[34,151878,67],{"class":40},[34,151880,31474],{"class":63},[34,151882,151883],{"class":40},".name,\n",[34,151885,151886,151889,151891,151893],{"class":36,"line":640},[34,151887,151888],{"class":156},"            \"age\"",[34,151890,67],{"class":40},[34,151892,31474],{"class":63},[34,151894,151895],{"class":40},".age,\n",[34,151897,151898,151901,151903,151905],{"class":36,"line":2301},[34,151899,151900],{"class":156},"            \"score\"",[34,151902,67],{"class":40},[34,151904,31474],{"class":63},[34,151906,151907],{"class":40},".score,\n",[34,151909,151910],{"class":36,"line":2307},[34,151911,3182],{"class":40},[34,151913,151914],{"class":36,"line":2328},[34,151915,3053],{"emptyLinePlaceholder":726},[34,151917,151918,151920],{"class":36,"line":2333},[34,151919,151515],{"class":149},[34,151921,151518],{"class":63},[34,151923,151924,151926,151929],{"class":36,"line":2347},[34,151925,31452],{"class":87},[34,151927,151928],{"class":149}," from_dict",[34,151930,151931],{"class":40},"(cls, data):\n",[34,151933,151934,151936,151938],{"class":36,"line":2352},[34,151935,15405],{"class":87},[34,151937,151535],{"class":63},[34,151939,151940],{"class":40},"(\n",[34,151942,151943,151946,151949],{"class":36,"line":2381},[34,151944,151945],{"class":40},"            data[",[34,151947,151948],{"class":156},"\"student_id\"",[34,151950,88466],{"class":40},[34,151952,151953,151955,151957],{"class":36,"line":2386},[34,151954,151945],{"class":40},[34,151956,63317],{"class":156},[34,151958,88466],{"class":40},[34,151960,151961,151963,151965],{"class":36,"line":2403},[34,151962,151945],{"class":40},[34,151964,69759],{"class":156},[34,151966,88466],{"class":40},[34,151968,151969,151971,151974],{"class":36,"line":2408},[34,151970,151945],{"class":40},[34,151972,151973],{"class":156},"\"score\"",[34,151975,88466],{"class":40},[34,151977,151978],{"class":36,"line":2413},[34,151979,38777],{"class":40},[34,151981,151982],{"class":36,"line":2418},[34,151983,3053],{"emptyLinePlaceholder":726},[34,151985,151986,151988,151990],{"class":36,"line":2432},[34,151987,31452],{"class":87},[34,151989,150482],{"class":63},[34,151991,31458],{"class":40},[34,151993,151994,151996,151998,152000,152002,152005,152007,152010,152012,152014,152016,152018,152020,152022,152024,152026],{"class":36,"line":2437},[34,151995,15405],{"class":87},[34,151997,150491],{"class":87},[34,151999,1046],{"class":156},[34,152001,149953],{"class":63},[34,152003,152004],{"class":40},".student_id",[34,152006,1739],{"class":63},[34,152008,152009],{"class":63}," {self",[34,152011,80931],{"class":40},[34,152013,1739],{"class":63},[34,152015,152009],{"class":63},[34,152017,80943],{"class":40},[34,152019,1739],{"class":63},[34,152021,152009],{"class":63},[34,152023,150363],{"class":40},[34,152025,1739],{"class":63},[34,152027,25786],{"class":156},[34,152029,152030],{"class":36,"line":3230},[34,152031,3053],{"emptyLinePlaceholder":726},[34,152033,152034],{"class":36,"line":3244},[34,152035,3053],{"emptyLinePlaceholder":726},[34,152037,152038,152040,152042,152044,152047,152049,152051,152053,152055,152057,152059],{"class":36,"line":3252},[34,152039,149982],{"class":40},[34,152041,153],{"class":87},[34,152043,150386],{"class":40},[34,152045,152046],{"class":156},"\"001\"",[34,152048,13088],{"class":40},[34,152050,150389],{"class":156},[34,152052,13088],{"class":40},[34,152054,1445],{"class":63},[34,152056,13088],{"class":40},[34,152058,1782],{"class":63},[34,152060,807],{"class":40},[34,152062,152063,152065],{"class":36,"line":3257},[34,152064,31066],{"class":63},[34,152066,152067],{"class":40},"(student.is_passed())\n",[34,152069,152070,152072],{"class":36,"line":3263},[34,152071,31066],{"class":63},[34,152073,152074],{"class":40},"(student.to_dict())\n",[108,152076,152077,101648,152080,152083],{},[31,152078,152079],{},"to_dict()",[31,152081,152082],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152085,152087],{"id":152086},"_1116-易错点","11.16 易错点",[752,152089,152090,152096,152102,152107,152110,152113],{},[755,152091,152092,152093,29036],{},"类名推荐使用大驼峰，如 ",[31,152094,152095],{},"StudentManager",[755,152097,152098,152099,152101],{},"方法第一个参数必须写 ",[31,152100,31474],{},"，调用时不用传。",[755,152103,152104,152106],{},[31,152105,31480],{}," 不是普通方法，它在创建对象时自动执行。",[755,152108,152109],{},"私有属性不是绝对安全，只是约定和名称改写。",[755,152111,152112],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[755,152114,152115],{},"类中方法太多时，说明职责可能过重。",[14,152117,152119],{"id":152118},"_1117-本章练习","11.17 本章练习",[752,152121,152122,152128,152134,152139,152152],{},[755,152123,152124,152125,152127],{},"定义 ",[31,152126,150069],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[755,152129,152124,152130,152133],{},[31,152131,152132],{},"Account"," 类，实现存款、取款、查询余额。",[755,152135,152124,152136,152138],{},[31,152137,17878],{}," 类，计算圆的周长和面积。",[755,152140,152124,152141,1008,152144,152147,152148,152151],{},[31,152142,152143],{},"Dog",[31,152145,152146],{},"Cat"," 类，并用同一个函数调用它们的 ",[31,152149,152150],{},"speak()"," 方法。",[755,152153,104996,152154,152156,152157,29036],{},[31,152155,151640],{}," 定义一个商品类 ",[31,152158,152159],{},"Product",[45,152161,152162],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":152164},[152165,152166,152167,152168,152169,152170,152172,152173,152174,152175,152176,152177,152178,152182,152183,152184,152185],{"id":149833,"depth":51,"text":149834},{"id":150016,"depth":51,"text":150017},{"id":150080,"depth":51,"text":150081},{"id":150157,"depth":51,"text":150158},{"id":150256,"depth":51,"text":150257},{"id":150420,"depth":51,"text":152171},"11.6 str",{"id":150546,"depth":51,"text":150547},{"id":150812,"depth":51,"text":150813},{"id":150926,"depth":51,"text":150927},{"id":151081,"depth":51,"text":151082},{"id":151205,"depth":51,"text":151206},{"id":151321,"depth":51,"text":151322},{"id":151470,"depth":51,"text":151471,"children":152179},[152180,152181],{"id":151474,"depth":60,"text":151475},{"id":151556,"depth":60,"text":151557},{"id":151634,"depth":51,"text":151635},{"id":151749,"depth":51,"text":151750},{"id":152086,"depth":51,"text":152087},{"id":152118,"depth":51,"text":152119},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149825,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152192,"title":152193,"body":152194,"description":723,"extension":724,"meta":155507,"navigation":726,"path":155508,"seo":155509,"stem":155510,"__hash__":155511},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152195,"toc":155483},[152196,152199,152203,152206,152209,152238,152241,152249,152253,152257,152260,152283,152286,152292,152296,153742,153745,153766,153770,153773,153785,153788,153972,153975,154101,154104,154108,154112,154248,154252,154338,154342,154424,154428,154465,154469,154658,154662,154665,154895,154899,154902,155083,155086,155090,155093,155099,155102,155128,155132,155135,155149,155152,155177,155180,155194,155197,155214,155217,155234,155237,155254,155258,155284,155288,155311,155315,155318,155320,155326,155328,155349,155352,155358,155364,155368,155371,155447,155450,155454,155480],[10,152197,152193],{"id":152198},"_12-综合案例与复习路线",[14,152200,152202],{"id":152201},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[108,152204,152205],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[108,152207,152208],{},"一个合格的入门综合项目最好覆盖：",[752,152210,152211,152214,152217,152220,152223,152226,152229,152232,152235],{},[755,152212,152213],{},"输入输出。",[755,152215,152216],{},"判断和循环。",[755,152218,152219],{},"函数拆分。",[755,152221,152222],{},"列表、字典等容器。",[755,152224,152225],{},"文件持久化。",[755,152227,152228],{},"异常处理。",[755,152230,152231],{},"模块拆分。",[755,152233,152234],{},"可选：面向对象。",[755,152236,152237],{},"可选：数据可视化。",[108,152239,152240],{},"本章整理两个方向：",[752,152242,152243,152246],{},[755,152244,152245],{},"学生管理系统。",[755,152247,152248],{},"销售数据统计和可视化。",[14,152250,152252],{"id":152251},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[19,152254,152256],{"id":152255},"_1221-需求","12.2.1 需求",[108,152258,152259],{},"实现一个命令行学生管理系统：",[752,152261,152262,152265,152268,152271,152274,152277,152280],{},[755,152263,152264],{},"添加学生。",[755,152266,152267],{},"删除学生。",[755,152269,152270],{},"修改学生。",[755,152272,152273],{},"查询学生。",[755,152275,152276],{},"显示所有学生。",[755,152278,152279],{},"保存到 JSON 文件。",[755,152281,152282],{},"程序启动时自动读取 JSON 文件。",[108,152284,152285],{},"学生字段：",[24,152287,152290],{"className":152288,"code":152289,"language":5840,"meta":29},[5838],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[31,152291,152289],{"__ignoreMap":29},[14,152293,152295],{"id":152294},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[24,152297,152299],{"className":31029,"code":152298,"language":31031,"meta":29,"style":29},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[31,152300,152301,152307,152317,152321,152335,152339,152343,152352,152364,152370,152374,152380,152411,152421,152428,152439,152445,152449,152453,152463,152494,152520,152524,152528,152537,152548,152559,152570,152581,152592,152603,152614,152618,152622,152632,152644,152660,152667,152674,152678,152682,152692,152700,152707,152720,152730,152741,152745,152749,152758,152766,152772,152784,152792,152803,152807,152811,152820,152836,152840,152847,152858,152863,152867,152883,152898,152913,152917,152922,152930,152938,152946,152954,152958,152963,152974,152978,152982,152991,153006,153016,153020,153032,153043,153047,153051,153056,153060,153071,153075,153079,153088,153103,153111,153115,153127,153137,153141,153145,153160,153173,153186,153190,153203,153215,153227,153231,153235,153246,153250,153254,153263,153278,153286,153290,153302,153312,153316,153320,153325,153329,153333,153343,153349,153371,153390,153409,153428,153433,153437,153441,153450,153458,153469,153473,153477,153503,153513,153518,153522,153526,153534,153544,153548,153556,153561,153577,153581,153595,153600,153614,153619,153632,153637,153650,153655,153668,153673,153686,153697,153701,153707,153718,153722,153726,153738],{"__ignoreMap":29},[34,152302,152303,152305],{"class":36,"line":37},[34,152304,31043],{"class":87},[34,152306,147592],{"class":40},[34,152308,152309,152311,152313,152315],{"class":36,"line":51},[34,152310,31388],{"class":87},[34,152312,108941],{"class":40},[34,152314,31043],{"class":87},[34,152316,108946],{"class":40},[34,152318,152319],{"class":36,"line":60},[34,152320,3053],{"emptyLinePlaceholder":726},[34,152322,152323,152326,152328,152330,152333],{"class":36,"line":76},[34,152324,152325],{"class":63},"DATA_FILE",[34,152327,14217],{"class":87},[34,152329,109175],{"class":40},[34,152331,152332],{"class":156},"\"students.json\"",[34,152334,807],{"class":40},[34,152336,152337],{"class":36,"line":93},[34,152338,3053],{"emptyLinePlaceholder":726},[34,152340,152341],{"class":36,"line":99},[34,152342,3053],{"emptyLinePlaceholder":726},[34,152344,152345,152347,152350],{"class":36,"line":353},[34,152346,32598],{"class":87},[34,152348,152349],{"class":149}," load_students",[34,152351,32604],{"class":40},[34,152353,152354,152356,152358,152361],{"class":36,"line":359},[34,152355,3754],{"class":87},[34,152357,39581],{"class":87},[34,152359,152360],{"class":63}," DATA_FILE",[34,152362,152363],{"class":40},".exists():\n",[34,152365,152366,152368],{"class":36,"line":579},[34,152367,15405],{"class":87},[34,152369,52484],{"class":40},[34,152371,152372],{"class":36,"line":589},[34,152373,3053],{"emptyLinePlaceholder":726},[34,152375,152376,152378],{"class":36,"line":601},[34,152377,126414],{"class":87},[34,152379,4392],{"class":40},[34,152381,152382,152385,152387,152389,152391,152393,152395,152397,152399,152401,152403,152405,152407,152409],{"class":36,"line":613},[34,152383,152384],{"class":87},"        with",[34,152386,147292],{"class":63},[34,152388,801],{"class":40},[34,152390,152325],{"class":63},[34,152392,13088],{"class":40},[34,152394,147302],{"class":156},[34,152396,13088],{"class":40},[34,152398,147307],{"class":5869},[34,152400,153],{"class":87},[34,152402,147312],{"class":156},[34,152404,14367],{"class":40},[34,152406,32034],{"class":87},[34,152408,148654],{"class":5869},[34,152410,4392],{"class":40},[34,152412,152413,152415,152417,152419],{"class":36,"line":618},[34,152414,16384],{"class":87},[34,152416,148665],{"class":40},[34,152418,46005],{"class":5869},[34,152420,807],{"class":40},[34,152422,152423,152425],{"class":36,"line":628},[34,152424,126442],{"class":87},[34,152426,152427],{"class":40}," json.JSONDecodeError:\n",[34,152429,152430,152432,152434,152437],{"class":36,"line":640},[34,152431,33102],{"class":63},[34,152433,801],{"class":40},[34,152435,152436],{"class":156},"\"数据文件格式错误，已使用空数据启动\"",[34,152438,807],{"class":40},[34,152440,152441,152443],{"class":36,"line":2301},[34,152442,15405],{"class":87},[34,152444,52484],{"class":40},[34,152446,152447],{"class":36,"line":2307},[34,152448,3053],{"emptyLinePlaceholder":726},[34,152450,152451],{"class":36,"line":2328},[34,152452,3053],{"emptyLinePlaceholder":726},[34,152454,152455,152457,152460],{"class":36,"line":2333},[34,152456,32598],{"class":87},[34,152458,152459],{"class":149}," save_students",[34,152461,152462],{"class":40},"(students):\n",[34,152464,152465,152467,152469,152471,152473,152475,152478,152480,152482,152484,152486,152488,152490,152492],{"class":36,"line":2347},[34,152466,34829],{"class":87},[34,152468,147292],{"class":63},[34,152470,801],{"class":40},[34,152472,152325],{"class":63},[34,152474,13088],{"class":40},[34,152476,152477],{"class":156},"\"w\"",[34,152479,13088],{"class":40},[34,152481,147307],{"class":5869},[34,152483,153],{"class":87},[34,152485,147312],{"class":156},[34,152487,14367],{"class":40},[34,152489,32034],{"class":87},[34,152491,148654],{"class":5869},[34,152493,4392],{"class":40},[34,152495,152496,152499,152501,152503,152505,152507,152509,152511,152514,152516,152518],{"class":36,"line":2352},[34,152497,152498],{"class":40},"        json.dump(students, ",[34,152500,46005],{"class":5869},[34,152502,13088],{"class":40},[34,152504,147638],{"class":5869},[34,152506,153],{"class":87},[34,152508,34638],{"class":63},[34,152510,13088],{"class":40},[34,152512,152513],{"class":5869},"indent",[34,152515,153],{"class":87},[34,152517,875],{"class":63},[34,152519,807],{"class":40},[34,152521,152522],{"class":36,"line":2381},[34,152523,3053],{"emptyLinePlaceholder":726},[34,152525,152526],{"class":36,"line":2386},[34,152527,3053],{"emptyLinePlaceholder":726},[34,152529,152530,152532,152535],{"class":36,"line":2403},[34,152531,32598],{"class":87},[34,152533,152534],{"class":149}," show_menu",[34,152536,32604],{"class":40},[34,152538,152539,152541,152543,152546],{"class":36,"line":2408},[34,152540,31950],{"class":63},[34,152542,801],{"class":40},[34,152544,152545],{"class":156},"\"====== 学生管理系统 ======\"",[34,152547,807],{"class":40},[34,152549,152550,152552,152554,152557],{"class":36,"line":2413},[34,152551,31950],{"class":63},[34,152553,801],{"class":40},[34,152555,152556],{"class":156},"\"1. 添加学生\"",[34,152558,807],{"class":40},[34,152560,152561,152563,152565,152568],{"class":36,"line":2418},[34,152562,31950],{"class":63},[34,152564,801],{"class":40},[34,152566,152567],{"class":156},"\"2. 删除学生\"",[34,152569,807],{"class":40},[34,152571,152572,152574,152576,152579],{"class":36,"line":2432},[34,152573,31950],{"class":63},[34,152575,801],{"class":40},[34,152577,152578],{"class":156},"\"3. 修改学生\"",[34,152580,807],{"class":40},[34,152582,152583,152585,152587,152590],{"class":36,"line":2437},[34,152584,31950],{"class":63},[34,152586,801],{"class":40},[34,152588,152589],{"class":156},"\"4. 查询学生\"",[34,152591,807],{"class":40},[34,152593,152594,152596,152598,152601],{"class":36,"line":3230},[34,152595,31950],{"class":63},[34,152597,801],{"class":40},[34,152599,152600],{"class":156},"\"5. 显示所有学生\"",[34,152602,807],{"class":40},[34,152604,152605,152607,152609,152612],{"class":36,"line":3244},[34,152606,31950],{"class":63},[34,152608,801],{"class":40},[34,152610,152611],{"class":156},"\"0. 退出系统\"",[34,152613,807],{"class":40},[34,152615,152616],{"class":36,"line":3252},[34,152617,3053],{"emptyLinePlaceholder":726},[34,152619,152620],{"class":36,"line":3257},[34,152621,3053],{"emptyLinePlaceholder":726},[34,152623,152624,152626,152629],{"class":36,"line":3263},[34,152625,32598],{"class":87},[34,152627,152628],{"class":149}," find_student",[34,152630,152631],{"class":40},"(students, student_id):\n",[34,152633,152634,152636,152639,152641],{"class":36,"line":3269},[34,152635,3854],{"class":87},[34,152637,152638],{"class":40}," student ",[34,152640,26695],{"class":87},[34,152642,152643],{"class":40}," students:\n",[34,152645,152646,152648,152651,152653,152655,152657],{"class":36,"line":3274},[34,152647,3150],{"class":87},[34,152649,152650],{"class":40}," student[",[34,152652,151948],{"class":156},[34,152654,5096],{"class":40},[34,152656,3602],{"class":87},[34,152658,152659],{"class":40}," student_id:\n",[34,152661,152662,152664],{"class":36,"line":8601},[34,152663,16384],{"class":87},[34,152665,152666],{"class":40}," student\n",[34,152668,152669,152671],{"class":36,"line":8625},[34,152670,4743],{"class":87},[34,152672,152673],{"class":63}," None\n",[34,152675,152676],{"class":36,"line":8630},[34,152677,3053],{"emptyLinePlaceholder":726},[34,152679,152680],{"class":36,"line":8636},[34,152681,3053],{"emptyLinePlaceholder":726},[34,152683,152684,152686,152689],{"class":36,"line":8663},[34,152685,32598],{"class":87},[34,152687,152688],{"class":149}," input_int",[34,152690,152691],{"class":40},"(prompt):\n",[34,152693,152694,152696,152698],{"class":36,"line":8668},[34,152695,2904],{"class":87},[34,152697,95922],{"class":63},[34,152699,4392],{"class":40},[34,152701,152702,152705],{"class":36,"line":8674},[34,152703,152704],{"class":87},"        try",[34,152706,4392],{"class":40},[34,152708,152709,152711,152713,152715,152717],{"class":36,"line":8686},[34,152710,16384],{"class":87},[34,152712,3035],{"class":63},[34,152714,801],{"class":40},[34,152716,669],{"class":63},[34,152718,152719],{"class":40},"(prompt))\n",[34,152721,152722,152725,152728],{"class":36,"line":8698},[34,152723,152724],{"class":87},"        except",[34,152726,152727],{"class":63}," ValueError",[34,152729,4392],{"class":40},[34,152731,152732,152734,152736,152739],{"class":36,"line":8710},[34,152733,35301],{"class":63},[34,152735,801],{"class":40},[34,152737,152738],{"class":156},"\"请输入整数\"",[34,152740,807],{"class":40},[34,152742,152743],{"class":36,"line":10369},[34,152744,3053],{"emptyLinePlaceholder":726},[34,152746,152747],{"class":36,"line":10394},[34,152748,3053],{"emptyLinePlaceholder":726},[34,152750,152751,152753,152756],{"class":36,"line":10417},[34,152752,32598],{"class":87},[34,152754,152755],{"class":149}," input_float",[34,152757,152691],{"class":40},[34,152759,152760,152762,152764],{"class":36,"line":10441},[34,152761,2904],{"class":87},[34,152763,95922],{"class":63},[34,152765,4392],{"class":40},[34,152767,152768,152770],{"class":36,"line":10446},[34,152769,152704],{"class":87},[34,152771,4392],{"class":40},[34,152773,152774,152776,152778,152780,152782],{"class":36,"line":10451},[34,152775,16384],{"class":87},[34,152777,110427],{"class":63},[34,152779,801],{"class":40},[34,152781,669],{"class":63},[34,152783,152719],{"class":40},[34,152785,152786,152788,152790],{"class":36,"line":10456},[34,152787,152724],{"class":87},[34,152789,152727],{"class":63},[34,152791,4392],{"class":40},[34,152793,152794,152796,152798,152801],{"class":36,"line":10465},[34,152795,35301],{"class":63},[34,152797,801],{"class":40},[34,152799,152800],{"class":156},"\"请输入数字\"",[34,152802,807],{"class":40},[34,152804,152805],{"class":36,"line":10470},[34,152806,3053],{"emptyLinePlaceholder":726},[34,152808,152809],{"class":36,"line":10476},[34,152810,3053],{"emptyLinePlaceholder":726},[34,152812,152813,152815,152818],{"class":36,"line":10497},[34,152814,32598],{"class":87},[34,152816,152817],{"class":149}," add_student",[34,152819,152462],{"class":40},[34,152821,152822,152825,152827,152829,152831,152834],{"class":36,"line":10503},[34,152823,152824],{"class":40},"    student_id ",[34,152826,153],{"class":87},[34,152828,61248],{"class":63},[34,152830,801],{"class":40},[34,152832,152833],{"class":156},"\"请输入学号:\"",[34,152835,807],{"class":40},[34,152837,152838],{"class":36,"line":10517},[34,152839,3053],{"emptyLinePlaceholder":726},[34,152841,152842,152844],{"class":36,"line":10523},[34,152843,3754],{"class":87},[34,152845,152846],{"class":40}," find_student(students, student_id):\n",[34,152848,152849,152851,152853,152856],{"class":36,"line":10550},[34,152850,33102],{"class":63},[34,152852,801],{"class":40},[34,152854,152855],{"class":156},"\"学号已存在\"",[34,152857,807],{"class":40},[34,152859,152860],{"class":36,"line":10559},[34,152861,152862],{"class":87},"        return\n",[34,152864,152865],{"class":36,"line":10565},[34,152866,3053],{"emptyLinePlaceholder":726},[34,152868,152869,152872,152874,152876,152878,152881],{"class":36,"line":10573},[34,152870,152871],{"class":40},"    name ",[34,152873,153],{"class":87},[34,152875,61248],{"class":63},[34,152877,801],{"class":40},[34,152879,152880],{"class":156},"\"请输入姓名:\"",[34,152882,807],{"class":40},[34,152884,152885,152888,152890,152893,152896],{"class":36,"line":10578},[34,152886,152887],{"class":40},"    age ",[34,152889,153],{"class":87},[34,152891,152892],{"class":40}," input_int(",[34,152894,152895],{"class":156},"\"请输入年龄:\"",[34,152897,807],{"class":40},[34,152899,152900,152903,152905,152908,152911],{"class":36,"line":17256},[34,152901,152902],{"class":40},"    score ",[34,152904,153],{"class":87},[34,152906,152907],{"class":40}," input_float(",[34,152909,152910],{"class":156},"\"请输入成绩:\"",[34,152912,807],{"class":40},[34,152914,152915],{"class":36,"line":17262},[34,152916,3053],{"emptyLinePlaceholder":726},[34,152918,152919],{"class":36,"line":17285},[34,152920,152921],{"class":40},"    students.append({\n",[34,152923,152924,152927],{"class":36,"line":17291},[34,152925,152926],{"class":156},"        \"student_id\"",[34,152928,152929],{"class":40},": student_id,\n",[34,152931,152932,152935],{"class":36,"line":17314},[34,152933,152934],{"class":156},"        \"name\"",[34,152936,152937],{"class":40},": name,\n",[34,152939,152940,152943],{"class":36,"line":17328},[34,152941,152942],{"class":156},"        \"age\"",[34,152944,152945],{"class":40},": age,\n",[34,152947,152948,152951],{"class":36,"line":17348},[34,152949,152950],{"class":156},"        \"score\"",[34,152952,152953],{"class":40},": score,\n",[34,152955,152956],{"class":36,"line":17354},[34,152957,34112],{"class":40},[34,152959,152960],{"class":36,"line":17365},[34,152961,152962],{"class":40},"    save_students(students)\n",[34,152964,152965,152967,152969,152972],{"class":36,"line":17388},[34,152966,31950],{"class":63},[34,152968,801],{"class":40},[34,152970,152971],{"class":156},"\"添加成功\"",[34,152973,807],{"class":40},[34,152975,152976],{"class":36,"line":17410},[34,152977,3053],{"emptyLinePlaceholder":726},[34,152979,152980],{"class":36,"line":17415},[34,152981,3053],{"emptyLinePlaceholder":726},[34,152983,152984,152986,152989],{"class":36,"line":17421},[34,152985,32598],{"class":87},[34,152987,152988],{"class":149}," delete_student",[34,152990,152462],{"class":40},[34,152992,152993,152995,152997,152999,153001,153004],{"class":36,"line":17435},[34,152994,152824],{"class":40},[34,152996,153],{"class":87},[34,152998,61248],{"class":63},[34,153000,801],{"class":40},[34,153002,153003],{"class":156},"\"请输入要删除的学号:\"",[34,153005,807],{"class":40},[34,153007,153008,153011,153013],{"class":36,"line":17448},[34,153009,153010],{"class":40},"    student ",[34,153012,153],{"class":87},[34,153014,153015],{"class":40}," find_student(students, student_id)\n",[34,153017,153018],{"class":36,"line":17453},[34,153019,3053],{"emptyLinePlaceholder":726},[34,153021,153022,153024,153026,153028,153030],{"class":36,"line":17467},[34,153023,3754],{"class":87},[34,153025,152638],{"class":40},[34,153027,39578],{"class":87},[34,153029,39584],{"class":63},[34,153031,4392],{"class":40},[34,153033,153034,153036,153038,153041],{"class":36,"line":17472},[34,153035,33102],{"class":63},[34,153037,801],{"class":40},[34,153039,153040],{"class":156},"\"学生不存在\"",[34,153042,807],{"class":40},[34,153044,153045],{"class":36,"line":17478},[34,153046,152862],{"class":87},[34,153048,153049],{"class":36,"line":17483},[34,153050,3053],{"emptyLinePlaceholder":726},[34,153052,153053],{"class":36,"line":17497},[34,153054,153055],{"class":40},"    students.remove(student)\n",[34,153057,153058],{"class":36,"line":17502},[34,153059,152962],{"class":40},[34,153061,153062,153064,153066,153069],{"class":36,"line":17507},[34,153063,31950],{"class":63},[34,153065,801],{"class":40},[34,153067,153068],{"class":156},"\"删除成功\"",[34,153070,807],{"class":40},[34,153072,153073],{"class":36,"line":17521},[34,153074,3053],{"emptyLinePlaceholder":726},[34,153076,153077],{"class":36,"line":17533},[34,153078,3053],{"emptyLinePlaceholder":726},[34,153080,153081,153083,153086],{"class":36,"line":17538},[34,153082,32598],{"class":87},[34,153084,153085],{"class":149}," update_student",[34,153087,152462],{"class":40},[34,153089,153090,153092,153094,153096,153098,153101],{"class":36,"line":17551},[34,153091,152824],{"class":40},[34,153093,153],{"class":87},[34,153095,61248],{"class":63},[34,153097,801],{"class":40},[34,153099,153100],{"class":156},"\"请输入要修改的学号:\"",[34,153102,807],{"class":40},[34,153104,153105,153107,153109],{"class":36,"line":17556},[34,153106,153010],{"class":40},[34,153108,153],{"class":87},[34,153110,153015],{"class":40},[34,153112,153113],{"class":36,"line":17561},[34,153114,3053],{"emptyLinePlaceholder":726},[34,153116,153117,153119,153121,153123,153125],{"class":36,"line":17566},[34,153118,3754],{"class":87},[34,153120,152638],{"class":40},[34,153122,39578],{"class":87},[34,153124,39584],{"class":63},[34,153126,4392],{"class":40},[34,153128,153129,153131,153133,153135],{"class":36,"line":17579},[34,153130,33102],{"class":63},[34,153132,801],{"class":40},[34,153134,153040],{"class":156},[34,153136,807],{"class":40},[34,153138,153139],{"class":36,"line":17584},[34,153140,152862],{"class":87},[34,153142,153143],{"class":36,"line":33284},[34,153144,3053],{"emptyLinePlaceholder":726},[34,153146,153147,153149,153151,153153,153155,153158],{"class":36,"line":33290},[34,153148,152871],{"class":40},[34,153150,153],{"class":87},[34,153152,61248],{"class":63},[34,153154,801],{"class":40},[34,153156,153157],{"class":156},"\"请输入新姓名:\"",[34,153159,807],{"class":40},[34,153161,153162,153164,153166,153168,153171],{"class":36,"line":33296},[34,153163,152887],{"class":40},[34,153165,153],{"class":87},[34,153167,152892],{"class":40},[34,153169,153170],{"class":156},"\"请输入新年龄:\"",[34,153172,807],{"class":40},[34,153174,153175,153177,153179,153181,153184],{"class":36,"line":33302},[34,153176,152902],{"class":40},[34,153178,153],{"class":87},[34,153180,152907],{"class":40},[34,153182,153183],{"class":156},"\"请输入新成绩:\"",[34,153185,807],{"class":40},[34,153187,153188],{"class":36,"line":33308},[34,153189,3053],{"emptyLinePlaceholder":726},[34,153191,153192,153195,153197,153199,153201],{"class":36,"line":33319},[34,153193,153194],{"class":40},"    student[",[34,153196,63317],{"class":156},[34,153198,5096],{"class":40},[34,153200,153],{"class":87},[34,153202,150296],{"class":40},[34,153204,153205,153207,153209,153211,153213],{"class":36,"line":33325},[34,153206,153194],{"class":40},[34,153208,69759],{"class":156},[34,153210,5096],{"class":40},[34,153212,153],{"class":87},[34,153214,150308],{"class":40},[34,153216,153217,153219,153221,153223,153225],{"class":36,"line":33345},[34,153218,153194],{"class":40},[34,153220,151973],{"class":156},[34,153222,5096],{"class":40},[34,153224,153],{"class":87},[34,153226,2238],{"class":40},[34,153228,153229],{"class":36,"line":33351},[34,153230,3053],{"emptyLinePlaceholder":726},[34,153232,153233],{"class":36,"line":33362},[34,153234,152962],{"class":40},[34,153236,153237,153239,153241,153244],{"class":36,"line":33368},[34,153238,31950],{"class":63},[34,153240,801],{"class":40},[34,153242,153243],{"class":156},"\"修改成功\"",[34,153245,807],{"class":40},[34,153247,153248],{"class":36,"line":33374},[34,153249,3053],{"emptyLinePlaceholder":726},[34,153251,153252],{"class":36,"line":33380},[34,153253,3053],{"emptyLinePlaceholder":726},[34,153255,153256,153258,153261],{"class":36,"line":33386},[34,153257,32598],{"class":87},[34,153259,153260],{"class":149}," query_student",[34,153262,152462],{"class":40},[34,153264,153265,153267,153269,153271,153273,153276],{"class":36,"line":33392},[34,153266,152824],{"class":40},[34,153268,153],{"class":87},[34,153270,61248],{"class":63},[34,153272,801],{"class":40},[34,153274,153275],{"class":156},"\"请输入要查询的学号:\"",[34,153277,807],{"class":40},[34,153279,153280,153282,153284],{"class":36,"line":33398},[34,153281,153010],{"class":40},[34,153283,153],{"class":87},[34,153285,153015],{"class":40},[34,153287,153288],{"class":36,"line":33404},[34,153289,3053],{"emptyLinePlaceholder":726},[34,153291,153292,153294,153296,153298,153300],{"class":36,"line":33424},[34,153293,3754],{"class":87},[34,153295,152638],{"class":40},[34,153297,39578],{"class":87},[34,153299,39584],{"class":63},[34,153301,4392],{"class":40},[34,153303,153304,153306,153308,153310],{"class":36,"line":33430},[34,153305,33102],{"class":63},[34,153307,801],{"class":40},[34,153309,153040],{"class":156},[34,153311,807],{"class":40},[34,153313,153314],{"class":36,"line":33446},[34,153315,152862],{"class":87},[34,153317,153318],{"class":36,"line":33452},[34,153319,3053],{"emptyLinePlaceholder":726},[34,153321,153322],{"class":36,"line":33466},[34,153323,153324],{"class":40},"    print_student(student)\n",[34,153326,153327],{"class":36,"line":33472},[34,153328,3053],{"emptyLinePlaceholder":726},[34,153330,153331],{"class":36,"line":33487},[34,153332,3053],{"emptyLinePlaceholder":726},[34,153334,153335,153337,153340],{"class":36,"line":33493},[34,153336,32598],{"class":87},[34,153338,153339],{"class":149}," print_student",[34,153341,153342],{"class":40},"(student):\n",[34,153344,153345,153347],{"class":36,"line":33502},[34,153346,31950],{"class":63},[34,153348,151940],{"class":40},[34,153350,153351,153354,153356,153358,153361,153364,153366,153369],{"class":36,"line":33508},[34,153352,153353],{"class":87},"        f",[34,153355,1046],{"class":156},[34,153357,1690],{"class":63},[34,153359,153360],{"class":40},"student[",[34,153362,153363],{"class":156},"'student_id'",[34,153365,1733],{"class":40},[34,153367,153368],{"class":63},"}\\t",[34,153370,25786],{"class":156},[34,153372,153373,153375,153377,153379,153381,153384,153386,153388],{"class":36,"line":33517},[34,153374,153353],{"class":87},[34,153376,1046],{"class":156},[34,153378,1690],{"class":63},[34,153380,153360],{"class":40},[34,153382,153383],{"class":156},"'name'",[34,153385,1733],{"class":40},[34,153387,153368],{"class":63},[34,153389,25786],{"class":156},[34,153391,153392,153394,153396,153398,153400,153403,153405,153407],{"class":36,"line":33523},[34,153393,153353],{"class":87},[34,153395,1046],{"class":156},[34,153397,1690],{"class":63},[34,153399,153360],{"class":40},[34,153401,153402],{"class":156},"'age'",[34,153404,1733],{"class":40},[34,153406,153368],{"class":63},[34,153408,25786],{"class":156},[34,153410,153411,153413,153415,153417,153419,153422,153424,153426],{"class":36,"line":33529},[34,153412,153353],{"class":87},[34,153414,1046],{"class":156},[34,153416,1690],{"class":63},[34,153418,153360],{"class":40},[34,153420,153421],{"class":156},"'score'",[34,153423,1733],{"class":40},[34,153425,1739],{"class":63},[34,153427,25786],{"class":156},[34,153429,153430],{"class":36,"line":33538},[34,153431,153432],{"class":40},"    )\n",[34,153434,153435],{"class":36,"line":33544},[34,153436,3053],{"emptyLinePlaceholder":726},[34,153438,153439],{"class":36,"line":33555},[34,153440,3053],{"emptyLinePlaceholder":726},[34,153442,153443,153445,153448],{"class":36,"line":33561},[34,153444,32598],{"class":87},[34,153446,153447],{"class":149}," show_all_students",[34,153449,152462],{"class":40},[34,153451,153452,153454,153456],{"class":36,"line":33580},[34,153453,3754],{"class":87},[34,153455,39581],{"class":87},[34,153457,152643],{"class":40},[34,153459,153460,153462,153464,153467],{"class":36,"line":33586},[34,153461,33102],{"class":63},[34,153463,801],{"class":40},[34,153465,153466],{"class":156},"\"暂无学生\"",[34,153468,807],{"class":40},[34,153470,153471],{"class":36,"line":33597},[34,153472,152862],{"class":87},[34,153474,153475],{"class":36,"line":33603},[34,153476,3053],{"emptyLinePlaceholder":726},[34,153478,153479,153481,153483,153486,153488,153491,153493,153496,153498,153501],{"class":36,"line":33623},[34,153480,31950],{"class":63},[34,153482,801],{"class":40},[34,153484,153485],{"class":156},"\"学号",[34,153487,1894],{"class":63},[34,153489,153490],{"class":156},"姓名",[34,153492,1894],{"class":63},[34,153494,153495],{"class":156},"年龄",[34,153497,1894],{"class":63},[34,153499,153500],{"class":156},"成绩\"",[34,153502,807],{"class":40},[34,153504,153505,153507,153509,153511],{"class":36,"line":33639},[34,153506,3854],{"class":87},[34,153508,152638],{"class":40},[34,153510,26695],{"class":87},[34,153512,152643],{"class":40},[34,153514,153515],{"class":36,"line":33645},[34,153516,153517],{"class":40},"        print_student(student)\n",[34,153519,153520],{"class":36,"line":33659},[34,153521,3053],{"emptyLinePlaceholder":726},[34,153523,153524],{"class":36,"line":33665},[34,153525,3053],{"emptyLinePlaceholder":726},[34,153527,153528,153530,153532],{"class":36,"line":33671},[34,153529,32598],{"class":87},[34,153531,2626],{"class":149},[34,153533,32604],{"class":40},[34,153535,153536,153539,153541],{"class":36,"line":33682},[34,153537,153538],{"class":40},"    students ",[34,153540,153],{"class":87},[34,153542,153543],{"class":40}," load_students()\n",[34,153545,153546],{"class":36,"line":33688},[34,153547,3053],{"emptyLinePlaceholder":726},[34,153549,153550,153552,153554],{"class":36,"line":33694},[34,153551,2904],{"class":87},[34,153553,95922],{"class":63},[34,153555,4392],{"class":40},[34,153557,153558],{"class":36,"line":33704},[34,153559,153560],{"class":40},"        show_menu()\n",[34,153562,153563,153566,153568,153570,153572,153575],{"class":36,"line":33710},[34,153564,153565],{"class":40},"        choice ",[34,153567,153],{"class":87},[34,153569,61248],{"class":63},[34,153571,801],{"class":40},[34,153573,153574],{"class":156},"\"请输入操作:\"",[34,153576,807],{"class":40},[34,153578,153579],{"class":36,"line":33721},[34,153580,3053],{"emptyLinePlaceholder":726},[34,153582,153583,153585,153588,153590,153593],{"class":36,"line":33727},[34,153584,3150],{"class":87},[34,153586,153587],{"class":40}," choice ",[34,153589,3602],{"class":87},[34,153591,153592],{"class":156}," \"1\"",[34,153594,4392],{"class":40},[34,153596,153597],{"class":36,"line":33737},[34,153598,153599],{"class":40},"            add_student(students)\n",[34,153601,153602,153605,153607,153609,153612],{"class":36,"line":33742},[34,153603,153604],{"class":87},"        elif",[34,153606,153587],{"class":40},[34,153608,3602],{"class":87},[34,153610,153611],{"class":156}," \"2\"",[34,153613,4392],{"class":40},[34,153615,153616],{"class":36,"line":33748},[34,153617,153618],{"class":40},"            delete_student(students)\n",[34,153620,153621,153623,153625,153627,153630],{"class":36,"line":33797},[34,153622,153604],{"class":87},[34,153624,153587],{"class":40},[34,153626,3602],{"class":87},[34,153628,153629],{"class":156}," \"3\"",[34,153631,4392],{"class":40},[34,153633,153634],{"class":36,"line":33844},[34,153635,153636],{"class":40},"            update_student(students)\n",[34,153638,153639,153641,153643,153645,153648],{"class":36,"line":33849},[34,153640,153604],{"class":87},[34,153642,153587],{"class":40},[34,153644,3602],{"class":87},[34,153646,153647],{"class":156}," \"4\"",[34,153649,4392],{"class":40},[34,153651,153652],{"class":36,"line":33855},[34,153653,153654],{"class":40},"            query_student(students)\n",[34,153656,153657,153659,153661,153663,153666],{"class":36,"line":33874},[34,153658,153604],{"class":87},[34,153660,153587],{"class":40},[34,153662,3602],{"class":87},[34,153664,153665],{"class":156}," \"5\"",[34,153667,4392],{"class":40},[34,153669,153670],{"class":36,"line":33880},[34,153671,153672],{"class":40},"            show_all_students(students)\n",[34,153674,153675,153677,153679,153681,153684],{"class":36,"line":33900},[34,153676,153604],{"class":87},[34,153678,153587],{"class":40},[34,153680,3602],{"class":87},[34,153682,153683],{"class":156}," \"0\"",[34,153685,4392],{"class":40},[34,153687,153688,153690,153692,153695],{"class":36,"line":33906},[34,153689,35301],{"class":63},[34,153691,801],{"class":40},[34,153693,153694],{"class":156},"\"退出系统\"",[34,153696,807],{"class":40},[34,153698,153699],{"class":36,"line":33912},[34,153700,115728],{"class":87},[34,153702,153703,153705],{"class":36,"line":33922},[34,153704,3187],{"class":87},[34,153706,4392],{"class":40},[34,153708,153709,153711,153713,153716],{"class":36,"line":33927},[34,153710,35301],{"class":63},[34,153712,801],{"class":40},[34,153714,153715],{"class":156},"\"输入错误\"",[34,153717,807],{"class":40},[34,153719,153720],{"class":36,"line":33933},[34,153721,3053],{"emptyLinePlaceholder":726},[34,153723,153724],{"class":36,"line":33949},[34,153725,3053],{"emptyLinePlaceholder":726},[34,153727,153728,153730,153732,153734,153736],{"class":36,"line":33994},[34,153729,2191],{"class":87},[34,153731,31871],{"class":63},[34,153733,102189],{"class":87},[34,153735,102192],{"class":156},[34,153737,4392],{"class":40},[34,153739,153740],{"class":36,"line":34000},[34,153741,102199],{"class":40},[108,153743,153744],{},"这个项目串联了：",[752,153746,153747,153750,153753,153756,153759,153761],{},[755,153748,153749],{},"菜单循环。",[755,153751,153752],{},"函数封装。",[755,153754,153755],{},"列表字典。",[755,153757,153758],{},"JSON 读写。",[755,153760,152228],{},[755,153762,153763,29036],{},[31,153764,153765],{},"if __name__ == \"__main__\"",[14,153767,153769],{"id":153768},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[108,153771,153772],{},"可以进一步拆成两个类：",[752,153774,153775,153780],{},[755,153776,153777,153779],{},[31,153778,150069],{},"：表示单个学生。",[755,153781,153782,153784],{},[31,153783,152095],{},"：负责学生增删改查和文件保存。",[108,153786,153787],{},"示意代码：",[24,153789,153791],{"className":31029,"code":153790,"language":31031,"meta":29,"style":29},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[31,153792,153793,153803,153807,153811,153815,153823,153830,153836,153842,153848,153852,153860,153866,153876,153886,153896,153906,153910,153914,153920,153928,153936,153944,153952,153960,153968],{"__ignoreMap":29},[34,153794,153795,153797,153799,153801],{"class":36,"line":37},[34,153796,31388],{"class":87},[34,153798,151653],{"class":40},[34,153800,31043],{"class":87},[34,153802,151658],{"class":40},[34,153804,153805],{"class":36,"line":51},[34,153806,3053],{"emptyLinePlaceholder":726},[34,153808,153809],{"class":36,"line":60},[34,153810,3053],{"emptyLinePlaceholder":726},[34,153812,153813],{"class":36,"line":76},[34,153814,151671],{"class":149},[34,153816,153817,153819,153821],{"class":36,"line":93},[34,153818,15347],{"class":87},[34,153820,8551],{"class":149},[34,153822,4392],{"class":40},[34,153824,153825,153828],{"class":36,"line":99},[34,153826,153827],{"class":40},"    student_id: ",[34,153829,151687],{"class":63},[34,153831,153832,153834],{"class":36,"line":353},[34,153833,151684],{"class":40},[34,153835,151687],{"class":63},[34,153837,153838,153840],{"class":36,"line":359},[34,153839,151692],{"class":40},[34,153841,151695],{"class":63},[34,153843,153844,153846],{"class":36,"line":579},[34,153845,151700],{"class":40},[34,153847,151703],{"class":63},[34,153849,153850],{"class":36,"line":589},[34,153851,3053],{"emptyLinePlaceholder":726},[34,153853,153854,153856,153858],{"class":36,"line":601},[34,153855,31452],{"class":87},[34,153857,151851],{"class":149},[34,153859,31458],{"class":40},[34,153861,153862,153864],{"class":36,"line":613},[34,153863,15405],{"class":87},[34,153865,57],{"class":40},[34,153867,153868,153870,153872,153874],{"class":36,"line":618},[34,153869,151864],{"class":156},[34,153871,67],{"class":40},[34,153873,31474],{"class":63},[34,153875,151871],{"class":40},[34,153877,153878,153880,153882,153884],{"class":36,"line":628},[34,153879,151876],{"class":156},[34,153881,67],{"class":40},[34,153883,31474],{"class":63},[34,153885,151883],{"class":40},[34,153887,153888,153890,153892,153894],{"class":36,"line":640},[34,153889,151888],{"class":156},[34,153891,67],{"class":40},[34,153893,31474],{"class":63},[34,153895,151895],{"class":40},[34,153897,153898,153900,153902,153904],{"class":36,"line":2301},[34,153899,151900],{"class":156},[34,153901,67],{"class":40},[34,153903,31474],{"class":63},[34,153905,151907],{"class":40},[34,153907,153908],{"class":36,"line":2307},[34,153909,3182],{"class":40},[34,153911,153912],{"class":36,"line":2328},[34,153913,3053],{"emptyLinePlaceholder":726},[34,153915,153916,153918],{"class":36,"line":2333},[34,153917,151515],{"class":149},[34,153919,151518],{"class":63},[34,153921,153922,153924,153926],{"class":36,"line":2347},[34,153923,31452],{"class":87},[34,153925,151928],{"class":149},[34,153927,151931],{"class":40},[34,153929,153930,153932,153934],{"class":36,"line":2352},[34,153931,15405],{"class":87},[34,153933,151535],{"class":63},[34,153935,151940],{"class":40},[34,153937,153938,153940,153942],{"class":36,"line":2381},[34,153939,151945],{"class":40},[34,153941,151948],{"class":156},[34,153943,88466],{"class":40},[34,153945,153946,153948,153950],{"class":36,"line":2386},[34,153947,151945],{"class":40},[34,153949,63317],{"class":156},[34,153951,88466],{"class":40},[34,153953,153954,153956,153958],{"class":36,"line":2403},[34,153955,151945],{"class":40},[34,153957,69759],{"class":156},[34,153959,88466],{"class":40},[34,153961,153962,153964,153966],{"class":36,"line":2408},[34,153963,151945],{"class":40},[34,153965,151973],{"class":156},[34,153967,88466],{"class":40},[34,153969,153970],{"class":36,"line":2413},[34,153971,38777],{"class":40},[108,153973,153974],{},"管理器示意：",[24,153976,153978],{"className":31029,"code":153977,"language":31031,"meta":29,"style":29},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[31,153979,153980,153989,153997,154008,154012,154022,154035,154046,154053,154059,154063,154072,154081,154087,154094],{"__ignoreMap":29},[34,153981,153982,153984,153987],{"class":36,"line":37},[34,153983,15347],{"class":87},[34,153985,153986],{"class":149}," StudentManager",[34,153988,4392],{"class":40},[34,153990,153991,153993,153995],{"class":36,"line":51},[34,153992,31452],{"class":87},[34,153994,31455],{"class":63},[34,153996,31458],{"class":40},[34,153998,153999,154001,154004,154006],{"class":36,"line":60},[34,154000,31496],{"class":63},[34,154002,154003],{"class":40},".students ",[34,154005,153],{"class":87},[34,154007,52484],{"class":40},[34,154009,154010],{"class":36,"line":76},[34,154011,3053],{"emptyLinePlaceholder":726},[34,154013,154014,154016,154019],{"class":36,"line":93},[34,154015,31452],{"class":87},[34,154017,154018],{"class":149}," find_by_id",[34,154020,154021],{"class":40},"(self, student_id):\n",[34,154023,154024,154026,154028,154030,154032],{"class":36,"line":99},[34,154025,4056],{"class":87},[34,154027,152638],{"class":40},[34,154029,26695],{"class":87},[34,154031,39524],{"class":63},[34,154033,154034],{"class":40},".students:\n",[34,154036,154037,154039,154042,154044],{"class":36,"line":353},[34,154038,5295],{"class":87},[34,154040,154041],{"class":40}," student.student_id ",[34,154043,3602],{"class":87},[34,154045,152659],{"class":40},[34,154047,154048,154051],{"class":36,"line":359},[34,154049,154050],{"class":87},"                return",[34,154052,152666],{"class":40},[34,154054,154055,154057],{"class":36,"line":579},[34,154056,15405],{"class":87},[34,154058,152673],{"class":63},[34,154060,154061],{"class":36,"line":589},[34,154062,3053],{"emptyLinePlaceholder":726},[34,154064,154065,154067,154069],{"class":36,"line":601},[34,154066,31452],{"class":87},[34,154068,5862],{"class":149},[34,154070,154071],{"class":40},"(self, student):\n",[34,154073,154074,154076,154078],{"class":36,"line":613},[34,154075,3150],{"class":87},[34,154077,39524],{"class":63},[34,154079,154080],{"class":40},".find_by_id(student.student_id):\n",[34,154082,154083,154085],{"class":36,"line":618},[34,154084,16384],{"class":87},[34,154086,126437],{"class":63},[34,154088,154089,154091],{"class":36,"line":628},[34,154090,31496],{"class":63},[34,154092,154093],{"class":40},".students.append(student)\n",[34,154095,154096,154098],{"class":36,"line":640},[34,154097,15405],{"class":87},[34,154099,154100],{"class":63}," True\n",[108,154102,154103],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154105,154107],{"id":154106},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[19,154109,154111],{"id":154110},"_1251-数据结构","12.5.1 数据结构",[24,154113,154115],{"className":31029,"code":154114,"language":31031,"meta":29,"style":29},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[31,154116,154117,154125,154156,154186,154215,154244],{"__ignoreMap":29},[34,154118,154119,154121,154123],{"class":36,"line":37},[34,154120,148966],{"class":40},[34,154122,153],{"class":87},[34,154124,56090],{"class":40},[34,154126,154127,154129,154131,154133,154135,154137,154140,154142,154145,154147,154149,154151,154154],{"class":36,"line":51},[34,154128,148886],{"class":40},[34,154130,148498],{"class":156},[34,154132,67],{"class":40},[34,154134,149109],{"class":156},[34,154136,13088],{"class":40},[34,154138,154139],{"class":156},"\"category\"",[34,154141,67],{"class":40},[34,154143,154144],{"class":156},"\"手机\"",[34,154146,13088],{"class":40},[34,154148,84714],{"class":156},[34,154150,67],{"class":40},[34,154152,154153],{"class":63},"12000",[34,154155,5583],{"class":40},[34,154157,154158,154160,154162,154164,154166,154168,154170,154172,154175,154177,154179,154181,154184],{"class":36,"line":60},[34,154159,148886],{"class":40},[34,154161,148498],{"class":156},[34,154163,67],{"class":40},[34,154165,149109],{"class":156},[34,154167,13088],{"class":40},[34,154169,154139],{"class":156},[34,154171,67],{"class":40},[34,154173,154174],{"class":156},"\"电脑\"",[34,154176,13088],{"class":40},[34,154178,84714],{"class":156},[34,154180,67],{"class":40},[34,154182,154183],{"class":63},"18000",[34,154185,5583],{"class":40},[34,154187,154188,154190,154192,154194,154196,154198,154200,154202,154204,154206,154208,154210,154213],{"class":36,"line":76},[34,154189,148886],{"class":40},[34,154191,148498],{"class":156},[34,154193,67],{"class":40},[34,154195,149130],{"class":156},[34,154197,13088],{"class":40},[34,154199,154139],{"class":156},[34,154201,67],{"class":40},[34,154203,154144],{"class":156},[34,154205,13088],{"class":40},[34,154207,84714],{"class":156},[34,154209,67],{"class":40},[34,154211,154212],{"class":63},"15000",[34,154214,5583],{"class":40},[34,154216,154217,154219,154221,154223,154225,154227,154229,154231,154233,154235,154237,154239,154242],{"class":36,"line":93},[34,154218,148886],{"class":40},[34,154220,148498],{"class":156},[34,154222,67],{"class":40},[34,154224,149130],{"class":156},[34,154226,13088],{"class":40},[34,154228,154139],{"class":156},[34,154230,67],{"class":40},[34,154232,154174],{"class":156},[34,154234,13088],{"class":40},[34,154236,84714],{"class":156},[34,154238,67],{"class":40},[34,154240,154241],{"class":63},"16000",[34,154243,5583],{"class":40},[34,154245,154246],{"class":36,"line":99},[34,154247,33897],{"class":40},[19,154249,154251],{"id":154250},"_1252-按日期统计","12.5.2 按日期统计",[24,154253,154255],{"className":31029,"code":154254,"language":31031,"meta":29,"style":29},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[31,154256,154257,154266,154270,154281,154295,154308,154327,154331],{"__ignoreMap":29},[34,154258,154259,154262,154264],{"class":36,"line":37},[34,154260,154261],{"class":40},"daily_total ",[34,154263,153],{"class":87},[34,154265,88498],{"class":40},[34,154267,154268],{"class":36,"line":51},[34,154269,3053],{"emptyLinePlaceholder":726},[34,154271,154272,154274,154276,154278],{"class":36,"line":60},[34,154273,3678],{"class":87},[34,154275,148710],{"class":40},[34,154277,26695],{"class":87},[34,154279,154280],{"class":40}," sales:\n",[34,154282,154283,154286,154288,154291,154293],{"class":36,"line":76},[34,154284,154285],{"class":40},"    date ",[34,154287,153],{"class":87},[34,154289,154290],{"class":40}," item[",[34,154292,148498],{"class":156},[34,154294,33897],{"class":40},[34,154296,154297,154300,154302,154304,154306],{"class":36,"line":93},[34,154298,154299],{"class":40},"    amount ",[34,154301,153],{"class":87},[34,154303,154290],{"class":40},[34,154305,84714],{"class":156},[34,154307,33897],{"class":40},[34,154309,154310,154313,154315,154318,154320,154322,154324],{"class":36,"line":99},[34,154311,154312],{"class":40},"    daily_total[date] ",[34,154314,153],{"class":87},[34,154316,154317],{"class":40}," daily_total.get(date, ",[34,154319,987],{"class":63},[34,154321,14367],{"class":40},[34,154323,1276],{"class":87},[34,154325,154326],{"class":40}," amount\n",[34,154328,154329],{"class":36,"line":353},[34,154330,3053],{"emptyLinePlaceholder":726},[34,154332,154333,154335],{"class":36,"line":359},[34,154334,31066],{"class":63},[34,154336,154337],{"class":40},"(daily_total)\n",[19,154339,154341],{"id":154340},"_1253-按类别统计","12.5.3 按类别统计",[24,154343,154345],{"className":31029,"code":154344,"language":31031,"meta":29,"style":29},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[31,154346,154347,154356,154360,154370,154383,154395,154413,154417],{"__ignoreMap":29},[34,154348,154349,154352,154354],{"class":36,"line":37},[34,154350,154351],{"class":40},"category_total ",[34,154353,153],{"class":87},[34,154355,88498],{"class":40},[34,154357,154358],{"class":36,"line":51},[34,154359,3053],{"emptyLinePlaceholder":726},[34,154361,154362,154364,154366,154368],{"class":36,"line":60},[34,154363,3678],{"class":87},[34,154365,148710],{"class":40},[34,154367,26695],{"class":87},[34,154369,154280],{"class":40},[34,154371,154372,154375,154377,154379,154381],{"class":36,"line":76},[34,154373,154374],{"class":40},"    category ",[34,154376,153],{"class":87},[34,154378,154290],{"class":40},[34,154380,154139],{"class":156},[34,154382,33897],{"class":40},[34,154384,154385,154387,154389,154391,154393],{"class":36,"line":93},[34,154386,154299],{"class":40},[34,154388,153],{"class":87},[34,154390,154290],{"class":40},[34,154392,84714],{"class":156},[34,154394,33897],{"class":40},[34,154396,154397,154400,154402,154405,154407,154409,154411],{"class":36,"line":99},[34,154398,154399],{"class":40},"    category_total[category] ",[34,154401,153],{"class":87},[34,154403,154404],{"class":40}," category_total.get(category, ",[34,154406,987],{"class":63},[34,154408,14367],{"class":40},[34,154410,1276],{"class":87},[34,154412,154326],{"class":40},[34,154414,154415],{"class":36,"line":353},[34,154416,3053],{"emptyLinePlaceholder":726},[34,154418,154419,154421],{"class":36,"line":359},[34,154420,31066],{"class":63},[34,154422,154423],{"class":40},"(category_total)\n",[19,154425,154427],{"id":154426},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[24,154429,154431],{"className":31029,"code":154430,"language":31031,"meta":29,"style":29},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[31,154432,154433,154458],{"__ignoreMap":29},[34,154434,154435,154438,154440,154442,154445,154448,154451,154454,154456],{"class":36,"line":37},[34,154436,154437],{"class":40},"top_date, top_amount ",[34,154439,153],{"class":87},[34,154441,6604],{"class":63},[34,154443,154444],{"class":40},"(daily_total.items(), ",[34,154446,154447],{"class":5869},"key",[34,154449,154450],{"class":87},"=lambda",[34,154452,154453],{"class":40}," item: item[",[34,154455,1013],{"class":63},[34,154457,5310],{"class":40},[34,154459,154460,154462],{"class":36,"line":51},[34,154461,31066],{"class":63},[34,154463,154464],{"class":40},"(top_date, top_amount)\n",[14,154466,154468],{"id":154467},"_126-绘制柱状图","12.6 绘制柱状图",[24,154470,154472],{"className":31029,"code":154471,"language":31031,"meta":29,"style":29},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[31,154473,154474,154488,154499,154503,154511,154523,154535,154546,154550,154554,154564,154575,154589,154594,154611,154628,154644,154648],{"__ignoreMap":29},[34,154475,154476,154478,154480,154482,154484,154486],{"class":36,"line":37},[34,154477,31388],{"class":87},[34,154479,147880],{"class":40},[34,154481,31043],{"class":87},[34,154483,147885],{"class":40},[34,154485,32034],{"class":87},[34,154487,147890],{"class":40},[34,154489,154490,154492,154494,154496],{"class":36,"line":51},[34,154491,31388],{"class":87},[34,154493,147739],{"class":40},[34,154495,31043],{"class":87},[34,154497,154498],{"class":40}," Bar\n",[34,154500,154501],{"class":36,"line":60},[34,154502,3053],{"emptyLinePlaceholder":726},[34,154504,154505,154507,154509],{"class":36,"line":76},[34,154506,154351],{"class":40},[34,154508,153],{"class":87},[34,154510,57],{"class":40},[34,154512,154513,154516,154518,154521],{"class":36,"line":93},[34,154514,154515],{"class":156},"    \"手机\"",[34,154517,67],{"class":40},[34,154519,154520],{"class":63},"27000",[34,154522,32117],{"class":40},[34,154524,154525,154528,154530,154533],{"class":36,"line":99},[34,154526,154527],{"class":156},"    \"电脑\"",[34,154529,67],{"class":40},[34,154531,154532],{"class":63},"34000",[34,154534,32117],{"class":40},[34,154536,154537,154540,154542,154544],{"class":36,"line":353},[34,154538,154539],{"class":156},"    \"耳机\"",[34,154541,67],{"class":40},[34,154543,125029],{"class":63},[34,154545,32117],{"class":40},[34,154547,154548],{"class":36,"line":359},[34,154549,241],{"class":40},[34,154551,154552],{"class":36,"line":579},[34,154553,3053],{"emptyLinePlaceholder":726},[34,154555,154556,154559,154561],{"class":36,"line":589},[34,154557,154558],{"class":40},"bar ",[34,154560,153],{"class":87},[34,154562,154563],{"class":40}," Bar()\n",[34,154565,154566,154569,154572],{"class":36,"line":601},[34,154567,154568],{"class":40},"bar.add_xaxis(",[34,154570,154571],{"class":63},"list",[34,154573,154574],{"class":40},"(category_total.keys()))\n",[34,154576,154577,154580,154582,154584,154586],{"class":36,"line":613},[34,154578,154579],{"class":40},"bar.add_yaxis(",[34,154581,147796],{"class":156},[34,154583,13088],{"class":40},[34,154585,154571],{"class":63},[34,154587,154588],{"class":40},"(category_total.values()))\n",[34,154590,154591],{"class":36,"line":618},[34,154592,154593],{"class":40},"bar.set_global_opts(\n",[34,154595,154596,154598,154600,154602,154604,154606,154609],{"class":36,"line":628},[34,154597,147974],{"class":5869},[34,154599,153],{"class":87},[34,154601,147979],{"class":40},[34,154603,52056],{"class":5869},[34,154605,153],{"class":87},[34,154607,154608],{"class":156},"\"品类销售额\"",[34,154610,38698],{"class":40},[34,154612,154613,154615,154617,154619,154621,154623,154626],{"class":36,"line":640},[34,154614,147993],{"class":5869},[34,154616,153],{"class":87},[34,154618,147998],{"class":40},[34,154620,80440],{"class":5869},[34,154622,153],{"class":87},[34,154624,154625],{"class":156},"\"品类\"",[34,154627,38698],{"class":40},[34,154629,154630,154632,154634,154636,154638,154640,154642],{"class":36,"line":2301},[34,154631,148012],{"class":5869},[34,154633,153],{"class":87},[34,154635,147998],{"class":40},[34,154637,80440],{"class":5869},[34,154639,153],{"class":87},[34,154641,147796],{"class":156},[34,154643,38698],{"class":40},[34,154645,154646],{"class":36,"line":2307},[34,154647,807],{"class":40},[34,154649,154650,154653,154656],{"class":36,"line":2328},[34,154651,154652],{"class":40},"bar.render(",[34,154654,154655],{"class":156},"\"category_sales.html\"",[34,154657,807],{"class":40},[14,154659,154661],{"id":154660},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[108,154663,154664],{},"时间线适合展示不同日期、月份、年份的数据变化。",[24,154666,154668],{"className":31029,"code":154667,"language":31031,"meta":29,"style":29},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[31,154669,154670,154684,154695,154699,154707,154731,154754,154779,154783,154787,154797,154801,154812,154821,154831,154845,154876,154881,154885],{"__ignoreMap":29},[34,154671,154672,154674,154676,154678,154680,154682],{"class":36,"line":37},[34,154673,31388],{"class":87},[34,154675,147880],{"class":40},[34,154677,31043],{"class":87},[34,154679,147885],{"class":40},[34,154681,32034],{"class":87},[34,154683,147890],{"class":40},[34,154685,154686,154688,154690,154692],{"class":36,"line":51},[34,154687,31388],{"class":87},[34,154689,147739],{"class":40},[34,154691,31043],{"class":87},[34,154693,154694],{"class":40}," Bar, Timeline\n",[34,154696,154697],{"class":36,"line":60},[34,154698,3053],{"emptyLinePlaceholder":726},[34,154700,154701,154703,154705],{"class":36,"line":76},[34,154702,102288],{"class":40},[34,154704,153],{"class":87},[34,154706,57],{"class":40},[34,154708,154709,154712,154715,154717,154719,154721,154723,154725,154727,154729],{"class":36,"line":93},[34,154710,154711],{"class":156},"    \"2024-10-01\"",[34,154713,154714],{"class":40},": {",[34,154716,154144],{"class":156},[34,154718,67],{"class":40},[34,154720,154153],{"class":63},[34,154722,13088],{"class":40},[34,154724,154174],{"class":156},[34,154726,67],{"class":40},[34,154728,154183],{"class":63},[34,154730,5583],{"class":40},[34,154732,154733,154736,154738,154740,154742,154744,154746,154748,154750,154752],{"class":36,"line":99},[34,154734,154735],{"class":156},"    \"2024-10-02\"",[34,154737,154714],{"class":40},[34,154739,154144],{"class":156},[34,154741,67],{"class":40},[34,154743,154212],{"class":63},[34,154745,13088],{"class":40},[34,154747,154174],{"class":156},[34,154749,67],{"class":40},[34,154751,154241],{"class":63},[34,154753,5583],{"class":40},[34,154755,154756,154759,154761,154763,154765,154768,154770,154772,154774,154777],{"class":36,"line":353},[34,154757,154758],{"class":156},"    \"2024-10-03\"",[34,154760,154714],{"class":40},[34,154762,154144],{"class":156},[34,154764,67],{"class":40},[34,154766,154767],{"class":63},"17000",[34,154769,13088],{"class":40},[34,154771,154174],{"class":156},[34,154773,67],{"class":40},[34,154775,154776],{"class":63},"19000",[34,154778,5583],{"class":40},[34,154780,154781],{"class":36,"line":359},[34,154782,241],{"class":40},[34,154784,154785],{"class":36,"line":579},[34,154786,3053],{"emptyLinePlaceholder":726},[34,154788,154789,154792,154794],{"class":36,"line":589},[34,154790,154791],{"class":40},"timeline ",[34,154793,153],{"class":87},[34,154795,154796],{"class":40}," Timeline()\n",[34,154798,154799],{"class":36,"line":601},[34,154800,3053],{"emptyLinePlaceholder":726},[34,154802,154803,154805,154808,154810],{"class":36,"line":613},[34,154804,3678],{"class":87},[34,154806,154807],{"class":40}," date, category_data ",[34,154809,26695],{"class":87},[34,154811,149649],{"class":40},[34,154813,154814,154817,154819],{"class":36,"line":618},[34,154815,154816],{"class":40},"    bar ",[34,154818,153],{"class":87},[34,154820,154563],{"class":40},[34,154822,154823,154826,154828],{"class":36,"line":628},[34,154824,154825],{"class":40},"    bar.add_xaxis(",[34,154827,154571],{"class":63},[34,154829,154830],{"class":40},"(category_data.keys()))\n",[34,154832,154833,154836,154838,154840,154842],{"class":36,"line":640},[34,154834,154835],{"class":40},"    bar.add_yaxis(",[34,154837,147796],{"class":156},[34,154839,13088],{"class":40},[34,154841,154571],{"class":63},[34,154843,154844],{"class":40},"(category_data.values()))\n",[34,154846,154847,154850,154853,154855,154857,154859,154861,154863,154865,154867,154869,154871,154874],{"class":36,"line":2301},[34,154848,154849],{"class":40},"    bar.set_global_opts(",[34,154851,154852],{"class":5869},"title_opts",[34,154854,153],{"class":87},[34,154856,147979],{"class":40},[34,154858,52056],{"class":5869},[34,154860,153],{"class":87},[34,154862,851],{"class":87},[34,154864,1046],{"class":156},[34,154866,1690],{"class":63},[34,154868,74557],{"class":40},[34,154870,1739],{"class":63},[34,154872,154873],{"class":156},"销售额\"",[34,154875,31148],{"class":40},[34,154877,154878],{"class":36,"line":2307},[34,154879,154880],{"class":40},"    timeline.add(bar, date)\n",[34,154882,154883],{"class":36,"line":2328},[34,154884,3053],{"emptyLinePlaceholder":726},[34,154886,154887,154890,154893],{"class":36,"line":2333},[34,154888,154889],{"class":40},"timeline.render(",[34,154891,154892],{"class":156},"\"timeline_sales.html\"",[34,154894,807],{"class":40},[14,154896,154898],{"id":154897},"_128-绘制地图","12.8 绘制地图",[108,154900,154901],{},"地图适合展示地区数据。",[24,154903,154905],{"className":31029,"code":154904,"language":31031,"meta":29,"style":29},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[31,154906,154907,154921,154932,154936,154944,154957,154969,154982,154995,154999,155003,155013,155028,155033,155050,155069,155073],{"__ignoreMap":29},[34,154908,154909,154911,154913,154915,154917,154919],{"class":36,"line":37},[34,154910,31388],{"class":87},[34,154912,147880],{"class":40},[34,154914,31043],{"class":87},[34,154916,147885],{"class":40},[34,154918,32034],{"class":87},[34,154920,147890],{"class":40},[34,154922,154923,154925,154927,154929],{"class":36,"line":51},[34,154924,31388],{"class":87},[34,154926,147739],{"class":40},[34,154928,31043],{"class":87},[34,154930,154931],{"class":40}," Map\n",[34,154933,154934],{"class":36,"line":60},[34,154935,3053],{"emptyLinePlaceholder":726},[34,154937,154938,154940,154942],{"class":36,"line":76},[34,154939,102288],{"class":40},[34,154941,153],{"class":87},[34,154943,56090],{"class":40},[34,154945,154946,154949,154951,154953,154955],{"class":36,"line":93},[34,154947,154948],{"class":40},"    (",[34,154950,69904],{"class":156},[34,154952,13088],{"class":40},[34,154954,1611],{"class":63},[34,154956,38698],{"class":40},[34,154958,154959,154961,154963,154965,154967],{"class":36,"line":99},[34,154960,154948],{"class":40},[34,154962,69924],{"class":156},[34,154964,13088],{"class":40},[34,154966,147813],{"class":63},[34,154968,38698],{"class":40},[34,154970,154971,154973,154976,154978,154980],{"class":36,"line":353},[34,154972,154948],{"class":40},[34,154974,154975],{"class":156},"\"广东\"",[34,154977,13088],{"class":40},[34,154979,2376],{"class":63},[34,154981,38698],{"class":40},[34,154983,154984,154986,154989,154991,154993],{"class":36,"line":359},[34,154985,154948],{"class":40},[34,154987,154988],{"class":156},"\"浙江\"",[34,154990,13088],{"class":40},[34,154992,147818],{"class":63},[34,154994,38698],{"class":40},[34,154996,154997],{"class":36,"line":579},[34,154998,33897],{"class":40},[34,155000,155001],{"class":36,"line":589},[34,155002,3053],{"emptyLinePlaceholder":726},[34,155004,155005,155008,155010],{"class":36,"line":601},[34,155006,155007],{"class":40},"map_chart ",[34,155009,153],{"class":87},[34,155011,155012],{"class":40}," Map()\n",[34,155014,155015,155018,155020,155023,155026],{"class":36,"line":613},[34,155016,155017],{"class":40},"map_chart.add(",[34,155019,147796],{"class":156},[34,155021,155022],{"class":40},", data, ",[34,155024,155025],{"class":156},"\"china\"",[34,155027,807],{"class":40},[34,155029,155030],{"class":36,"line":618},[34,155031,155032],{"class":40},"map_chart.set_global_opts(\n",[34,155034,155035,155037,155039,155041,155043,155045,155048],{"class":36,"line":628},[34,155036,147974],{"class":5869},[34,155038,153],{"class":87},[34,155040,147979],{"class":40},[34,155042,52056],{"class":5869},[34,155044,153],{"class":87},[34,155046,155047],{"class":156},"\"地区销售额\"",[34,155049,38698],{"class":40},[34,155051,155052,155055,155057,155060,155063,155065,155067],{"class":36,"line":640},[34,155053,155054],{"class":5869},"    visualmap_opts",[34,155056,153],{"class":87},[34,155058,155059],{"class":40},"opts.VisualMapOpts(",[34,155061,155062],{"class":5869},"max_",[34,155064,153],{"class":87},[34,155066,2376],{"class":63},[34,155068,38698],{"class":40},[34,155070,155071],{"class":36,"line":2301},[34,155072,807],{"class":40},[34,155074,155075,155078,155081],{"class":36,"line":2307},[34,155076,155077],{"class":40},"map_chart.render(",[34,155079,155080],{"class":156},"\"map_sales.html\"",[34,155082,807],{"class":40},[108,155084,155085],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155087,155089],{"id":155088},"_129-项目拆分建议","12.9 项目拆分建议",[108,155091,155092],{},"当代码超过一个文件时，可以这样组织：",[24,155094,155097],{"className":155095,"code":155096,"language":5840,"meta":29},[5838],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[31,155098,155096],{"__ignoreMap":29},[108,155100,155101],{},"职责：",[752,155103,155104,155110,155116,155122],{},[755,155105,155106,155109],{},[31,155107,155108],{},"main.py","：程序入口。",[755,155111,155112,155115],{},[31,155113,155114],{},"file_utils.py","：读写 JSON。",[755,155117,155118,155121],{},[31,155119,155120],{},"sales_service.py","：统计销售数据。",[755,155123,155124,155127],{},[31,155125,155126],{},"chart_builder.py","：生成图表。",[14,155129,155131],{"id":155130},"_1210-python基础复习清单","12.10 Python基础复习清单",[108,155133,155134],{},"语法基础：",[752,155136,155137,155140,155143,155146],{},[755,155138,155139],{},"会写变量、注释、输入输出。",[755,155141,155142],{},"会使用 int、float、str、bool。",[755,155144,155145],{},"会做类型转换。",[755,155147,155148],{},"会使用 f-string 格式化输出。",[108,155150,155151],{},"流程控制：",[752,155153,155154,155160,155166,155174],{},[755,155155,155156,155157,29036],{},"会写 ",[31,155158,155159],{},"if elif else",[755,155161,155156,155162,101648,155164,29036],{},[31,155163,109293],{},[31,155165,3678],{},[755,155167,155168,155169,101648,155171,29036],{},"理解 ",[31,155170,2706],{},[31,155172,155173],{},"continue",[755,155175,155176],{},"能写嵌套循环。",[108,155178,155179],{},"函数：",[752,155181,155182,155185,155188,155191],{},[755,155183,155184],{},"会定义和调用函数。",[755,155186,155187],{},"理解参数和返回值。",[755,155189,155190],{},"知道局部变量和全局变量。",[755,155192,155193],{},"会使用默认参数、关键字参数、不定长参数。",[108,155195,155196],{},"容器：",[752,155198,155199,155202,155205,155208,155211],{},[755,155200,155201],{},"会使用列表增删改查。",[755,155203,155204],{},"会遍历列表、字典。",[755,155206,155207],{},"会使用切片。",[755,155209,155210],{},"会用集合去重。",[755,155212,155213],{},"会处理列表嵌套字典。",[108,155215,155216],{},"文件和模块：",[752,155218,155219,155222,155225,155228,155231],{},[755,155220,155221],{},"会读写文本文件。",[755,155223,155224],{},"会读写 JSON。",[755,155226,155227],{},"会捕获常见异常。",[755,155229,155230],{},"会导入模块和第三方包。",[755,155232,155233],{},"会创建简单包结构。",[108,155235,155236],{},"项目能力：",[752,155238,155239,155242,155245,155248,155251],{},[755,155240,155241],{},"能把代码拆成函数。",[755,155243,155244],{},"能把数据保存到文件。",[755,155246,155247],{},"能处理用户输入错误。",[755,155249,155250],{},"能写一个完整菜单程序。",[755,155252,155253],{},"能用 pyecharts 生成图表。",[14,155255,155257],{"id":155256},"_1211-推荐练习顺序","12.11 推荐练习顺序",[752,155259,155260,155263,155266,155269,155272,155275,155278,155281],{},[755,155261,155262],{},"猜数字游戏。",[755,155264,155265],{},"ATM 菜单程序。",[755,155267,155268],{},"学生成绩统计。",[755,155270,155271],{},"学生管理系统函数版。",[755,155273,155274],{},"学生管理系统文件持久化版。",[755,155276,155277],{},"学生管理系统面向对象版。",[755,155279,155280],{},"销售数据统计。",[755,155282,155283],{},"销售数据可视化。",[14,155285,155287],{"id":155286},"_1212-常见学习误区","12.12 常见学习误区",[752,155289,155290,155293,155296,155299,155302,155305,155308],{},[755,155291,155292],{},"只看视频不敲代码。",[755,155294,155295],{},"一报错就复制错误去搜，不先读报错位置。",[755,155297,155298],{},"变量名随便写，后续自己看不懂。",[755,155300,155301],{},"所有代码都写在一个文件一个函数里。",[755,155303,155304],{},"不保存练习代码，复习时没有材料。",[755,155306,155307],{},"还没掌握列表字典就急着学框架。",[755,155309,155310],{},"不会读官方文档，只依赖教程。",[14,155312,155314],{"id":155313},"_1213-如何读报错","12.13 如何读报错",[108,155316,155317],{},"报错通常从下往上看最后几行。",[108,155319,15788],{},[24,155321,155324],{"className":155322,"code":155323,"language":5840,"meta":29},[5838],"ValueError: invalid literal for int() with base 10: 'abc'\n",[31,155325,155323],{"__ignoreMap":29},[108,155327,25252],{},[752,155329,155330,155336,155346],{},[755,155331,155332,155333,29036],{},"异常类型是 ",[31,155334,155335],{},"ValueError",[755,155337,107975,155338,155341,155342,155345],{},[31,155339,155340],{},"int()"," 无法把 ",[31,155343,155344],{},"'abc'"," 转成整数。",[755,155347,155348],{},"应该检查输入内容或增加异常处理。",[108,155350,155351],{},"再看文件名和行号：",[24,155353,155356],{"className":155354,"code":155355,"language":5840,"meta":29},[5838],"File \"main.py\", line 10, in \u003Cmodule>\n",[31,155357,155355],{"__ignoreMap":29},[108,155359,155360,155361,155363],{},"表示错误发生在 ",[31,155362,155108],{}," 第 10 行。",[14,155365,155367],{"id":155366},"_1214-后续学习方向","12.14 后续学习方向",[108,155369,155370],{},"Python 基础完成后，可以按兴趣选择方向：",[752,155372,155373,155385,155394,155406,155417,155426,155436],{},[755,155374,155375,155376,1008,155379,1008,155382,29036],{},"自动化办公：",[31,155377,155378],{},"openpyxl",[31,155380,155381],{},"python-docx",[31,155383,155384],{},"pdfplumber",[755,155386,155387,155388,1008,155390,1008,155392,29036],{},"数据分析：",[31,155389,101256],{},[31,155391,146686],{},[31,155393,146694],{},[755,155395,155396,155397,1008,155400,1008,155403,29036],{},"Web 后端：",[31,155398,155399],{},"Flask",[31,155401,155402],{},"FastAPI",[31,155404,155405],{},"Django",[755,155407,155408,155409,1008,155411,1008,155414,29036],{},"爬虫：",[31,155410,146671],{},[31,155412,155413],{},"BeautifulSoup",[31,155415,155416],{},"Scrapy",[755,155418,155419,155420,1008,155422,155425],{},"测试开发：",[31,155421,146718],{},[31,155423,155424],{},"selenium","、接口测试。",[755,155427,155428,155429,1008,155431,1008,155433,29036],{},"人工智能：",[31,155430,101256],{},[31,155432,146686],{},[31,155434,155435],{},"pytorch",[755,155437,155438,155439,1008,155441,1008,155444,29036],{},"运维脚本：",[31,155440,146287],{},[31,155442,155443],{},"subprocess",[31,155445,155446],{},"paramiko",[108,155448,155449],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155451,155453],{"id":155452},"_1215-结课练习","12.15 结课练习",[752,155455,155456,155459,155462,155465,155468,155471,155474,155477],{},[755,155457,155458],{},"完成函数版学生管理系统。",[755,155460,155461],{},"给学生管理系统增加 JSON 持久化。",[755,155463,155464],{},"给学生管理系统增加异常处理。",[755,155466,155467],{},"把学生管理系统改成面向对象版。",[755,155469,155470],{},"使用 pyecharts 绘制学生成绩柱状图。",[755,155472,155473],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[755,155475,155476],{},"按品类统计销售额并绘制柱状图。",[755,155478,155479],{},"写一份自己的 Python 学习路线图。",[45,155481,155482],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":29,"searchDepth":51,"depth":51,"links":155484},[155485,155486,155489,155490,155491,155497,155498,155499,155500,155501,155502,155503,155504,155505,155506],{"id":152201,"depth":51,"text":152202},{"id":152251,"depth":51,"text":152252,"children":155487},[155488],{"id":152255,"depth":60,"text":152256},{"id":152294,"depth":51,"text":152295},{"id":153768,"depth":51,"text":153769},{"id":154106,"depth":51,"text":154107,"children":155492},[155493,155494,155495,155496],{"id":154110,"depth":60,"text":154111},{"id":154250,"depth":60,"text":154251},{"id":154340,"depth":60,"text":154341},{"id":154426,"depth":60,"text":154427},{"id":154467,"depth":51,"text":154468},{"id":154660,"depth":51,"text":154661},{"id":154897,"depth":51,"text":154898},{"id":155088,"depth":51,"text":155089},{"id":155130,"depth":51,"text":155131},{"id":155256,"depth":51,"text":155257},{"id":155286,"depth":51,"text":155287},{"id":155313,"depth":51,"text":155314},{"id":155366,"depth":51,"text":155367},{"id":155452,"depth":51,"text":155453},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152193,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155513,"title":155514,"body":155515,"description":723,"extension":724,"meta":157984,"navigation":726,"path":157985,"seo":157986,"stem":157987,"__hash__":157988},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155516,"toc":157959},[155517,155520,155524,155527,155530,155550,155553,155576,155579,155582,155604,155607,155629,155633,155636,155676,155679,155800,155804,155807,155847,155850,155874,155877,155881,155884,155898,155931,155934,155969,155972,155995,155998,156031,156034,156036,156042,156117,156120,156126,156143,156183,156187,156190,156236,156238,156276,156279,156314,156317,156352,156355,156387,156390,156409,156413,156417,156530,156532,156607,156611,156657,156660,156686,156695,156699,156702,156765,156773,156801,156805,156845,156910,156914,156917,156956,156959,157004,157007,157068,157072,157099,157102,157130,157133,157137,157141,157206,157209,157247,157250,157282,157286,157385,157389,157392,157465,157468,157516,157520,157526,157566,157569,157616,157619,157668,157672,157674,157688,157690,157871,157875,157902,157922,157929,157933,157950,157956],[10,155518,155514],{"id":155519},"_2-基础语法变量与字符串",[14,155521,155523],{"id":155522},"_21-注释","2.1 注释",[108,155525,155526],{},"注释是给人看的说明文字，不会被 Python 执行。",[108,155528,155529],{},"单行注释：",[24,155531,155533],{"className":31029,"code":155532,"language":31031,"meta":29,"style":29},"# 这是单行注释\nprint(\"hello\")\n",[31,155534,155535,155540],{"__ignoreMap":29},[34,155536,155537],{"class":36,"line":37},[34,155538,155539],{"class":205},"# 这是单行注释\n",[34,155541,155542,155544,155546,155548],{"class":36,"line":51},[34,155543,31066],{"class":63},[34,155545,801],{"class":40},[34,155547,6497],{"class":156},[34,155549,807],{"class":40},[108,155551,155552],{},"多行说明常用三引号：",[24,155554,155556],{"className":31029,"code":155555,"language":31031,"meta":29,"style":29},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[31,155557,155558,155562,155567,155572],{"__ignoreMap":29},[34,155559,155560],{"class":36,"line":37},[34,155561,96328],{"class":156},[34,155563,155564],{"class":36,"line":51},[34,155565,155566],{"class":156},"这是多行说明。\n",[34,155568,155569],{"class":36,"line":60},[34,155570,155571],{"class":156},"常用于文件顶部说明、函数说明等。\n",[34,155573,155574],{"class":36,"line":76},[34,155575,96328],{"class":156},[108,155577,155578],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[108,155580,155581],{},"不好：",[24,155583,155585],{"className":31029,"code":155584,"language":31031,"meta":29,"style":29},"# age 加 1\nage = age + 1\n",[31,155586,155587,155592],{"__ignoreMap":29},[34,155588,155589],{"class":36,"line":37},[34,155590,155591],{"class":205},"# age 加 1\n",[34,155593,155594,155596,155598,155600,155602],{"class":36,"line":51},[34,155595,147047],{"class":40},[34,155597,153],{"class":87},[34,155599,16359],{"class":40},[34,155601,1276],{"class":87},[34,155603,56342],{"class":63},[108,155605,155606],{},"较好：",[24,155608,155610],{"className":31029,"code":155609,"language":31031,"meta":29,"style":29},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[31,155611,155612,155617],{"__ignoreMap":29},[34,155613,155614],{"class":36,"line":37},[34,155615,155616],{"class":205},"# 用户过完生日后，年龄增加一岁\n",[34,155618,155619,155621,155623,155625,155627],{"class":36,"line":51},[34,155620,147047],{"class":40},[34,155622,153],{"class":87},[34,155624,16359],{"class":40},[34,155626,1276],{"class":87},[34,155628,56342],{"class":63},[14,155630,155632],{"id":155631},"_22-字面量","2.2 字面量",[108,155634,155635],{},"字面量就是代码中直接写出来的数据。",[24,155637,155639],{"className":31029,"code":155638,"language":31031,"meta":29,"style":29},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[31,155640,155641,155648,155655,155662,155669],{"__ignoreMap":29},[34,155642,155643,155645],{"class":36,"line":37},[34,155644,1106],{"class":63},[34,155646,155647],{"class":205},"          # 整数\n",[34,155649,155650,155652],{"class":36,"line":51},[34,155651,848],{"class":63},[34,155653,155654],{"class":205},"         # 小数\n",[34,155656,155657,155659],{"class":36,"line":60},[34,155658,6497],{"class":156},[34,155660,155661],{"class":205},"      # 字符串\n",[34,155663,155664,155666],{"class":36,"line":76},[34,155665,32127],{"class":63},[34,155667,155668],{"class":205},"         # 布尔值\n",[34,155670,155671,155673],{"class":36,"line":93},[34,155672,96316],{"class":63},[34,155674,155675],{"class":205},"         # 空值\n",[108,155677,155678],{},"常见字面量类型：",[934,155680,155681,155691],{},[937,155682,155683],{},[940,155684,155685,155687,155689],{},[943,155686,24389],{},[943,155688,28143],{},[943,155690,26521],{},[980,155692,155693,155704,155715,155726,155738,155750,155762,155775,155787],{},[940,155694,155695,155697,155701],{},[985,155696,804],{},[985,155698,155699],{},[31,155700,1106],{},[985,155702,155703],{},"整数",[940,155705,155706,155708,155712],{},[985,155707,840],{},[985,155709,155710],{},[31,155711,848],{},[985,155713,155714],{},"浮点数",[940,155716,155717,155719,155723],{},[985,155718,1962],{},[985,155720,155721],{},[31,155722,6497],{},[985,155724,155725],{},"字符串",[940,155727,155728,155730,155736],{},[985,155729,2014],{},[985,155731,155732,1008,155734],{},[31,155733,32127],{},[31,155735,34638],{},[985,155737,66653],{},[940,155739,155740,155743,155747],{},[985,155741,155742],{},"NoneType",[985,155744,155745],{},[31,155746,96316],{},[985,155748,155749],{},"空值",[940,155751,155752,155754,155759],{},[985,155753,154571],{},[985,155755,155756],{},[31,155757,155758],{},"[1, 2, 3]",[985,155760,155761],{},"列表",[940,155763,155764,155767,155772],{},[985,155765,155766],{},"tuple",[985,155768,155769],{},[31,155770,155771],{},"(1, 2, 3)",[985,155773,155774],{},"元组",[940,155776,155777,155779,155784],{},[985,155778,115176],{},[985,155780,155781],{},[31,155782,155783],{},"{\"name\": \"张三\"}",[985,155785,155786],{},"字典",[940,155788,155789,155792,155797],{},[985,155790,155791],{},"set",[985,155793,155794],{},[31,155795,155796],{},"{1, 2, 3}",[985,155798,155799],{},"集合",[14,155801,155803],{"id":155802},"_23-变量","2.3 变量",[108,155805,155806],{},"变量是保存数据的名字。",[24,155808,155810],{"className":31029,"code":155809,"language":31031,"meta":29,"style":29},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[31,155811,155812,155820,155828,155838],{"__ignoreMap":29},[34,155813,155814,155816,155818],{"class":36,"line":37},[34,155815,147037],{"class":40},[34,155817,153],{"class":87},[34,155819,149854],{"class":156},[34,155821,155822,155824,155826],{"class":36,"line":51},[34,155823,147047],{"class":40},[34,155825,153],{"class":87},[34,155827,147052],{"class":63},[34,155829,155830,155833,155835],{"class":36,"line":60},[34,155831,155832],{"class":40},"height ",[34,155834,153],{"class":87},[34,155836,155837],{"class":63}," 1.75\n",[34,155839,155840,155843,155845],{"class":36,"line":76},[34,155841,155842],{"class":40},"is_student ",[34,155844,153],{"class":87},[34,155846,154100],{"class":63},[108,155848,155849],{},"Python 的变量不需要提前声明类型：",[24,155851,155853],{"className":31029,"code":155852,"language":31031,"meta":29,"style":29},"score = 100\nscore = \"满分\"\n",[31,155854,155855,155865],{"__ignoreMap":29},[34,155856,155857,155860,155862],{"class":36,"line":37},[34,155858,155859],{"class":40},"score ",[34,155861,153],{"class":87},[34,155863,155864],{"class":63}," 100\n",[34,155866,155867,155869,155871],{"class":36,"line":51},[34,155868,155859],{"class":40},[34,155870,153],{"class":87},[34,155872,155873],{"class":156}," \"满分\"\n",[108,155875,155876],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155878,155880],{"id":155879},"_24-变量命名规则","2.4 变量命名规则",[108,155882,155883],{},"硬性规则：",[752,155885,155886,155889,155892,155895],{},[755,155887,155888],{},"只能由字母、数字、下划线组成。",[755,155890,155891],{},"不能以数字开头。",[755,155893,155894],{},"不能使用 Python 关键字。",[755,155896,155897],{},"区分大小写。",[24,155899,155901],{"className":31029,"code":155900,"language":31031,"meta":29,"style":29},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[31,155902,155903,155912,155921],{"__ignoreMap":29},[34,155904,155905,155908,155910],{"class":36,"line":37},[34,155906,155907],{"class":40},"user_name ",[34,155909,153],{"class":87},[34,155911,147042],{"class":156},[34,155913,155914,155917,155919],{"class":36,"line":51},[34,155915,155916],{"class":40},"age2 ",[34,155918,153],{"class":87},[34,155920,147052],{"class":63},[34,155922,155923,155926,155928],{"class":36,"line":60},[34,155924,155925],{"class":40},"_token ",[34,155927,153],{"class":87},[34,155929,155930],{"class":156}," \"abc\"\n",[108,155932,155933],{},"错误写法：",[24,155935,155937],{"className":31029,"code":155936,"language":31031,"meta":29,"style":29},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[31,155938,155939,155948,155960],{"__ignoreMap":29},[34,155940,155941,155944,155946],{"class":36,"line":37},[34,155942,155943],{"class":78033},"2age",[34,155945,14217],{"class":87},[34,155947,147052],{"class":63},[34,155949,155950,155952,155954,155956,155958],{"class":36,"line":51},[34,155951,132085],{"class":40},[34,155953,1327],{"class":87},[34,155955,147037],{"class":40},[34,155957,153],{"class":87},[34,155959,147042],{"class":156},[34,155961,155962,155964,155966],{"class":36,"line":60},[34,155963,15347],{"class":87},[34,155965,14217],{"class":87},[34,155967,155968],{"class":156}," \"一班\"\n",[108,155970,155971],{},"查看关键字：",[24,155973,155975],{"className":31029,"code":155974,"language":31031,"meta":29,"style":29},"import keyword\n\nprint(keyword.kwlist)\n",[31,155976,155977,155984,155988],{"__ignoreMap":29},[34,155978,155979,155981],{"class":36,"line":37},[34,155980,31043],{"class":87},[34,155982,155983],{"class":40}," keyword\n",[34,155985,155986],{"class":36,"line":51},[34,155987,3053],{"emptyLinePlaceholder":726},[34,155989,155990,155992],{"class":36,"line":60},[34,155991,31066],{"class":63},[34,155993,155994],{"class":40},"(keyword.kwlist)\n",[108,155996,155997],{},"推荐命名风格：",[24,155999,156001],{"className":31029,"code":156000,"language":31031,"meta":29,"style":29},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[31,156002,156003,156012,156022],{"__ignoreMap":29},[34,156004,156005,156008,156010],{"class":36,"line":37},[34,156006,156007],{"class":40},"student_name ",[34,156009,153],{"class":87},[34,156011,149854],{"class":156},[34,156013,156014,156017,156019],{"class":36,"line":51},[34,156015,156016],{"class":40},"total_price ",[34,156018,153],{"class":87},[34,156020,156021],{"class":63}," 99.8\n",[34,156023,156024,156027,156029],{"class":36,"line":60},[34,156025,156026],{"class":40},"is_finished ",[34,156028,153],{"class":87},[34,156030,126437],{"class":63},[108,156032,156033],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156035,51383],{"id":51382},[108,156037,104996,156038,156041],{},[31,156039,156040],{},"type()"," 查看数据类型：",[24,156043,156045],{"className":31029,"code":156044,"language":31031,"meta":29,"style":29},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[31,156046,156047,156061,156075,156089,156103],{"__ignoreMap":29},[34,156048,156049,156051,156053,156055,156057,156059],{"class":36,"line":37},[34,156050,31066],{"class":63},[34,156052,801],{"class":40},[34,156054,103737],{"class":63},[34,156056,801],{"class":40},[34,156058,1106],{"class":63},[34,156060,31148],{"class":40},[34,156062,156063,156065,156067,156069,156071,156073],{"class":36,"line":51},[34,156064,31066],{"class":63},[34,156066,801],{"class":40},[34,156068,103737],{"class":63},[34,156070,801],{"class":40},[34,156072,848],{"class":63},[34,156074,31148],{"class":40},[34,156076,156077,156079,156081,156083,156085,156087],{"class":36,"line":60},[34,156078,31066],{"class":63},[34,156080,801],{"class":40},[34,156082,103737],{"class":63},[34,156084,801],{"class":40},[34,156086,6497],{"class":156},[34,156088,31148],{"class":40},[34,156090,156091,156093,156095,156097,156099,156101],{"class":36,"line":76},[34,156092,31066],{"class":63},[34,156094,801],{"class":40},[34,156096,103737],{"class":63},[34,156098,801],{"class":40},[34,156100,32127],{"class":63},[34,156102,31148],{"class":40},[34,156104,156105,156107,156109,156111,156113,156115],{"class":36,"line":93},[34,156106,31066],{"class":63},[34,156108,801],{"class":40},[34,156110,103737],{"class":63},[34,156112,801],{"class":40},[34,156114,96316],{"class":63},[34,156116,31148],{"class":40},[108,156118,156119],{},"输出类似：",[24,156121,156124],{"className":156122,"code":156123,"language":5840,"meta":29},[5838],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[31,156125,156123],{"__ignoreMap":29},[108,156127,9678,156128,107913,156130,156132,156133,156135,156136,22152,156138,156135,156140,156142],{},[31,156129,2014],{},[31,156131,804],{}," 的子类，",[31,156134,32127],{}," 可以当作 ",[31,156137,1013],{},[31,156139,34638],{},[31,156141,987],{},"，但业务代码中不要滥用。",[24,156144,156146],{"className":31029,"code":156145,"language":31031,"meta":29,"style":29},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[31,156147,156148,156166],{"__ignoreMap":29},[34,156149,156150,156152,156154,156156,156158,156160,156163],{"class":36,"line":37},[34,156151,31066],{"class":63},[34,156153,801],{"class":40},[34,156155,32127],{"class":63},[34,156157,46217],{"class":87},[34,156159,25771],{"class":63},[34,156161,156162],{"class":40},")   ",[34,156164,156165],{"class":205},"# 2\n",[34,156167,156168,156170,156172,156174,156176,156178,156180],{"class":36,"line":51},[34,156169,31066],{"class":63},[34,156171,801],{"class":40},[34,156173,34638],{"class":63},[34,156175,46217],{"class":87},[34,156177,25771],{"class":63},[34,156179,46459],{"class":40},[34,156181,156182],{"class":205},"# 1\n",[14,156184,156186],{"id":156185},"_26-类型转换","2.6 类型转换",[108,156188,156189],{},"常用转换函数：",[24,156191,156193],{"className":31029,"code":156192,"language":31031,"meta":29,"style":29},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[31,156194,156195,156205,156216,156226],{"__ignoreMap":29},[34,156196,156197,156199,156201,156203],{"class":36,"line":37},[34,156198,804],{"class":63},[34,156200,801],{"class":40},[34,156202,54961],{"class":156},[34,156204,807],{"class":40},[34,156206,156207,156209,156211,156214],{"class":36,"line":51},[34,156208,840],{"class":63},[34,156210,801],{"class":40},[34,156212,156213],{"class":156},"\"3.14\"",[34,156215,807],{"class":40},[34,156217,156218,156220,156222,156224],{"class":36,"line":60},[34,156219,1962],{"class":63},[34,156221,801],{"class":40},[34,156223,1106],{"class":63},[34,156225,807],{"class":40},[34,156227,156228,156230,156232,156234],{"class":36,"line":76},[34,156229,2014],{"class":63},[34,156231,801],{"class":40},[34,156233,1013],{"class":63},[34,156235,807],{"class":40},[108,156237,15788],{},[24,156239,156241],{"className":31029,"code":156240,"language":31031,"meta":29,"style":29},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[31,156242,156243,156252,156263],{"__ignoreMap":29},[34,156244,156245,156247,156249],{"class":36,"line":37},[34,156246,147047],{"class":40},[34,156248,153],{"class":87},[34,156250,156251],{"class":156}," \"18\"\n",[34,156253,156254,156256,156258,156260],{"class":36,"line":51},[34,156255,147047],{"class":40},[34,156257,153],{"class":87},[34,156259,3035],{"class":63},[34,156261,156262],{"class":40},"(age)\n",[34,156264,156265,156267,156270,156272,156274],{"class":36,"line":60},[34,156266,31066],{"class":63},[34,156268,156269],{"class":40},"(age ",[34,156271,1276],{"class":87},[34,156273,25771],{"class":63},[34,156275,807],{"class":40},[108,156277,156278],{},"输入得到的内容永远是字符串：",[24,156280,156282],{"className":31029,"code":156281,"language":31031,"meta":29,"style":29},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[31,156283,156284,156300],{"__ignoreMap":29},[34,156285,156286,156289,156291,156293,156295,156298],{"class":36,"line":37},[34,156287,156288],{"class":40},"num ",[34,156290,153],{"class":87},[34,156292,61248],{"class":63},[34,156294,801],{"class":40},[34,156296,156297],{"class":156},"\"请输入数字:\"",[34,156299,807],{"class":40},[34,156301,156302,156304,156306,156308,156311],{"class":36,"line":51},[34,156303,31066],{"class":63},[34,156305,801],{"class":40},[34,156307,103737],{"class":63},[34,156309,156310],{"class":40},"(num))  ",[34,156312,156313],{"class":205},"# str\n",[108,156315,156316],{},"如果要做数学运算，必须转换：",[24,156318,156320],{"className":31029,"code":156319,"language":31031,"meta":29,"style":29},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[31,156321,156322,156340],{"__ignoreMap":29},[34,156323,156324,156326,156328,156330,156332,156334,156336,156338],{"class":36,"line":37},[34,156325,156288],{"class":40},[34,156327,153],{"class":87},[34,156329,3035],{"class":63},[34,156331,801],{"class":40},[34,156333,669],{"class":63},[34,156335,801],{"class":40},[34,156337,156297],{"class":156},[34,156339,31148],{"class":40},[34,156341,156342,156344,156346,156348,156350],{"class":36,"line":51},[34,156343,31066],{"class":63},[34,156345,46270],{"class":40},[34,156347,1276],{"class":87},[34,156349,2691],{"class":63},[34,156351,807],{"class":40},[108,156353,156354],{},"常见错误：",[24,156356,156358],{"className":31029,"code":156357,"language":31031,"meta":29,"style":29},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[31,156359,156360,156373],{"__ignoreMap":29},[34,156361,156362,156364,156366,156368,156370],{"class":36,"line":37},[34,156363,804],{"class":63},[34,156365,801],{"class":40},[34,156367,156213],{"class":156},[34,156369,156162],{"class":40},[34,156371,156372],{"class":205},"# 错误\n",[34,156374,156375,156377,156379,156382,156385],{"class":36,"line":51},[34,156376,804],{"class":63},[34,156378,801],{"class":40},[34,156380,156381],{"class":156},"\"abc\"",[34,156383,156384],{"class":40},")    ",[34,156386,156372],{"class":205},[108,156388,156389],{},"正确写法：",[24,156391,156393],{"className":31029,"code":156392,"language":31031,"meta":29,"style":29},"num = float(\"3.14\")\n",[31,156394,156395],{"__ignoreMap":29},[34,156396,156397,156399,156401,156403,156405,156407],{"class":36,"line":37},[34,156398,156288],{"class":40},[34,156400,153],{"class":87},[34,156402,110427],{"class":63},[34,156404,801],{"class":40},[34,156406,156213],{"class":156},[34,156408,807],{"class":40},[14,156410,156412],{"id":156411},"_27-运算符","2.7 运算符",[19,156414,156416],{"id":156415},"_271-算术运算符","2.7.1 算术运算符",[934,156418,156419,156430],{},[937,156420,156421],{},[940,156422,156423,156426,156428],{},[943,156424,156425],{},"运算符",[943,156427,26521],{},[943,156429,28143],{},[980,156431,156432,156446,156460,156474,156488,156502,156516],{},[940,156433,156434,156438,156441],{},[985,156435,156436],{},[31,156437,1276],{},[985,156439,156440],{},"加法",[985,156442,156443],{},[31,156444,156445],{},"1 + 2",[940,156447,156448,156452,156455],{},[985,156449,156450],{},[31,156451,1327],{},[985,156453,156454],{},"减法",[985,156456,156457],{},[31,156458,156459],{},"5 - 3",[940,156461,156462,156466,156469],{},[985,156463,156464],{},[31,156465,1250],{},[985,156467,156468],{},"乘法",[985,156470,156471],{},[31,156472,156473],{},"2 * 3",[940,156475,156476,156480,156483],{},[985,156477,156478],{},[31,156479,1379],{},[985,156481,156482],{},"除法，结果是浮点数",[985,156484,156485],{},[31,156486,156487],{},"5 \u002F 2",[940,156489,156490,156494,156497],{},[985,156491,156492],{},[31,156493,33980],{},[985,156495,156496],{},"整除",[985,156498,156499],{},[31,156500,156501],{},"5 \u002F\u002F 2",[940,156503,156504,156508,156511],{},[985,156505,156506],{},[31,156507,1123],{},[985,156509,156510],{},"取余",[985,156512,156513],{},[31,156514,156515],{},"5 % 2",[940,156517,156518,156522,156525],{},[985,156519,156520],{},[31,156521,11314],{},[985,156523,156524],{},"幂运算",[985,156526,156527],{},[31,156528,156529],{},"2 ** 3",[108,156531,15788],{},[24,156533,156535],{"className":31029,"code":156534,"language":31031,"meta":29,"style":29},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[31,156536,156537,156555,156572,156589],{"__ignoreMap":29},[34,156538,156539,156541,156543,156545,156548,156550,156552],{"class":36,"line":37},[34,156540,31066],{"class":63},[34,156542,801],{"class":40},[34,156544,1114],{"class":63},[34,156546,156547],{"class":87}," \u002F",[34,156549,15408],{"class":63},[34,156551,156162],{"class":40},[34,156553,156554],{"class":205},"# 2.5\n",[34,156556,156557,156559,156561,156563,156566,156568,156570],{"class":36,"line":51},[34,156558,31066],{"class":63},[34,156560,801],{"class":40},[34,156562,1114],{"class":63},[34,156564,156565],{"class":87}," \u002F\u002F",[34,156567,15408],{"class":63},[34,156569,46459],{"class":40},[34,156571,156165],{"class":205},[34,156573,156574,156576,156578,156580,156583,156585,156587],{"class":36,"line":60},[34,156575,31066],{"class":63},[34,156577,801],{"class":40},[34,156579,1114],{"class":63},[34,156581,156582],{"class":87}," %",[34,156584,15408],{"class":63},[34,156586,156162],{"class":40},[34,156588,156182],{"class":205},[34,156590,156591,156593,156595,156597,156600,156602,156604],{"class":36,"line":76},[34,156592,31066],{"class":63},[34,156594,801],{"class":40},[34,156596,875],{"class":63},[34,156598,156599],{"class":87}," **",[34,156601,78700],{"class":63},[34,156603,46459],{"class":40},[34,156605,156606],{"class":205},"# 8\n",[19,156608,156610],{"id":156609},"_272-赋值运算符","2.7.2 赋值运算符",[24,156612,156614],{"className":31029,"code":156613,"language":31031,"meta":29,"style":29},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[31,156615,156616,156624,156632,156640,156648],{"__ignoreMap":29},[34,156617,156618,156620,156622],{"class":36,"line":37},[34,156619,156288],{"class":40},[34,156621,153],{"class":87},[34,156623,59071],{"class":63},[34,156625,156626,156628,156630],{"class":36,"line":51},[34,156627,156288],{"class":40},[34,156629,10130],{"class":87},[34,156631,55072],{"class":63},[34,156633,156634,156636,156638],{"class":36,"line":60},[34,156635,156288],{"class":40},[34,156637,150753],{"class":87},[34,156639,48374],{"class":63},[34,156641,156642,156644,156646],{"class":36,"line":76},[34,156643,156288],{"class":40},[34,156645,137649],{"class":87},[34,156647,120666],{"class":63},[34,156649,156650,156652,156655],{"class":36,"line":93},[34,156651,156288],{"class":40},[34,156653,156654],{"class":87},"\u002F=",[34,156656,48374],{"class":63},[108,156658,156659],{},"等价关系：",[24,156661,156663],{"className":31029,"code":156662,"language":31031,"meta":29,"style":29},"num += 1\nnum = num + 1\n",[31,156664,156665,156673],{"__ignoreMap":29},[34,156666,156667,156669,156671],{"class":36,"line":37},[34,156668,156288],{"class":40},[34,156670,10130],{"class":87},[34,156672,56342],{"class":63},[34,156674,156675,156677,156679,156682,156684],{"class":36,"line":51},[34,156676,156288],{"class":40},[34,156678,153],{"class":87},[34,156680,156681],{"class":40}," num ",[34,156683,1276],{"class":87},[34,156685,56342],{"class":63},[108,156687,156688,156689,101648,156692,29036],{},"Python 没有 ",[31,156690,156691],{},"num++",[31,156693,156694],{},"num--",[19,156696,156698],{"id":156697},"_273-比较运算符","2.7.3 比较运算符",[108,156700,156701],{},"比较运算结果是布尔值。",[24,156703,156705],{"className":31029,"code":156704,"language":31031,"meta":29,"style":29},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[31,156706,156707,156721,156736,156750],{"__ignoreMap":29},[34,156708,156709,156711,156713,156715,156717,156719],{"class":36,"line":37},[34,156710,31066],{"class":63},[34,156712,801],{"class":40},[34,156714,1241],{"class":63},[34,156716,26874],{"class":87},[34,156718,2801],{"class":63},[34,156720,807],{"class":40},[34,156722,156723,156725,156727,156729,156732,156734],{"class":36,"line":51},[34,156724,31066],{"class":63},[34,156726,801],{"class":40},[34,156728,1241],{"class":63},[34,156730,156731],{"class":87}," >=",[34,156733,2691],{"class":63},[34,156735,807],{"class":40},[34,156737,156738,156740,156742,156744,156746,156748],{"class":36,"line":60},[34,156739,31066],{"class":63},[34,156741,801],{"class":40},[34,156743,1241],{"class":63},[34,156745,102189],{"class":87},[34,156747,2736],{"class":63},[34,156749,807],{"class":40},[34,156751,156752,156754,156756,156758,156761,156763],{"class":36,"line":76},[34,156753,31066],{"class":63},[34,156755,801],{"class":40},[34,156757,1241],{"class":63},[34,156759,156760],{"class":87}," !=",[34,156762,2736],{"class":63},[34,156764,807],{"class":40},[108,156766,156767,156768,156770,156771,29036],{},"注意：判断相等用 ",[31,156769,3602],{},"，赋值用 ",[31,156772,153],{},[24,156774,156776],{"className":31029,"code":156775,"language":31031,"meta":29,"style":29},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[31,156777,156778,156790],{"__ignoreMap":29},[34,156779,156780,156782,156784,156787],{"class":36,"line":37},[34,156781,147047],{"class":40},[34,156783,153],{"class":87},[34,156785,156786],{"class":63}," 18",[34,156788,156789],{"class":205},"       # 赋值\n",[34,156791,156792,156794,156796,156798],{"class":36,"line":51},[34,156793,147047],{"class":40},[34,156795,3602],{"class":87},[34,156797,156786],{"class":63},[34,156799,156800],{"class":205},"      # 判断是否相等\n",[19,156802,156804],{"id":156803},"_274-逻辑运算符","2.7.4 逻辑运算符",[934,156806,156807,156815],{},[937,156808,156809],{},[940,156810,156811,156813],{},[943,156812,156425],{},[943,156814,26521],{},[980,156816,156817,156826,156835],{},[940,156818,156819,156823],{},[985,156820,156821],{},[31,156822,31113],{},[985,156824,156825],{},"并且",[940,156827,156828,156832],{},[985,156829,156830],{},[31,156831,115720],{},[985,156833,156834],{},"或者",[940,156836,156837,156842],{},[985,156838,156839],{},[31,156840,156841],{},"not",[985,156843,156844],{},"取反",[24,156846,156848],{"className":31029,"code":156847,"language":31031,"meta":29,"style":29},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[31,156849,156850,156858,156867,156871,156886,156900],{"__ignoreMap":29},[34,156851,156852,156854,156856],{"class":36,"line":37},[34,156853,147047],{"class":40},[34,156855,153],{"class":87},[34,156857,88695],{"class":63},[34,156859,156860,156863,156865],{"class":36,"line":51},[34,156861,156862],{"class":40},"has_ticket ",[34,156864,153],{"class":87},[34,156866,154100],{"class":63},[34,156868,156869],{"class":36,"line":60},[34,156870,3053],{"emptyLinePlaceholder":726},[34,156872,156873,156875,156877,156879,156881,156883],{"class":36,"line":76},[34,156874,31066],{"class":63},[34,156876,156269],{"class":40},[34,156878,2364],{"class":87},[34,156880,156786],{"class":63},[34,156882,121059],{"class":87},[34,156884,156885],{"class":40}," has_ticket)\n",[34,156887,156888,156890,156892,156894,156896,156898],{"class":36,"line":93},[34,156889,31066],{"class":63},[34,156891,156269],{"class":40},[34,156893,41],{"class":87},[34,156895,156786],{"class":63},[34,156897,114831],{"class":87},[34,156899,156885],{"class":40},[34,156901,156902,156904,156906,156908],{"class":36,"line":99},[34,156903,31066],{"class":63},[34,156905,801],{"class":40},[34,156907,156841],{"class":87},[34,156909,156885],{"class":40},[14,156911,156913],{"id":156912},"_28-字符串定义","2.8 字符串定义",[108,156915,156916],{},"三种常见写法：",[24,156918,156920],{"className":31029,"code":156919,"language":31031,"meta":29,"style":29},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[31,156921,156922,156932,156941,156951],{"__ignoreMap":29},[34,156923,156924,156927,156929],{"class":36,"line":37},[34,156925,156926],{"class":40},"name1 ",[34,156928,153],{"class":87},[34,156930,156931],{"class":156}," '小明'\n",[34,156933,156934,156937,156939],{"class":36,"line":51},[34,156935,156936],{"class":40},"name2 ",[34,156938,153],{"class":87},[34,156940,149854],{"class":156},[34,156942,156943,156946,156948],{"class":36,"line":60},[34,156944,156945],{"class":40},"text ",[34,156947,153],{"class":87},[34,156949,156950],{"class":156}," \"\"\"这是多行字符串\n",[34,156952,156953],{"class":36,"line":76},[34,156954,156955],{"class":156},"可以换行\"\"\"\n",[108,156957,156958],{},"字符串中包含引号：",[24,156960,156962],{"className":31029,"code":156961,"language":31031,"meta":29,"style":29},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[31,156963,156964,156974,156984],{"__ignoreMap":29},[34,156965,156966,156969,156971],{"class":36,"line":37},[34,156967,156968],{"class":40},"msg ",[34,156970,153],{"class":87},[34,156972,156973],{"class":156}," \"他说:'你好'\"\n",[34,156975,156976,156979,156981],{"class":36,"line":51},[34,156977,156978],{"class":40},"msg2 ",[34,156980,153],{"class":87},[34,156982,156983],{"class":156}," '他说:\"你好\"'\n",[34,156985,156986,156989,156991,156994,156997,157000,157002],{"class":36,"line":60},[34,156987,156988],{"class":40},"msg3 ",[34,156990,153],{"class":87},[34,156992,156993],{"class":156}," \"他说:",[34,156995,156996],{"class":63},"\\\"",[34,156998,156999],{"class":156},"你好",[34,157001,156996],{"class":63},[34,157003,25786],{"class":156},[108,157005,157006],{},"常见转义字符：",[934,157008,157009,157018],{},[937,157010,157011],{},[940,157012,157013,157016],{},[943,157014,157015],{},"写法",[943,157017,101330],{},[980,157019,157020,157030,157039,157049,157058],{},[940,157021,157022,157027],{},[985,157023,157024],{},[31,157025,157026],{},"\\n",[985,157028,157029],{},"换行",[940,157031,157032,157036],{},[985,157033,157034],{},[31,157035,1894],{},[985,157037,157038],{},"制表符",[940,157040,157041,157046],{},[985,157042,157043],{},[31,157044,157045],{},"\\\\",[985,157047,157048],{},"反斜杠",[940,157050,157051,157055],{},[985,157052,157053],{},[31,157054,156996],{},[985,157056,157057],{},"双引号",[940,157059,157060,157065],{},[985,157061,157062],{},[31,157063,157064],{},"\\'",[985,157066,157067],{},"单引号",[14,157069,157071],{"id":157070},"_29-字符串拼接","2.9 字符串拼接",[24,157073,157075],{"className":31029,"code":157074,"language":31031,"meta":29,"style":29},"name = \"小明\"\nprint(\"你好，\" + name)\n",[31,157076,157077,157085],{"__ignoreMap":29},[34,157078,157079,157081,157083],{"class":36,"line":37},[34,157080,147037],{"class":40},[34,157082,153],{"class":87},[34,157084,149854],{"class":156},[34,157086,157087,157089,157091,157094,157096],{"class":36,"line":51},[34,157088,31066],{"class":63},[34,157090,801],{"class":40},[34,157092,157093],{"class":156},"\"你好，\"",[34,157095,46217],{"class":87},[34,157097,157098],{"class":40}," name)\n",[108,157100,157101],{},"字符串只能和字符串拼接：",[24,157103,157105],{"className":31029,"code":157104,"language":31031,"meta":29,"style":29},"age = 18\nprint(\"年龄:\" + str(age))\n",[31,157106,157107,157115],{"__ignoreMap":29},[34,157108,157109,157111,157113],{"class":36,"line":37},[34,157110,147047],{"class":40},[34,157112,153],{"class":87},[34,157114,147052],{"class":63},[34,157116,157117,157119,157121,157123,157125,157127],{"class":36,"line":51},[34,157118,31066],{"class":63},[34,157120,801],{"class":40},[34,157122,147018],{"class":156},[34,157124,46217],{"class":87},[34,157126,74550],{"class":63},[34,157128,157129],{"class":40},"(age))\n",[108,157131,157132],{},"更推荐使用格式化字符串。",[14,157134,157136],{"id":157135},"_210-字符串格式化","2.10 字符串格式化",[19,157138,157140],{"id":157139},"_2101-百分号格式化","2.10.1 百分号格式化",[24,157142,157144],{"className":31029,"code":157143,"language":31031,"meta":29,"style":29},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[31,157145,157146,157154,157162,157171,157175],{"__ignoreMap":29},[34,157147,157148,157150,157152],{"class":36,"line":37},[34,157149,147037],{"class":40},[34,157151,153],{"class":87},[34,157153,149854],{"class":156},[34,157155,157156,157158,157160],{"class":36,"line":51},[34,157157,147047],{"class":40},[34,157159,153],{"class":87},[34,157161,147052],{"class":63},[34,157163,157164,157166,157168],{"class":36,"line":60},[34,157165,155859],{"class":40},[34,157167,153],{"class":87},[34,157169,157170],{"class":63}," 95.5\n",[34,157172,157173],{"class":36,"line":76},[34,157174,3053],{"emptyLinePlaceholder":726},[34,157176,157177,157179,157181,157184,157187,157190,157193,157196,157199,157201,157203],{"class":36,"line":93},[34,157178,31066],{"class":63},[34,157180,801],{"class":40},[34,157182,157183],{"class":156},"\"姓名:",[34,157185,157186],{"class":63},"%s",[34,157188,157189],{"class":156}," 年龄:",[34,157191,157192],{"class":63},"%d",[34,157194,157195],{"class":156}," 分数:",[34,157197,157198],{"class":63},"%.1f",[34,157200,1046],{"class":156},[34,157202,156582],{"class":87},[34,157204,157205],{"class":40}," (name, age, score))\n",[108,157207,157208],{},"常用占位符：",[934,157210,157211,157220],{},[937,157212,157213],{},[940,157214,157215,157218],{},[943,157216,157217],{},"占位符",[943,157219,26521],{},[980,157221,157222,157230,157238],{},[940,157223,157224,157228],{},[985,157225,157226],{},[31,157227,157186],{},[985,157229,155725],{},[940,157231,157232,157236],{},[985,157233,157234],{},[31,157235,157192],{},[985,157237,155703],{},[940,157239,157240,157245],{},[985,157241,157242],{},[31,157243,157244],{},"%f",[985,157246,155714],{},[108,157248,157249],{},"精度控制：",[24,157251,157253],{"className":31029,"code":157252,"language":31031,"meta":29,"style":29},"price = 12.3456\nprint(\"%.2f\" % price)\n",[31,157254,157255,157264],{"__ignoreMap":29},[34,157256,157257,157259,157261],{"class":36,"line":37},[34,157258,147182],{"class":40},[34,157260,153],{"class":87},[34,157262,157263],{"class":63}," 12.3456\n",[34,157265,157266,157268,157270,157272,157275,157277,157279],{"class":36,"line":51},[34,157267,31066],{"class":63},[34,157269,801],{"class":40},[34,157271,1046],{"class":156},[34,157273,157274],{"class":63},"%.2f",[34,157276,1046],{"class":156},[34,157278,156582],{"class":87},[34,157280,157281],{"class":40}," price)\n",[19,157283,157285],{"id":157284},"_2102-format方法","2.10.2 format方法",[24,157287,157289],{"className":31029,"code":157288,"language":31031,"meta":29,"style":29},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[31,157290,157291,157299,157307,157311,157330,157350],{"__ignoreMap":29},[34,157292,157293,157295,157297],{"class":36,"line":37},[34,157294,147037],{"class":40},[34,157296,153],{"class":87},[34,157298,149854],{"class":156},[34,157300,157301,157303,157305],{"class":36,"line":51},[34,157302,147047],{"class":40},[34,157304,153],{"class":87},[34,157306,147052],{"class":63},[34,157308,157309],{"class":36,"line":60},[34,157310,3053],{"emptyLinePlaceholder":726},[34,157312,157313,157315,157317,157319,157321,157323,157325,157327],{"class":36,"line":76},[34,157314,31066],{"class":63},[34,157316,801],{"class":40},[34,157318,157183],{"class":156},[34,157320,33110],{"class":63},[34,157322,157189],{"class":156},[34,157324,33110],{"class":63},[34,157326,1046],{"class":156},[34,157328,157329],{"class":40},".format(name, age))\n",[34,157331,157332,157334,157336,157338,157341,157343,157346,157348],{"class":36,"line":93},[34,157333,31066],{"class":63},[34,157335,801],{"class":40},[34,157337,157183],{"class":156},[34,157339,157340],{"class":63},"{0}",[34,157342,157189],{"class":156},[34,157344,157345],{"class":63},"{1}",[34,157347,1046],{"class":156},[34,157349,157329],{"class":40},[34,157351,157352,157354,157356,157358,157361,157363,157366,157368,157371,157373,157375,157378,157380,157382],{"class":36,"line":99},[34,157353,31066],{"class":63},[34,157355,801],{"class":40},[34,157357,157183],{"class":156},[34,157359,157360],{"class":63},"{name}",[34,157362,157189],{"class":156},[34,157364,157365],{"class":63},"{age}",[34,157367,1046],{"class":156},[34,157369,157370],{"class":40},".format(",[34,157372,80440],{"class":5869},[34,157374,153],{"class":87},[34,157376,157377],{"class":40},"name, ",[34,157379,70856],{"class":5869},[34,157381,153],{"class":87},[34,157383,157384],{"class":40},"age))\n",[19,157386,157388],{"id":157387},"_2103-f-string","2.10.3 f-string",[108,157390,157391],{},"推荐写法：",[24,157393,157395],{"className":31029,"code":157394,"language":31031,"meta":29,"style":29},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[31,157396,157397,157405,157413,157421,157425],{"__ignoreMap":29},[34,157398,157399,157401,157403],{"class":36,"line":37},[34,157400,147037],{"class":40},[34,157402,153],{"class":87},[34,157404,149854],{"class":156},[34,157406,157407,157409,157411],{"class":36,"line":51},[34,157408,147047],{"class":40},[34,157410,153],{"class":87},[34,157412,147052],{"class":63},[34,157414,157415,157417,157419],{"class":36,"line":60},[34,157416,155859],{"class":40},[34,157418,153],{"class":87},[34,157420,157170],{"class":63},[34,157422,157423],{"class":36,"line":76},[34,157424,3053],{"emptyLinePlaceholder":726},[34,157426,157427,157429,157431,157433,157435,157437,157439,157441,157443,157445,157447,157449,157451,157453,157456,157459,157461,157463],{"class":36,"line":93},[34,157428,31066],{"class":63},[34,157430,801],{"class":40},[34,157432,851],{"class":87},[34,157434,157183],{"class":156},[34,157436,1690],{"class":63},[34,157438,80440],{"class":40},[34,157440,1739],{"class":63},[34,157442,157189],{"class":156},[34,157444,1690],{"class":63},[34,157446,70856],{"class":40},[34,157448,1739],{"class":63},[34,157450,157195],{"class":156},[34,157452,1690],{"class":63},[34,157454,157455],{"class":40},"score",[34,157457,157458],{"class":87},":.1f",[34,157460,1739],{"class":63},[34,157462,1046],{"class":156},[34,157464,807],{"class":40},[108,157466,157467],{},"表达式也可以放进去：",[24,157469,157471],{"className":31029,"code":157470,"language":31031,"meta":29,"style":29},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[31,157472,157473,157481,157489],{"__ignoreMap":29},[34,157474,157475,157477,157479],{"class":36,"line":37},[34,157476,147182],{"class":40},[34,157478,153],{"class":87},[34,157480,147187],{"class":63},[34,157482,157483,157485,157487],{"class":36,"line":51},[34,157484,147192],{"class":40},[34,157486,153],{"class":87},[34,157488,55072],{"class":63},[34,157490,157491,157493,157495,157497,157500,157502,157504,157506,157509,157511,157514],{"class":36,"line":60},[34,157492,31066],{"class":63},[34,157494,801],{"class":40},[34,157496,851],{"class":87},[34,157498,157499],{"class":156},"\"总价:",[34,157501,1690],{"class":63},[34,157503,147182],{"class":40},[34,157505,1250],{"class":87},[34,157507,157508],{"class":40}," count",[34,157510,1739],{"class":63},[34,157512,157513],{"class":156},"元\"",[34,157515,807],{"class":40},[14,157517,157519],{"id":157518},"_211-input输入","2.11 input输入",[108,157521,157522,157525],{},[31,157523,157524],{},"input()"," 会暂停程序，等待用户输入。",[24,157527,157529],{"className":31029,"code":157528,"language":31031,"meta":29,"style":29},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[31,157530,157531,157545],{"__ignoreMap":29},[34,157532,157533,157535,157537,157539,157541,157543],{"class":36,"line":37},[34,157534,147037],{"class":40},[34,157536,153],{"class":87},[34,157538,61248],{"class":63},[34,157540,801],{"class":40},[34,157542,152880],{"class":156},[34,157544,807],{"class":40},[34,157546,157547,157549,157551,157553,157556,157558,157560,157562,157564],{"class":36,"line":51},[34,157548,31066],{"class":63},[34,157550,801],{"class":40},[34,157552,851],{"class":87},[34,157554,157555],{"class":156},"\"你好，",[34,157557,1690],{"class":63},[34,157559,80440],{"class":40},[34,157561,1739],{"class":63},[34,157563,1046],{"class":156},[34,157565,807],{"class":40},[108,157567,157568],{},"输入整数：",[24,157570,157572],{"className":31029,"code":157571,"language":31031,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[31,157573,157574,157592],{"__ignoreMap":29},[34,157575,157576,157578,157580,157582,157584,157586,157588,157590],{"class":36,"line":37},[34,157577,147047],{"class":40},[34,157579,153],{"class":87},[34,157581,3035],{"class":63},[34,157583,801],{"class":40},[34,157585,669],{"class":63},[34,157587,801],{"class":40},[34,157589,152895],{"class":156},[34,157591,31148],{"class":40},[34,157593,157594,157596,157598,157600,157603,157605,157607,157609,157612,157614],{"class":36,"line":51},[34,157595,31066],{"class":63},[34,157597,801],{"class":40},[34,157599,851],{"class":87},[34,157601,157602],{"class":156},"\"明年你",[34,157604,1690],{"class":63},[34,157606,147047],{"class":40},[34,157608,1276],{"class":87},[34,157610,157611],{"class":63}," 1}",[34,157613,149905],{"class":156},[34,157615,807],{"class":40},[108,157617,157618],{},"输入小数：",[24,157620,157622],{"className":31029,"code":157621,"language":31031,"meta":29,"style":29},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[31,157623,157624,157643],{"__ignoreMap":29},[34,157625,157626,157628,157630,157632,157634,157636,157638,157641],{"class":36,"line":37},[34,157627,155832],{"class":40},[34,157629,153],{"class":87},[34,157631,110427],{"class":63},[34,157633,801],{"class":40},[34,157635,669],{"class":63},[34,157637,801],{"class":40},[34,157639,157640],{"class":156},"\"请输入身高:\"",[34,157642,31148],{"class":40},[34,157644,157645,157647,157649,157651,157654,157656,157658,157661,157663,157666],{"class":36,"line":51},[34,157646,31066],{"class":63},[34,157648,801],{"class":40},[34,157650,851],{"class":87},[34,157652,157653],{"class":156},"\"身高:",[34,157655,1690],{"class":63},[34,157657,25634],{"class":40},[34,157659,157660],{"class":87},":.2f",[34,157662,1739],{"class":63},[34,157664,157665],{"class":156},"米\"",[34,157667,807],{"class":40},[14,157669,157671],{"id":157670},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[108,157673,123922],{},[752,157675,157676,157679,157682,157685],{},[755,157677,157678],{},"输入商品单价。",[755,157680,157681],{},"输入购买数量。",[755,157683,157684],{},"输入折扣，例如 0.8 表示八折。",[755,157686,157687],{},"输出最终金额，保留两位小数。",[108,157689,10688],{},[24,157691,157693],{"className":31029,"code":157692,"language":31031,"meta":29,"style":29},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[31,157694,157695,157714,157733,157753,157757,157777,157781,157804,157825,157847],{"__ignoreMap":29},[34,157696,157697,157699,157701,157703,157705,157707,157709,157712],{"class":36,"line":37},[34,157698,147182],{"class":40},[34,157700,153],{"class":87},[34,157702,110427],{"class":63},[34,157704,801],{"class":40},[34,157706,669],{"class":63},[34,157708,801],{"class":40},[34,157710,157711],{"class":156},"\"请输入商品单价:\"",[34,157713,31148],{"class":40},[34,157715,157716,157718,157720,157722,157724,157726,157728,157731],{"class":36,"line":51},[34,157717,147192],{"class":40},[34,157719,153],{"class":87},[34,157721,3035],{"class":63},[34,157723,801],{"class":40},[34,157725,669],{"class":63},[34,157727,801],{"class":40},[34,157729,157730],{"class":156},"\"请输入购买数量:\"",[34,157732,31148],{"class":40},[34,157734,157735,157738,157740,157742,157744,157746,157748,157751],{"class":36,"line":60},[34,157736,157737],{"class":40},"discount ",[34,157739,153],{"class":87},[34,157741,110427],{"class":63},[34,157743,801],{"class":40},[34,157745,669],{"class":63},[34,157747,801],{"class":40},[34,157749,157750],{"class":156},"\"请输入折扣:\"",[34,157752,31148],{"class":40},[34,157754,157755],{"class":36,"line":76},[34,157756,3053],{"emptyLinePlaceholder":726},[34,157758,157759,157762,157764,157767,157769,157772,157774],{"class":36,"line":93},[34,157760,157761],{"class":40},"total ",[34,157763,153],{"class":87},[34,157765,157766],{"class":40}," price ",[34,157768,1250],{"class":87},[34,157770,157771],{"class":40}," count ",[34,157773,1250],{"class":87},[34,157775,157776],{"class":40}," discount\n",[34,157778,157779],{"class":36,"line":99},[34,157780,3053],{"emptyLinePlaceholder":726},[34,157782,157783,157785,157787,157789,157792,157794,157796,157798,157800,157802],{"class":36,"line":353},[34,157784,31066],{"class":63},[34,157786,801],{"class":40},[34,157788,851],{"class":87},[34,157790,157791],{"class":156},"\"商品单价:",[34,157793,1690],{"class":63},[34,157795,80445],{"class":40},[34,157797,157660],{"class":87},[34,157799,1739],{"class":63},[34,157801,1046],{"class":156},[34,157803,807],{"class":40},[34,157805,157806,157808,157810,157812,157815,157817,157819,157821,157823],{"class":36,"line":359},[34,157807,31066],{"class":63},[34,157809,801],{"class":40},[34,157811,851],{"class":87},[34,157813,157814],{"class":156},"\"购买数量:",[34,157816,1690],{"class":63},[34,157818,85064],{"class":40},[34,157820,1739],{"class":63},[34,157822,1046],{"class":156},[34,157824,807],{"class":40},[34,157826,157827,157829,157831,157833,157836,157838,157841,157843,157845],{"class":36,"line":579},[34,157828,31066],{"class":63},[34,157830,801],{"class":40},[34,157832,851],{"class":87},[34,157834,157835],{"class":156},"\"折扣:",[34,157837,1690],{"class":63},[34,157839,157840],{"class":40},"discount",[34,157842,1739],{"class":63},[34,157844,1046],{"class":156},[34,157846,807],{"class":40},[34,157848,157849,157851,157853,157855,157858,157860,157863,157865,157867,157869],{"class":36,"line":589},[34,157850,31066],{"class":63},[34,157852,801],{"class":40},[34,157854,851],{"class":87},[34,157856,157857],{"class":156},"\"应付金额:",[34,157859,1690],{"class":63},[34,157861,157862],{"class":40},"total",[34,157864,157660],{"class":87},[34,157866,1739],{"class":63},[34,157868,157513],{"class":156},[34,157870,807],{"class":40},[14,157872,157874],{"id":157873},"_213-易错点","2.13 易错点",[752,157876,157877,157882,157888,157896,157899],{},[755,157878,157879,157881],{},[31,157880,157524],{}," 的结果是字符串，做运算前要转换。",[755,157883,157884,157885,29036],{},"字符串拼接时，数字要先 ",[31,157886,157887],{},"str()",[755,157889,157890,157892,157893,157895],{},[31,157891,153],{}," 是赋值，",[31,157894,3602],{}," 是比较。",[755,157897,157898],{},"Python 没有自增自减运算符。",[755,157900,157901],{},"浮点数计算可能有精度误差：",[24,157903,157905],{"className":31029,"code":157904,"language":31031,"meta":29,"style":29},"print(0.1 + 0.2)\n",[31,157906,157907],{"__ignoreMap":29},[34,157908,157909,157911,157913,157915,157917,157920],{"class":36,"line":37},[34,157910,31066],{"class":63},[34,157912,801],{"class":40},[34,157914,86840],{"class":63},[34,157916,46217],{"class":87},[34,157918,157919],{"class":63}," 0.2",[34,157921,807],{"class":40},[108,157923,157924,157925,157928],{},"金额计算如果要求严格，可以后续学习 ",[31,157926,157927],{},"decimal"," 模块。",[14,157930,157932],{"id":157931},"_214-本章练习","2.14 本章练习",[752,157934,157935,157938,157941,157944,157947],{},[755,157936,157937],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[755,157939,157940],{},"输入圆的半径，计算面积，保留两位小数。",[755,157942,157943],{},"输入工资和奖金，计算总收入。",[755,157945,157946],{},"输入摄氏温度，转换为华氏温度。",[755,157948,157949],{},"写一个 BMI 计算程序：",[24,157951,157954],{"className":157952,"code":157953,"language":5840,"meta":29},[5838],"BMI = 体重kg \u002F 身高m ** 2\n",[31,157955,157953],{"__ignoreMap":29},[45,157957,157958],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":157960},[157961,157962,157963,157964,157965,157966,157967,157973,157974,157975,157980,157981,157982,157983],{"id":155522,"depth":51,"text":155523},{"id":155631,"depth":51,"text":155632},{"id":155802,"depth":51,"text":155803},{"id":155879,"depth":51,"text":155880},{"id":51382,"depth":51,"text":51383},{"id":156185,"depth":51,"text":156186},{"id":156411,"depth":51,"text":156412,"children":157968},[157969,157970,157971,157972],{"id":156415,"depth":60,"text":156416},{"id":156609,"depth":60,"text":156610},{"id":156697,"depth":60,"text":156698},{"id":156803,"depth":60,"text":156804},{"id":156912,"depth":51,"text":156913},{"id":157070,"depth":51,"text":157071},{"id":157135,"depth":51,"text":157136,"children":157976},[157977,157978,157979],{"id":157139,"depth":60,"text":157140},{"id":157284,"depth":60,"text":157285},{"id":157387,"depth":60,"text":157388},{"id":157518,"depth":51,"text":157519},{"id":157670,"depth":51,"text":157671},{"id":157873,"depth":51,"text":157874},{"id":157931,"depth":51,"text":157932},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155514,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157990,"title":157991,"body":157992,"description":723,"extension":724,"meta":159628,"navigation":726,"path":159629,"seo":159630,"stem":159631,"__hash__":159632},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157993,"toc":159609},[157994,157997,158001,158004,158019,158022,158050,158054,158104,158106,158122,158125,158151,158154,158158,158225,158228,158244,158248,158251,158369,158372,158379,158428,158434,158438,158441,158554,158557,158561,158565,158568,158618,158622,158625,158675,158679,158682,158720,158724,158727,158773,158776,158811,158815,158820,158823,158869,158871,158938,158942,158948,159059,159068,159072,159074,159085,159087,159253,159257,159259,159273,159275,159489,159493,159512,159529,159532,159578,159582,159606],[10,157995,157991],{"id":157996},"_3-判断语句",[14,157998,158000],{"id":157999},"_31-布尔值","3.1 布尔值",[108,158002,158003],{},"判断语句依赖布尔值：",[24,158005,158007],{"className":31029,"code":158006,"language":31031,"meta":29,"style":29},"True\nFalse\n",[31,158008,158009,158014],{"__ignoreMap":29},[34,158010,158011],{"class":36,"line":37},[34,158012,158013],{"class":63},"True\n",[34,158015,158016],{"class":36,"line":51},[34,158017,158018],{"class":63},"False\n",[108,158020,158021],{},"比较表达式会产生布尔值：",[24,158023,158025],{"className":31029,"code":158024,"language":31031,"meta":29,"style":29},"age = 18\nprint(age >= 18)  # True\n",[31,158026,158027,158035],{"__ignoreMap":29},[34,158028,158029,158031,158033],{"class":36,"line":37},[34,158030,147047],{"class":40},[34,158032,153],{"class":87},[34,158034,147052],{"class":63},[34,158036,158037,158039,158041,158043,158045,158047],{"class":36,"line":51},[34,158038,31066],{"class":63},[34,158040,156269],{"class":40},[34,158042,2364],{"class":87},[34,158044,156786],{"class":63},[34,158046,46459],{"class":40},[34,158048,158049],{"class":205},"# True\n",[14,158051,158053],{"id":158052},"_32-if基础语法","3.2 if基础语法",[24,158055,158057],{"className":31029,"code":158056,"language":31031,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[31,158058,158059,158077,158081,158093],{"__ignoreMap":29},[34,158060,158061,158063,158065,158067,158069,158071,158073,158075],{"class":36,"line":37},[34,158062,147047],{"class":40},[34,158064,153],{"class":87},[34,158066,3035],{"class":63},[34,158068,801],{"class":40},[34,158070,669],{"class":63},[34,158072,801],{"class":40},[34,158074,152895],{"class":156},[34,158076,31148],{"class":40},[34,158078,158079],{"class":36,"line":51},[34,158080,3053],{"emptyLinePlaceholder":726},[34,158082,158083,158085,158087,158089,158091],{"class":36,"line":60},[34,158084,2191],{"class":87},[34,158086,16359],{"class":40},[34,158088,2364],{"class":87},[34,158090,156786],{"class":63},[34,158092,4392],{"class":40},[34,158094,158095,158097,158099,158102],{"class":36,"line":76},[34,158096,31950],{"class":63},[34,158098,801],{"class":40},[34,158100,158101],{"class":156},"\"可以进入网吧\"",[34,158103,807],{"class":40},[108,158105,9678],{},[752,158107,158108,158113,158116,158119],{},[755,158109,158110,158112],{},[31,158111,2191],{}," 后面是条件表达式。",[755,158114,158115],{},"条件后面必须写冒号。",[755,158117,158118],{},"条件成立时执行缩进代码块。",[755,158120,158121],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[108,158123,158124],{},"错误示例：",[24,158126,158128],{"className":31029,"code":158127,"language":31031,"meta":29,"style":29},"if age >= 18\n    print(\"可以进入\")\n",[31,158129,158130,158140],{"__ignoreMap":29},[34,158131,158132,158134,158136,158138],{"class":36,"line":37},[34,158133,2191],{"class":87},[34,158135,16359],{"class":40},[34,158137,2364],{"class":87},[34,158139,147052],{"class":63},[34,158141,158142,158144,158146,158149],{"class":36,"line":51},[34,158143,31950],{"class":63},[34,158145,801],{"class":40},[34,158147,158148],{"class":156},"\"可以进入\"",[34,158150,807],{"class":40},[108,158152,158153],{},"缺少冒号。",[14,158155,158157],{"id":158156},"_33-if-else","3.3 if else",[24,158159,158161],{"className":31029,"code":158160,"language":31031,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[31,158162,158163,158181,158185,158197,158208,158214],{"__ignoreMap":29},[34,158164,158165,158167,158169,158171,158173,158175,158177,158179],{"class":36,"line":37},[34,158166,147047],{"class":40},[34,158168,153],{"class":87},[34,158170,3035],{"class":63},[34,158172,801],{"class":40},[34,158174,669],{"class":63},[34,158176,801],{"class":40},[34,158178,152895],{"class":156},[34,158180,31148],{"class":40},[34,158182,158183],{"class":36,"line":51},[34,158184,3053],{"emptyLinePlaceholder":726},[34,158186,158187,158189,158191,158193,158195],{"class":36,"line":60},[34,158188,2191],{"class":87},[34,158190,16359],{"class":40},[34,158192,2364],{"class":87},[34,158194,156786],{"class":63},[34,158196,4392],{"class":40},[34,158198,158199,158201,158203,158206],{"class":36,"line":76},[34,158200,31950],{"class":63},[34,158202,801],{"class":40},[34,158204,158205],{"class":156},"\"成年人\"",[34,158207,807],{"class":40},[34,158209,158210,158212],{"class":36,"line":93},[34,158211,2355],{"class":87},[34,158213,4392],{"class":40},[34,158215,158216,158218,158220,158223],{"class":36,"line":99},[34,158217,31950],{"class":63},[34,158219,801],{"class":40},[34,158221,158222],{"class":156},"\"未成年人\"",[34,158224,807],{"class":40},[108,158226,158227],{},"执行逻辑：",[752,158229,158230,158236,158241],{},[755,158231,158232,158233,158235],{},"条件成立，执行 ",[31,158234,2191],{}," 代码块。",[755,158237,158238,158239,158235],{},"条件不成立，执行 ",[31,158240,2355],{},[755,158242,158243],{},"两个代码块只会执行其中一个。",[14,158245,158247],{"id":158246},"_34-if-elif-else","3.4 if elif else",[108,158249,158250],{},"多条件判断：",[24,158252,158254],{"className":31029,"code":158253,"language":31031,"meta":29,"style":29},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[31,158255,158256,158274,158278,158292,158303,158317,158328,158341,158352,158358],{"__ignoreMap":29},[34,158257,158258,158260,158262,158264,158266,158268,158270,158272],{"class":36,"line":37},[34,158259,155859],{"class":40},[34,158261,153],{"class":87},[34,158263,3035],{"class":63},[34,158265,801],{"class":40},[34,158267,669],{"class":63},[34,158269,801],{"class":40},[34,158271,152910],{"class":156},[34,158273,31148],{"class":40},[34,158275,158276],{"class":36,"line":51},[34,158277,3053],{"emptyLinePlaceholder":726},[34,158279,158280,158282,158285,158287,158290],{"class":36,"line":60},[34,158281,2191],{"class":87},[34,158283,158284],{"class":40}," score ",[34,158286,2364],{"class":87},[34,158288,158289],{"class":63}," 90",[34,158291,4392],{"class":40},[34,158293,158294,158296,158298,158301],{"class":36,"line":76},[34,158295,31950],{"class":63},[34,158297,801],{"class":40},[34,158299,158300],{"class":156},"\"优秀\"",[34,158302,807],{"class":40},[34,158304,158305,158308,158310,158312,158315],{"class":36,"line":93},[34,158306,158307],{"class":87},"elif",[34,158309,158284],{"class":40},[34,158311,2364],{"class":87},[34,158313,158314],{"class":63}," 80",[34,158316,4392],{"class":40},[34,158318,158319,158321,158323,158326],{"class":36,"line":99},[34,158320,31950],{"class":63},[34,158322,801],{"class":40},[34,158324,158325],{"class":156},"\"良好\"",[34,158327,807],{"class":40},[34,158329,158330,158332,158334,158336,158339],{"class":36,"line":353},[34,158331,158307],{"class":87},[34,158333,158284],{"class":40},[34,158335,2364],{"class":87},[34,158337,158338],{"class":63}," 60",[34,158340,4392],{"class":40},[34,158342,158343,158345,158347,158350],{"class":36,"line":359},[34,158344,31950],{"class":63},[34,158346,801],{"class":40},[34,158348,158349],{"class":156},"\"及格\"",[34,158351,807],{"class":40},[34,158353,158354,158356],{"class":36,"line":579},[34,158355,2355],{"class":87},[34,158357,4392],{"class":40},[34,158359,158360,158362,158364,158367],{"class":36,"line":589},[34,158361,31950],{"class":63},[34,158363,801],{"class":40},[34,158365,158366],{"class":156},"\"不及格\"",[34,158368,807],{"class":40},[108,158370,158371],{},"注意判断顺序很重要。",[108,158373,158374,158375,158378],{},"如果把 ",[31,158376,158377],{},"score >= 60"," 放在最前面：",[24,158380,158382],{"className":31029,"code":158381,"language":31031,"meta":29,"style":29},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[31,158383,158384,158396,158406,158418],{"__ignoreMap":29},[34,158385,158386,158388,158390,158392,158394],{"class":36,"line":37},[34,158387,2191],{"class":87},[34,158389,158284],{"class":40},[34,158391,2364],{"class":87},[34,158393,158338],{"class":63},[34,158395,4392],{"class":40},[34,158397,158398,158400,158402,158404],{"class":36,"line":51},[34,158399,31950],{"class":63},[34,158401,801],{"class":40},[34,158403,158349],{"class":156},[34,158405,807],{"class":40},[34,158407,158408,158410,158412,158414,158416],{"class":36,"line":60},[34,158409,158307],{"class":87},[34,158411,158284],{"class":40},[34,158413,2364],{"class":87},[34,158415,158289],{"class":63},[34,158417,4392],{"class":40},[34,158419,158420,158422,158424,158426],{"class":36,"line":76},[34,158421,31950],{"class":63},[34,158423,801],{"class":40},[34,158425,158300],{"class":156},[34,158427,807],{"class":40},[108,158429,158430,158431,158433],{},"成绩 95 会先满足 ",[31,158432,158377],{},"，后面的优秀分支就不会执行。",[14,158435,158437],{"id":158436},"_35-判断语句嵌套","3.5 判断语句嵌套",[108,158439,158440],{},"嵌套判断就是在一个判断内部再写判断。",[24,158442,158444],{"className":31029,"code":158443,"language":31031,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[31,158445,158446,158464,158479,158483,158495,158509,158519,158526,158537,158543],{"__ignoreMap":29},[34,158447,158448,158450,158452,158454,158456,158458,158460,158462],{"class":36,"line":37},[34,158449,147047],{"class":40},[34,158451,153],{"class":87},[34,158453,3035],{"class":63},[34,158455,801],{"class":40},[34,158457,669],{"class":63},[34,158459,801],{"class":40},[34,158461,152895],{"class":156},[34,158463,31148],{"class":40},[34,158465,158466,158468,158470,158472,158474,158477],{"class":36,"line":51},[34,158467,156862],{"class":40},[34,158469,153],{"class":87},[34,158471,61248],{"class":63},[34,158473,801],{"class":40},[34,158475,158476],{"class":156},"\"是否有票(y\u002Fn):\"",[34,158478,807],{"class":40},[34,158480,158481],{"class":36,"line":60},[34,158482,3053],{"emptyLinePlaceholder":726},[34,158484,158485,158487,158489,158491,158493],{"class":36,"line":76},[34,158486,2191],{"class":87},[34,158488,16359],{"class":40},[34,158490,2364],{"class":87},[34,158492,156786],{"class":63},[34,158494,4392],{"class":40},[34,158496,158497,158499,158502,158504,158507],{"class":36,"line":93},[34,158498,3754],{"class":87},[34,158500,158501],{"class":40}," has_ticket ",[34,158503,3602],{"class":87},[34,158505,158506],{"class":156}," \"y\"",[34,158508,4392],{"class":40},[34,158510,158511,158513,158515,158517],{"class":36,"line":99},[34,158512,33102],{"class":63},[34,158514,801],{"class":40},[34,158516,158148],{"class":156},[34,158518,807],{"class":40},[34,158520,158521,158524],{"class":36,"line":353},[34,158522,158523],{"class":87},"    else",[34,158525,4392],{"class":40},[34,158527,158528,158530,158532,158535],{"class":36,"line":359},[34,158529,33102],{"class":63},[34,158531,801],{"class":40},[34,158533,158534],{"class":156},"\"请先买票\"",[34,158536,807],{"class":40},[34,158538,158539,158541],{"class":36,"line":579},[34,158540,2355],{"class":87},[34,158542,4392],{"class":40},[34,158544,158545,158547,158549,158552],{"class":36,"line":589},[34,158546,31950],{"class":63},[34,158548,801],{"class":40},[34,158550,158551],{"class":156},"\"未成年人禁止进入\"",[34,158553,807],{"class":40},[108,158555,158556],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158558,158560],{"id":158559},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[19,158562,158564],{"id":158563},"_361-and","3.6.1 and",[108,158566,158567],{},"两个条件都成立才成立。",[24,158569,158571],{"className":31029,"code":158570,"language":31031,"meta":29,"style":29},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[31,158572,158573,158581,158589,158593,158608],{"__ignoreMap":29},[34,158574,158575,158577,158579],{"class":36,"line":37},[34,158576,147047],{"class":40},[34,158578,153],{"class":87},[34,158580,88695],{"class":63},[34,158582,158583,158585,158587],{"class":36,"line":51},[34,158584,156862],{"class":40},[34,158586,153],{"class":87},[34,158588,154100],{"class":63},[34,158590,158591],{"class":36,"line":60},[34,158592,3053],{"emptyLinePlaceholder":726},[34,158594,158595,158597,158599,158601,158603,158605],{"class":36,"line":76},[34,158596,2191],{"class":87},[34,158598,16359],{"class":40},[34,158600,2364],{"class":87},[34,158602,156786],{"class":63},[34,158604,121059],{"class":87},[34,158606,158607],{"class":40}," has_ticket:\n",[34,158609,158610,158612,158614,158616],{"class":36,"line":93},[34,158611,31950],{"class":63},[34,158613,801],{"class":40},[34,158615,158148],{"class":156},[34,158617,807],{"class":40},[19,158619,158621],{"id":158620},"_362-or","3.6.2 or",[108,158623,158624],{},"只要一个条件成立就成立。",[24,158626,158628],{"className":31029,"code":158627,"language":31031,"meta":29,"style":29},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[31,158629,158630,158639,158648,158652,158664],{"__ignoreMap":29},[34,158631,158632,158635,158637],{"class":36,"line":37},[34,158633,158634],{"class":40},"is_vip ",[34,158636,153],{"class":87},[34,158638,126437],{"class":63},[34,158640,158641,158644,158646],{"class":36,"line":51},[34,158642,158643],{"class":40},"coupon ",[34,158645,153],{"class":87},[34,158647,154100],{"class":63},[34,158649,158650],{"class":36,"line":60},[34,158651,3053],{"emptyLinePlaceholder":726},[34,158653,158654,158656,158659,158661],{"class":36,"line":76},[34,158655,2191],{"class":87},[34,158657,158658],{"class":40}," is_vip ",[34,158660,115720],{"class":87},[34,158662,158663],{"class":40}," coupon:\n",[34,158665,158666,158668,158670,158673],{"class":36,"line":93},[34,158667,31950],{"class":63},[34,158669,801],{"class":40},[34,158671,158672],{"class":156},"\"可以享受优惠\"",[34,158674,807],{"class":40},[19,158676,158678],{"id":158677},"_363-not","3.6.3 not",[108,158680,158681],{},"取反。",[24,158683,158685],{"className":31029,"code":158684,"language":31031,"meta":29,"style":29},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[31,158686,158687,158696,158700,158709],{"__ignoreMap":29},[34,158688,158689,158692,158694],{"class":36,"line":37},[34,158690,158691],{"class":40},"is_closed ",[34,158693,153],{"class":87},[34,158695,126437],{"class":63},[34,158697,158698],{"class":36,"line":51},[34,158699,3053],{"emptyLinePlaceholder":726},[34,158701,158702,158704,158706],{"class":36,"line":60},[34,158703,2191],{"class":87},[34,158705,39581],{"class":87},[34,158707,158708],{"class":40}," is_closed:\n",[34,158710,158711,158713,158715,158718],{"class":36,"line":76},[34,158712,31950],{"class":63},[34,158714,801],{"class":40},[34,158716,158717],{"class":156},"\"店铺营业中\"",[34,158719,807],{"class":40},[14,158721,158723],{"id":158722},"_37-链式比较","3.7 链式比较",[108,158725,158726],{},"Python 支持链式比较：",[24,158728,158730],{"className":31029,"code":158729,"language":31031,"meta":29,"style":29},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[31,158731,158732,158741,158745,158762],{"__ignoreMap":29},[34,158733,158734,158736,158738],{"class":36,"line":37},[34,158735,155859],{"class":40},[34,158737,153],{"class":87},[34,158739,158740],{"class":63}," 85\n",[34,158742,158743],{"class":36,"line":51},[34,158744,3053],{"emptyLinePlaceholder":726},[34,158746,158747,158749,158751,158754,158756,158758,158760],{"class":36,"line":60},[34,158748,2191],{"class":87},[34,158750,4746],{"class":63},[34,158752,158753],{"class":87}," \u003C=",[34,158755,158284],{"class":40},[34,158757,2247],{"class":87},[34,158759,6407],{"class":63},[34,158761,4392],{"class":40},[34,158763,158764,158766,158768,158771],{"class":36,"line":76},[34,158765,31950],{"class":63},[34,158767,801],{"class":40},[34,158769,158770],{"class":156},"\"成绩合法\"",[34,158772,807],{"class":40},[108,158774,158775],{},"等价于：",[24,158777,158779],{"className":31029,"code":158778,"language":31031,"meta":29,"style":29},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[31,158780,158781,158801],{"__ignoreMap":29},[34,158782,158783,158785,158787,158789,158791,158793,158795,158797,158799],{"class":36,"line":37},[34,158784,2191],{"class":87},[34,158786,158284],{"class":40},[34,158788,2364],{"class":87},[34,158790,4746],{"class":63},[34,158792,121059],{"class":87},[34,158794,158284],{"class":40},[34,158796,2247],{"class":87},[34,158798,6407],{"class":63},[34,158800,4392],{"class":40},[34,158802,158803,158805,158807,158809],{"class":36,"line":51},[34,158804,31950],{"class":63},[34,158806,801],{"class":40},[34,158808,158770],{"class":156},[34,158810,807],{"class":40},[14,158812,158814],{"id":158813},"_38-真值和假值","3.8 真值和假值",[108,158816,117097,158817,158819],{},[31,158818,2191],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[108,158821,158822],{},"假值：",[24,158824,158826],{"className":31029,"code":158825,"language":31031,"meta":29,"style":29},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[31,158827,158828,158832,158837,158841,158845,158850,158854,158858,158863],{"__ignoreMap":29},[34,158829,158830],{"class":36,"line":37},[34,158831,158018],{"class":63},[34,158833,158834],{"class":36,"line":51},[34,158835,158836],{"class":63},"None\n",[34,158838,158839],{"class":36,"line":60},[34,158840,3738],{"class":63},[34,158842,158843],{"class":36,"line":76},[34,158844,32993],{"class":63},[34,158846,158847],{"class":36,"line":93},[34,158848,158849],{"class":156},"\"\"\n",[34,158851,158852],{"class":36,"line":99},[34,158853,33008],{"class":40},[34,158855,158856],{"class":36,"line":353},[34,158857,2629],{"class":40},[34,158859,158860],{"class":36,"line":359},[34,158861,158862],{"class":40},"{}\n",[34,158864,158865,158867],{"class":36,"line":579},[34,158866,155791],{"class":63},[34,158868,2629],{"class":40},[108,158870,15788],{},[24,158872,158874],{"className":31029,"code":158873,"language":31031,"meta":29,"style":29},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[31,158875,158876,158890,158894,158901,158921,158927],{"__ignoreMap":29},[34,158877,158878,158880,158882,158884,158886,158888],{"class":36,"line":37},[34,158879,147037],{"class":40},[34,158881,153],{"class":87},[34,158883,61248],{"class":63},[34,158885,801],{"class":40},[34,158887,152880],{"class":156},[34,158889,807],{"class":40},[34,158891,158892],{"class":36,"line":51},[34,158893,3053],{"emptyLinePlaceholder":726},[34,158895,158896,158898],{"class":36,"line":60},[34,158897,2191],{"class":87},[34,158899,158900],{"class":40}," name:\n",[34,158902,158903,158905,158907,158909,158911,158913,158915,158917,158919],{"class":36,"line":76},[34,158904,31950],{"class":63},[34,158906,801],{"class":40},[34,158908,851],{"class":87},[34,158910,157555],{"class":156},[34,158912,1690],{"class":63},[34,158914,80440],{"class":40},[34,158916,1739],{"class":63},[34,158918,1046],{"class":156},[34,158920,807],{"class":40},[34,158922,158923,158925],{"class":36,"line":93},[34,158924,2355],{"class":87},[34,158926,4392],{"class":40},[34,158928,158929,158931,158933,158936],{"class":36,"line":99},[34,158930,31950],{"class":63},[34,158932,801],{"class":40},[34,158934,158935],{"class":156},"\"姓名不能为空\"",[34,158937,807],{"class":40},[14,158939,158941],{"id":158940},"_39-match语句","3.9 match语句",[108,158943,158944,158945,158947],{},"Python 3.10 开始支持 ",[31,158946,71896],{},"。它适合处理固定选项。",[24,158949,158951],{"className":31029,"code":158950,"language":31031,"meta":29,"style":29},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[31,158952,158953,158969,158973,158980,158990,159001,159010,159021,159030,159041,159048],{"__ignoreMap":29},[34,158954,158955,158958,158960,158962,158964,158967],{"class":36,"line":37},[34,158956,158957],{"class":40},"command ",[34,158959,153],{"class":87},[34,158961,61248],{"class":63},[34,158963,801],{"class":40},[34,158965,158966],{"class":156},"\"请输入命令:\"",[34,158968,807],{"class":40},[34,158970,158971],{"class":36,"line":51},[34,158972,3053],{"emptyLinePlaceholder":726},[34,158974,158975,158977],{"class":36,"line":60},[34,158976,71896],{"class":87},[34,158978,158979],{"class":40}," command:\n",[34,158981,158982,158985,158988],{"class":36,"line":76},[34,158983,158984],{"class":87},"    case",[34,158986,158987],{"class":156}," \"start\"",[34,158989,4392],{"class":40},[34,158991,158992,158994,158996,158999],{"class":36,"line":93},[34,158993,33102],{"class":63},[34,158995,801],{"class":40},[34,158997,158998],{"class":156},"\"启动\"",[34,159000,807],{"class":40},[34,159002,159003,159005,159008],{"class":36,"line":99},[34,159004,158984],{"class":87},[34,159006,159007],{"class":156}," \"stop\"",[34,159009,4392],{"class":40},[34,159011,159012,159014,159016,159019],{"class":36,"line":353},[34,159013,33102],{"class":63},[34,159015,801],{"class":40},[34,159017,159018],{"class":156},"\"停止\"",[34,159020,807],{"class":40},[34,159022,159023,159025,159028],{"class":36,"line":359},[34,159024,158984],{"class":87},[34,159026,159027],{"class":156}," \"restart\"",[34,159029,4392],{"class":40},[34,159031,159032,159034,159036,159039],{"class":36,"line":579},[34,159033,33102],{"class":63},[34,159035,801],{"class":40},[34,159037,159038],{"class":156},"\"重启\"",[34,159040,807],{"class":40},[34,159042,159043,159045],{"class":36,"line":589},[34,159044,158984],{"class":87},[34,159046,159047],{"class":40}," _:\n",[34,159049,159050,159052,159054,159057],{"class":36,"line":601},[34,159051,33102],{"class":63},[34,159053,801],{"class":40},[34,159055,159056],{"class":156},"\"未知命令\"",[34,159058,807],{"class":40},[108,159060,159061,159062,159064,159065,159067],{},"入门阶段掌握 ",[31,159063,155159],{}," 更重要，",[31,159066,71896],{}," 可以作为补充。",[14,159069,159071],{"id":159070},"_310-小案例成绩等级","3.10 小案例：成绩等级",[108,159073,123922],{},[752,159075,159076,159079,159082],{},[755,159077,159078],{},"输入成绩。",[755,159080,159081],{},"判断成绩是否合法。",[755,159083,159084],{},"输出等级。",[108,159086,10688],{},[24,159088,159090],{"className":31029,"code":159089,"language":31031,"meta":29,"style":29},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[31,159091,159092,159110,159114,159132,159143,159155,159166,159178,159189,159202,159213,159225,159236,159242],{"__ignoreMap":29},[34,159093,159094,159096,159098,159100,159102,159104,159106,159108],{"class":36,"line":37},[34,159095,155859],{"class":40},[34,159097,153],{"class":87},[34,159099,110427],{"class":63},[34,159101,801],{"class":40},[34,159103,669],{"class":63},[34,159105,801],{"class":40},[34,159107,152910],{"class":156},[34,159109,31148],{"class":40},[34,159111,159112],{"class":36,"line":51},[34,159113,3053],{"emptyLinePlaceholder":726},[34,159115,159116,159118,159120,159122,159124,159126,159128,159130],{"class":36,"line":60},[34,159117,2191],{"class":87},[34,159119,39581],{"class":87},[34,159121,4746],{"class":63},[34,159123,158753],{"class":87},[34,159125,158284],{"class":40},[34,159127,2247],{"class":87},[34,159129,6407],{"class":63},[34,159131,4392],{"class":40},[34,159133,159134,159136,159138,159141],{"class":36,"line":76},[34,159135,31950],{"class":63},[34,159137,801],{"class":40},[34,159139,159140],{"class":156},"\"成绩不合法\"",[34,159142,807],{"class":40},[34,159144,159145,159147,159149,159151,159153],{"class":36,"line":93},[34,159146,158307],{"class":87},[34,159148,158284],{"class":40},[34,159150,2364],{"class":87},[34,159152,158289],{"class":63},[34,159154,4392],{"class":40},[34,159156,159157,159159,159161,159164],{"class":36,"line":99},[34,159158,31950],{"class":63},[34,159160,801],{"class":40},[34,159162,159163],{"class":156},"\"等级:A\"",[34,159165,807],{"class":40},[34,159167,159168,159170,159172,159174,159176],{"class":36,"line":353},[34,159169,158307],{"class":87},[34,159171,158284],{"class":40},[34,159173,2364],{"class":87},[34,159175,158314],{"class":63},[34,159177,4392],{"class":40},[34,159179,159180,159182,159184,159187],{"class":36,"line":359},[34,159181,31950],{"class":63},[34,159183,801],{"class":40},[34,159185,159186],{"class":156},"\"等级:B\"",[34,159188,807],{"class":40},[34,159190,159191,159193,159195,159197,159200],{"class":36,"line":579},[34,159192,158307],{"class":87},[34,159194,158284],{"class":40},[34,159196,2364],{"class":87},[34,159198,159199],{"class":63}," 70",[34,159201,4392],{"class":40},[34,159203,159204,159206,159208,159211],{"class":36,"line":589},[34,159205,31950],{"class":63},[34,159207,801],{"class":40},[34,159209,159210],{"class":156},"\"等级:C\"",[34,159212,807],{"class":40},[34,159214,159215,159217,159219,159221,159223],{"class":36,"line":601},[34,159216,158307],{"class":87},[34,159218,158284],{"class":40},[34,159220,2364],{"class":87},[34,159222,158338],{"class":63},[34,159224,4392],{"class":40},[34,159226,159227,159229,159231,159234],{"class":36,"line":613},[34,159228,31950],{"class":63},[34,159230,801],{"class":40},[34,159232,159233],{"class":156},"\"等级:D\"",[34,159235,807],{"class":40},[34,159237,159238,159240],{"class":36,"line":618},[34,159239,2355],{"class":87},[34,159241,4392],{"class":40},[34,159243,159244,159246,159248,159251],{"class":36,"line":628},[34,159245,31950],{"class":63},[34,159247,801],{"class":40},[34,159249,159250],{"class":156},"\"等级:E\"",[34,159252,807],{"class":40},[14,159254,159256],{"id":159255},"_311-小案例会员折扣","3.11 小案例：会员折扣",[108,159258,123922],{},[752,159260,159261,159264,159267,159270],{},[755,159262,159263],{},"输入消费金额。",[755,159265,159266],{},"输入会员等级，普通、银卡、金卡。",[755,159268,159269],{},"普通不打折，银卡 9 折，金卡 8 折。",[755,159271,159272],{},"满 500 再减 50。",[108,159274,10688],{},[24,159276,159278],{"className":31029,"code":159277,"language":31031,"meta":29,"style":29},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[31,159279,159280,159300,159316,159320,159328,159332,159346,159356,159369,159378,159391,159399,159405,159416,159420,159434,159438,159452,159462,159466],{"__ignoreMap":29},[34,159281,159282,159285,159287,159289,159291,159293,159295,159298],{"class":36,"line":37},[34,159283,159284],{"class":40},"amount ",[34,159286,153],{"class":87},[34,159288,110427],{"class":63},[34,159290,801],{"class":40},[34,159292,669],{"class":63},[34,159294,801],{"class":40},[34,159296,159297],{"class":156},"\"请输入消费金额:\"",[34,159299,31148],{"class":40},[34,159301,159302,159305,159307,159309,159311,159314],{"class":36,"line":51},[34,159303,159304],{"class":40},"level ",[34,159306,153],{"class":87},[34,159308,61248],{"class":63},[34,159310,801],{"class":40},[34,159312,159313],{"class":156},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[34,159315,807],{"class":40},[34,159317,159318],{"class":36,"line":60},[34,159319,3053],{"emptyLinePlaceholder":726},[34,159321,159322,159324,159326],{"class":36,"line":76},[34,159323,157737],{"class":40},[34,159325,153],{"class":87},[34,159327,56342],{"class":63},[34,159329,159330],{"class":36,"line":93},[34,159331,3053],{"emptyLinePlaceholder":726},[34,159333,159334,159336,159339,159341,159344],{"class":36,"line":99},[34,159335,2191],{"class":87},[34,159337,159338],{"class":40}," level ",[34,159340,3602],{"class":87},[34,159342,159343],{"class":156}," \"银卡\"",[34,159345,4392],{"class":40},[34,159347,159348,159351,159353],{"class":36,"line":353},[34,159349,159350],{"class":40},"    discount ",[34,159352,153],{"class":87},[34,159354,159355],{"class":63}," 0.9\n",[34,159357,159358,159360,159362,159364,159367],{"class":36,"line":359},[34,159359,158307],{"class":87},[34,159361,159338],{"class":40},[34,159363,3602],{"class":87},[34,159365,159366],{"class":156}," \"金卡\"",[34,159368,4392],{"class":40},[34,159370,159371,159373,159375],{"class":36,"line":579},[34,159372,159350],{"class":40},[34,159374,153],{"class":87},[34,159376,159377],{"class":63}," 0.8\n",[34,159379,159380,159382,159384,159386,159389],{"class":36,"line":589},[34,159381,158307],{"class":87},[34,159383,159338],{"class":40},[34,159385,3602],{"class":87},[34,159387,159388],{"class":156}," \"普通\"",[34,159390,4392],{"class":40},[34,159392,159393,159395,159397],{"class":36,"line":601},[34,159394,159350],{"class":40},[34,159396,153],{"class":87},[34,159398,56342],{"class":63},[34,159400,159401,159403],{"class":36,"line":613},[34,159402,2355],{"class":87},[34,159404,4392],{"class":40},[34,159406,159407,159409,159411,159414],{"class":36,"line":618},[34,159408,31950],{"class":63},[34,159410,801],{"class":40},[34,159412,159413],{"class":156},"\"会员等级输入错误，按普通会员计算\"",[34,159415,807],{"class":40},[34,159417,159418],{"class":36,"line":628},[34,159419,3053],{"emptyLinePlaceholder":726},[34,159421,159422,159425,159427,159430,159432],{"class":36,"line":640},[34,159423,159424],{"class":40},"pay ",[34,159426,153],{"class":87},[34,159428,159429],{"class":40}," amount ",[34,159431,1250],{"class":87},[34,159433,157776],{"class":40},[34,159435,159436],{"class":36,"line":2301},[34,159437,3053],{"emptyLinePlaceholder":726},[34,159439,159440,159442,159445,159447,159450],{"class":36,"line":2307},[34,159441,2191],{"class":87},[34,159443,159444],{"class":40}," pay ",[34,159446,2364],{"class":87},[34,159448,159449],{"class":63}," 500",[34,159451,4392],{"class":40},[34,159453,159454,159457,159459],{"class":36,"line":2328},[34,159455,159456],{"class":40},"    pay ",[34,159458,150753],{"class":87},[34,159460,159461],{"class":63}," 50\n",[34,159463,159464],{"class":36,"line":2333},[34,159465,3053],{"emptyLinePlaceholder":726},[34,159467,159468,159470,159472,159474,159476,159478,159481,159483,159485,159487],{"class":36,"line":2347},[34,159469,31066],{"class":63},[34,159471,801],{"class":40},[34,159473,851],{"class":87},[34,159475,157857],{"class":156},[34,159477,1690],{"class":63},[34,159479,159480],{"class":40},"pay",[34,159482,157660],{"class":87},[34,159484,1739],{"class":63},[34,159486,157513],{"class":156},[34,159488,807],{"class":40},[14,159490,159492],{"id":159491},"_312-易错点","3.12 易错点",[752,159494,159495,159498,159501,159504,159509],{},[755,159496,159497],{},"冒号不能漏。",[755,159499,159500],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[755,159502,159503],{},"多分支判断要注意顺序。",[755,159505,159506,159507,29036],{},"判断相等用 ",[31,159508,3602],{},[755,159510,159511],{},"字符串比较区分大小写：",[24,159513,159515],{"className":31029,"code":159514,"language":31031,"meta":29,"style":29},"\"Y\" == \"y\"  # False\n",[31,159516,159517],{"__ignoreMap":29},[34,159518,159519,159522,159524,159526],{"class":36,"line":37},[34,159520,159521],{"class":156},"\"Y\"",[34,159523,102189],{"class":87},[34,159525,158506],{"class":156},[34,159527,159528],{"class":205},"  # False\n",[108,159530,159531],{},"可转换后再判断：",[24,159533,159535],{"className":31029,"code":159534,"language":31031,"meta":29,"style":29},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[31,159536,159537,159554,159567],{"__ignoreMap":29},[34,159538,159539,159542,159544,159546,159548,159551],{"class":36,"line":37},[34,159540,159541],{"class":40},"answer ",[34,159543,153],{"class":87},[34,159545,61248],{"class":63},[34,159547,801],{"class":40},[34,159549,159550],{"class":156},"\"是否继续(y\u002Fn):\"",[34,159552,159553],{"class":40},").lower()\n",[34,159555,159556,159558,159561,159563,159565],{"class":36,"line":51},[34,159557,2191],{"class":87},[34,159559,159560],{"class":40}," answer ",[34,159562,3602],{"class":87},[34,159564,158506],{"class":156},[34,159566,4392],{"class":40},[34,159568,159569,159571,159573,159576],{"class":36,"line":60},[34,159570,31950],{"class":63},[34,159572,801],{"class":40},[34,159574,159575],{"class":156},"\"继续\"",[34,159577,807],{"class":40},[14,159579,159581],{"id":159580},"_313-本章练习","3.13 本章练习",[752,159583,159584,159587,159590,159593,159603],{},[755,159585,159586],{},"输入年龄，判断是否成年。",[755,159588,159589],{},"输入年份，判断是否为闰年。",[755,159591,159592],{},"输入三个数字，输出最大值。",[755,159594,159595,159596,159599,159600,159602],{},"写登录判断：用户名是 ",[31,159597,159598],{},"admin"," 且密码是 ",[31,159601,15737],{}," 才登录成功。",[755,159604,159605],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[45,159607,159608],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":29,"searchDepth":51,"depth":51,"links":159610},[159611,159612,159613,159614,159615,159616,159621,159622,159623,159624,159625,159626,159627],{"id":157999,"depth":51,"text":158000},{"id":158052,"depth":51,"text":158053},{"id":158156,"depth":51,"text":158157},{"id":158246,"depth":51,"text":158247},{"id":158436,"depth":51,"text":158437},{"id":158559,"depth":51,"text":158560,"children":159617},[159618,159619,159620],{"id":158563,"depth":60,"text":158564},{"id":158620,"depth":60,"text":158621},{"id":158677,"depth":60,"text":158678},{"id":158722,"depth":51,"text":158723},{"id":158813,"depth":51,"text":158814},{"id":158940,"depth":51,"text":158941},{"id":159070,"depth":51,"text":159071},{"id":159255,"depth":51,"text":159256},{"id":159491,"depth":51,"text":159492},{"id":159580,"depth":51,"text":159581},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157991,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159634,"title":159635,"body":159636,"description":723,"extension":724,"meta":161405,"navigation":726,"path":161406,"seo":161407,"stem":161408,"__hash__":161409},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159637,"toc":161385},[159638,159641,159645,159651,159654,159671,159675,159677,159694,159696,159741,159743,159760,159764,159767,159833,159836,159854,159858,160019,160028,160032,160036,160041,160088,160090,160096,160100,160105,160152,160154,160160,160164,160169,160205,160208,160255,160259,160265,160323,160328,160359,160364,160368,160423,160426,160498,160501,160560,160564,160567,160642,160645,160649,160755,160758,160784,160788,160800,160869,160872,160964,160968,160970,160981,160983,161113,161117,161319,161327,161331,161361,161365,161382],[10,159639,159635],{"id":159640},"_4-循环语句",[14,159642,159644],{"id":159643},"_41-为什么需要循环","4.1 为什么需要循环",[108,159646,159647,159648,159650],{},"如果要输出 1 到 100，不应该写 100 行 ",[31,159649,146973],{},"，而应该用循环。",[108,159652,159653],{},"循环适合处理重复任务：",[752,159655,159656,159659,159662,159665,159668],{},[755,159657,159658],{},"重复输出。",[755,159660,159661],{},"重复输入。",[755,159663,159664],{},"遍历数据。",[755,159666,159667],{},"持续执行菜单。",[755,159669,159670],{},"批量处理文件或数据。",[14,159672,159674],{"id":159673},"_42-while循环","4.2 while循环",[108,159676,5834],{},[24,159678,159680],{"className":31029,"code":159679,"language":31031,"meta":29,"style":29},"while 条件:\n    循环体\n",[31,159681,159682,159689],{"__ignoreMap":29},[34,159683,159684,159686],{"class":36,"line":37},[34,159685,109293],{"class":87},[34,159687,159688],{"class":40}," 条件:\n",[34,159690,159691],{"class":36,"line":51},[34,159692,159693],{"class":40},"    循环体\n",[108,159695,15788],{},[24,159697,159699],{"className":31029,"code":159698,"language":31031,"meta":29,"style":29},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[31,159700,159701,159709,159713,159725,159732],{"__ignoreMap":29},[34,159702,159703,159705,159707],{"class":36,"line":37},[34,159704,100778],{"class":40},[34,159706,153],{"class":87},[34,159708,56342],{"class":63},[34,159710,159711],{"class":36,"line":51},[34,159712,3053],{"emptyLinePlaceholder":726},[34,159714,159715,159717,159719,159721,159723],{"class":36,"line":60},[34,159716,109293],{"class":87},[34,159718,10091],{"class":40},[34,159720,2247],{"class":87},[34,159722,2801],{"class":63},[34,159724,4392],{"class":40},[34,159726,159727,159729],{"class":36,"line":76},[34,159728,31950],{"class":63},[34,159730,159731],{"class":40},"(i)\n",[34,159733,159734,159737,159739],{"class":36,"line":93},[34,159735,159736],{"class":40},"    i ",[34,159738,10130],{"class":87},[34,159740,56342],{"class":63},[108,159742,81559],{},[752,159744,159745,159751,159754,159757],{},[755,159746,159747,159748,29036],{},"判断条件 ",[31,159749,159750],{},"i \u003C= 5",[755,159752,159753],{},"条件成立，执行循环体。",[755,159755,159756],{},"执行完后回到条件判断。",[755,159758,159759],{},"条件不成立，退出循环。",[14,159761,159763],{"id":159762},"_43-while累加","4.3 while累加",[108,159765,159766],{},"计算 1 到 100 的和：",[24,159768,159770],{"className":31029,"code":159769,"language":31031,"meta":29,"style":29},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[31,159771,159772,159780,159788,159792,159804,159814,159822,159826],{"__ignoreMap":29},[34,159773,159774,159776,159778],{"class":36,"line":37},[34,159775,100778],{"class":40},[34,159777,153],{"class":87},[34,159779,56342],{"class":63},[34,159781,159782,159784,159786],{"class":36,"line":51},[34,159783,157761],{"class":40},[34,159785,153],{"class":87},[34,159787,47984],{"class":63},[34,159789,159790],{"class":36,"line":60},[34,159791,3053],{"emptyLinePlaceholder":726},[34,159793,159794,159796,159798,159800,159802],{"class":36,"line":76},[34,159795,109293],{"class":87},[34,159797,10091],{"class":40},[34,159799,2247],{"class":87},[34,159801,6407],{"class":63},[34,159803,4392],{"class":40},[34,159805,159806,159809,159811],{"class":36,"line":93},[34,159807,159808],{"class":40},"    total ",[34,159810,10130],{"class":87},[34,159812,159813],{"class":40}," i\n",[34,159815,159816,159818,159820],{"class":36,"line":99},[34,159817,159736],{"class":40},[34,159819,10130],{"class":87},[34,159821,56342],{"class":63},[34,159823,159824],{"class":36,"line":353},[34,159825,3053],{"emptyLinePlaceholder":726},[34,159827,159828,159830],{"class":36,"line":359},[34,159829,31066],{"class":63},[34,159831,159832],{"class":40},"(total)\n",[108,159834,159835],{},"核心思想：",[752,159837,159838,159843,159848],{},[755,159839,159840,159842],{},[31,159841,1236],{}," 控制循环次数。",[755,159844,159845,159847],{},[31,159846,157862],{}," 保存累加结果。",[755,159849,159850,159851,159853],{},"每轮循环都要更新 ",[31,159852,1236],{},"，否则可能死循环。",[14,159855,159857],{"id":159856},"_44-while猜数字","4.4 while猜数字",[24,159859,159861],{"className":31029,"code":159860,"language":31031,"meta":29,"style":29},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[31,159862,159863,159869,159873,159890,159898,159902,159910,159930,159939,159943,159955,159966,159976,159987,159993,160015],{"__ignoreMap":29},[34,159864,159865,159867],{"class":36,"line":37},[34,159866,31043],{"class":87},[34,159868,45979],{"class":40},[34,159870,159871],{"class":36,"line":51},[34,159872,3053],{"emptyLinePlaceholder":726},[34,159874,159875,159877,159879,159882,159884,159886,159888],{"class":36,"line":60},[34,159876,159541],{"class":40},[34,159878,153],{"class":87},[34,159880,159881],{"class":40}," random.randint(",[34,159883,1013],{"class":63},[34,159885,13088],{"class":40},[34,159887,1106],{"class":63},[34,159889,807],{"class":40},[34,159891,159892,159894,159896],{"class":36,"line":76},[34,159893,147192],{"class":40},[34,159895,153],{"class":87},[34,159897,47984],{"class":63},[34,159899,159900],{"class":36,"line":93},[34,159901,3053],{"emptyLinePlaceholder":726},[34,159903,159904,159906,159908],{"class":36,"line":99},[34,159905,109293],{"class":87},[34,159907,95922],{"class":63},[34,159909,4392],{"class":40},[34,159911,159912,159915,159917,159919,159921,159923,159925,159928],{"class":36,"line":353},[34,159913,159914],{"class":40},"    guess ",[34,159916,153],{"class":87},[34,159918,3035],{"class":63},[34,159920,801],{"class":40},[34,159922,669],{"class":63},[34,159924,801],{"class":40},[34,159926,159927],{"class":156},"\"请输入1到100之间的数字:\"",[34,159929,31148],{"class":40},[34,159931,159932,159935,159937],{"class":36,"line":359},[34,159933,159934],{"class":40},"    count ",[34,159936,10130],{"class":87},[34,159938,56342],{"class":63},[34,159940,159941],{"class":36,"line":579},[34,159942,3053],{"emptyLinePlaceholder":726},[34,159944,159945,159947,159950,159952],{"class":36,"line":589},[34,159946,3754],{"class":87},[34,159948,159949],{"class":40}," guess ",[34,159951,1753],{"class":87},[34,159953,159954],{"class":40}," answer:\n",[34,159956,159957,159959,159961,159964],{"class":36,"line":601},[34,159958,33102],{"class":63},[34,159960,801],{"class":40},[34,159962,159963],{"class":156},"\"猜大了\"",[34,159965,807],{"class":40},[34,159967,159968,159970,159972,159974],{"class":36,"line":613},[34,159969,39944],{"class":87},[34,159971,159949],{"class":40},[34,159973,41],{"class":87},[34,159975,159954],{"class":40},[34,159977,159978,159980,159982,159985],{"class":36,"line":618},[34,159979,33102],{"class":63},[34,159981,801],{"class":40},[34,159983,159984],{"class":156},"\"猜小了\"",[34,159986,807],{"class":40},[34,159988,159989,159991],{"class":36,"line":628},[34,159990,158523],{"class":87},[34,159992,4392],{"class":40},[34,159994,159995,159997,159999,160001,160004,160006,160008,160010,160013],{"class":36,"line":640},[34,159996,33102],{"class":63},[34,159998,801],{"class":40},[34,160000,851],{"class":87},[34,160002,160003],{"class":156},"\"猜对了，一共猜了",[34,160005,1690],{"class":63},[34,160007,85064],{"class":40},[34,160009,1739],{"class":63},[34,160011,160012],{"class":156},"次\"",[34,160014,807],{"class":40},[34,160016,160017],{"class":36,"line":2301},[34,160018,32278],{"class":87},[108,160020,160021,160024,160025,160027],{},[31,160022,160023],{},"while True"," 表示无限循环，通常配合 ",[31,160026,2706],{}," 使用。",[14,160029,160031],{"id":160030},"_45-break和continue","4.5 break和continue",[19,160033,160035],{"id":160034},"_451-break","4.5.1 break",[108,160037,160038,160040],{},[31,160039,2706],{}," 直接结束整个循环。",[24,160042,160044],{"className":31029,"code":160043,"language":31031,"meta":29,"style":29},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[31,160045,160046,160066,160078,160082],{"__ignoreMap":29},[34,160047,160048,160050,160052,160054,160056,160058,160060,160062,160064],{"class":36,"line":37},[34,160049,3678],{"class":87},[34,160051,10091],{"class":40},[34,160053,26695],{"class":87},[34,160055,33094],{"class":63},[34,160057,801],{"class":40},[34,160059,1013],{"class":63},[34,160061,13088],{"class":40},[34,160063,1139],{"class":63},[34,160065,31437],{"class":40},[34,160067,160068,160070,160072,160074,160076],{"class":36,"line":51},[34,160069,3754],{"class":87},[34,160071,10091],{"class":40},[34,160073,3602],{"class":87},[34,160075,78700],{"class":63},[34,160077,4392],{"class":40},[34,160079,160080],{"class":36,"line":60},[34,160081,32278],{"class":87},[34,160083,160084,160086],{"class":36,"line":76},[34,160085,31950],{"class":63},[34,160087,159731],{"class":40},[108,160089,146958],{},[24,160091,160094],{"className":160092,"code":160093,"language":5840,"meta":29},[5838],"1\n2\n",[31,160095,160093],{"__ignoreMap":29},[19,160097,160099],{"id":160098},"_452-continue","4.5.2 continue",[108,160101,160102,160104],{},[31,160103,155173],{}," 跳过本轮剩余代码，进入下一轮循环。",[24,160106,160108],{"className":31029,"code":160107,"language":31031,"meta":29,"style":29},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[31,160109,160110,160130,160142,160146],{"__ignoreMap":29},[34,160111,160112,160114,160116,160118,160120,160122,160124,160126,160128],{"class":36,"line":37},[34,160113,3678],{"class":87},[34,160115,10091],{"class":40},[34,160117,26695],{"class":87},[34,160119,33094],{"class":63},[34,160121,801],{"class":40},[34,160123,1013],{"class":63},[34,160125,13088],{"class":40},[34,160127,1139],{"class":63},[34,160129,31437],{"class":40},[34,160131,160132,160134,160136,160138,160140],{"class":36,"line":51},[34,160133,3754],{"class":87},[34,160135,10091],{"class":40},[34,160137,3602],{"class":87},[34,160139,78700],{"class":63},[34,160141,4392],{"class":40},[34,160143,160144],{"class":36,"line":60},[34,160145,149013],{"class":87},[34,160147,160148,160150],{"class":36,"line":76},[34,160149,31950],{"class":63},[34,160151,159731],{"class":40},[108,160153,146958],{},[24,160155,160158],{"className":160156,"code":160157,"language":5840,"meta":29},[5838],"1\n2\n4\n5\n",[31,160159,160157],{"__ignoreMap":29},[14,160161,160163],{"id":160162},"_46-for循环","4.6 for循环",[108,160165,160166,160168],{},[31,160167,3678],{}," 常用于遍历序列。",[24,160170,160172],{"className":31029,"code":160171,"language":31031,"meta":29,"style":29},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[31,160173,160174,160183,160187,160198],{"__ignoreMap":29},[34,160175,160176,160178,160180],{"class":36,"line":37},[34,160177,147037],{"class":40},[34,160179,153],{"class":87},[34,160181,160182],{"class":156}," \"python\"\n",[34,160184,160185],{"class":36,"line":51},[34,160186,3053],{"emptyLinePlaceholder":726},[34,160188,160189,160191,160194,160196],{"class":36,"line":60},[34,160190,3678],{"class":87},[34,160192,160193],{"class":40}," ch ",[34,160195,26695],{"class":87},[34,160197,158900],{"class":40},[34,160199,160200,160202],{"class":36,"line":76},[34,160201,31950],{"class":63},[34,160203,160204],{"class":40},"(ch)\n",[108,160206,160207],{},"遍历列表：",[24,160209,160211],{"className":31029,"code":160210,"language":31031,"meta":29,"style":29},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[31,160212,160213,160235,160239,160249],{"__ignoreMap":29},[34,160214,160215,160218,160220,160222,160224,160226,160228,160230,160233],{"class":36,"line":37},[34,160216,160217],{"class":40},"students ",[34,160219,153],{"class":87},[34,160221,52872],{"class":40},[34,160223,150389],{"class":156},[34,160225,13088],{"class":40},[34,160227,151437],{"class":156},[34,160229,13088],{"class":40},[34,160231,160232],{"class":156},"\"小刚\"",[34,160234,33897],{"class":40},[34,160236,160237],{"class":36,"line":51},[34,160238,3053],{"emptyLinePlaceholder":726},[34,160240,160241,160243,160245,160247],{"class":36,"line":60},[34,160242,3678],{"class":87},[34,160244,152638],{"class":40},[34,160246,26695],{"class":87},[34,160248,152643],{"class":40},[34,160250,160251,160253],{"class":36,"line":76},[34,160252,31950],{"class":63},[34,160254,150543],{"class":40},[14,160256,160258],{"id":160257},"_47-range函数","4.7 range函数",[108,160260,160261,160264],{},[31,160262,160263],{},"range()"," 用于生成整数序列。",[24,160266,160268],{"className":31029,"code":160267,"language":31031,"meta":29,"style":29},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[31,160269,160270,160284,160302],{"__ignoreMap":29},[34,160271,160272,160274,160276,160278,160281],{"class":36,"line":37},[34,160273,34067],{"class":63},[34,160275,801],{"class":40},[34,160277,1114],{"class":63},[34,160279,160280],{"class":40},")          ",[34,160282,160283],{"class":205},"# 0,1,2,3,4\n",[34,160285,160286,160288,160290,160292,160294,160296,160299],{"class":36,"line":51},[34,160287,34067],{"class":63},[34,160289,801],{"class":40},[34,160291,1013],{"class":63},[34,160293,13088],{"class":40},[34,160295,1114],{"class":63},[34,160297,160298],{"class":40},")       ",[34,160300,160301],{"class":205},"# 1,2,3,4\n",[34,160303,160304,160306,160308,160310,160312,160314,160316,160318,160320],{"class":36,"line":60},[34,160305,34067],{"class":63},[34,160307,801],{"class":40},[34,160309,1013],{"class":63},[34,160311,13088],{"class":40},[34,160313,1241],{"class":63},[34,160315,13088],{"class":40},[34,160317,875],{"class":63},[34,160319,156162],{"class":40},[34,160321,160322],{"class":205},"# 1,3,5,7,9\n",[108,160324,160325,160326,25271],{},"配合 ",[31,160327,3678],{},[24,160329,160331],{"className":31029,"code":160330,"language":31031,"meta":29,"style":29},"for i in range(1, 6):\n    print(i)\n",[31,160332,160333,160353],{"__ignoreMap":29},[34,160334,160335,160337,160339,160341,160343,160345,160347,160349,160351],{"class":36,"line":37},[34,160336,3678],{"class":87},[34,160338,10091],{"class":40},[34,160340,26695],{"class":87},[34,160342,33094],{"class":63},[34,160344,801],{"class":40},[34,160346,1013],{"class":63},[34,160348,13088],{"class":40},[34,160350,1139],{"class":63},[34,160352,31437],{"class":40},[34,160354,160355,160357],{"class":36,"line":51},[34,160356,31950],{"class":63},[34,160358,159731],{"class":40},[108,160360,9678,160361,160363],{},[31,160362,34067],{}," 的结束值不包含在内。",[14,160365,160367],{"id":160366},"_48-for循环求和","4.8 for循环求和",[24,160369,160371],{"className":31029,"code":160370,"language":31031,"meta":29,"style":29},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[31,160372,160373,160381,160385,160405,160413,160417],{"__ignoreMap":29},[34,160374,160375,160377,160379],{"class":36,"line":37},[34,160376,157761],{"class":40},[34,160378,153],{"class":87},[34,160380,47984],{"class":63},[34,160382,160383],{"class":36,"line":51},[34,160384,3053],{"emptyLinePlaceholder":726},[34,160386,160387,160389,160391,160393,160395,160397,160399,160401,160403],{"class":36,"line":60},[34,160388,3678],{"class":87},[34,160390,10091],{"class":40},[34,160392,26695],{"class":87},[34,160394,33094],{"class":63},[34,160396,801],{"class":40},[34,160398,1013],{"class":63},[34,160400,13088],{"class":40},[34,160402,1132],{"class":63},[34,160404,31437],{"class":40},[34,160406,160407,160409,160411],{"class":36,"line":76},[34,160408,159808],{"class":40},[34,160410,10130],{"class":87},[34,160412,159813],{"class":40},[34,160414,160415],{"class":36,"line":93},[34,160416,3053],{"emptyLinePlaceholder":726},[34,160418,160419,160421],{"class":36,"line":99},[34,160420,31066],{"class":63},[34,160422,159832],{"class":40},[108,160424,160425],{},"求偶数和：",[24,160427,160429],{"className":31029,"code":160428,"language":31031,"meta":29,"style":29},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[31,160430,160431,160439,160443,160463,160479,160488,160492],{"__ignoreMap":29},[34,160432,160433,160435,160437],{"class":36,"line":37},[34,160434,157761],{"class":40},[34,160436,153],{"class":87},[34,160438,47984],{"class":63},[34,160440,160441],{"class":36,"line":51},[34,160442,3053],{"emptyLinePlaceholder":726},[34,160444,160445,160447,160449,160451,160453,160455,160457,160459,160461],{"class":36,"line":60},[34,160446,3678],{"class":87},[34,160448,10091],{"class":40},[34,160450,26695],{"class":87},[34,160452,33094],{"class":63},[34,160454,801],{"class":40},[34,160456,1013],{"class":63},[34,160458,13088],{"class":40},[34,160460,1132],{"class":63},[34,160462,31437],{"class":40},[34,160464,160465,160467,160469,160471,160473,160475,160477],{"class":36,"line":76},[34,160466,3754],{"class":87},[34,160468,10091],{"class":40},[34,160470,1123],{"class":87},[34,160472,15408],{"class":63},[34,160474,102189],{"class":87},[34,160476,4746],{"class":63},[34,160478,4392],{"class":40},[34,160480,160481,160484,160486],{"class":36,"line":93},[34,160482,160483],{"class":40},"        total ",[34,160485,10130],{"class":87},[34,160487,159813],{"class":40},[34,160489,160490],{"class":36,"line":99},[34,160491,3053],{"emptyLinePlaceholder":726},[34,160493,160494,160496],{"class":36,"line":353},[34,160495,31066],{"class":63},[34,160497,159832],{"class":40},[108,160499,160500],{},"也可以：",[24,160502,160504],{"className":31029,"code":160503,"language":31031,"meta":29,"style":29},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[31,160505,160506,160514,160518,160542,160550,160554],{"__ignoreMap":29},[34,160507,160508,160510,160512],{"class":36,"line":37},[34,160509,157761],{"class":40},[34,160511,153],{"class":87},[34,160513,47984],{"class":63},[34,160515,160516],{"class":36,"line":51},[34,160517,3053],{"emptyLinePlaceholder":726},[34,160519,160520,160522,160524,160526,160528,160530,160532,160534,160536,160538,160540],{"class":36,"line":60},[34,160521,3678],{"class":87},[34,160523,10091],{"class":40},[34,160525,26695],{"class":87},[34,160527,33094],{"class":63},[34,160529,801],{"class":40},[34,160531,875],{"class":63},[34,160533,13088],{"class":40},[34,160535,1132],{"class":63},[34,160537,13088],{"class":40},[34,160539,875],{"class":63},[34,160541,31437],{"class":40},[34,160543,160544,160546,160548],{"class":36,"line":76},[34,160545,159808],{"class":40},[34,160547,10130],{"class":87},[34,160549,159813],{"class":40},[34,160551,160552],{"class":36,"line":93},[34,160553,3053],{"emptyLinePlaceholder":726},[34,160555,160556,160558],{"class":36,"line":99},[34,160557,31066],{"class":63},[34,160559,159832],{"class":40},[14,160561,160563],{"id":160562},"_49-循环嵌套","4.9 循环嵌套",[108,160565,160566],{},"嵌套循环就是循环里面再写循环。",[24,160568,160570],{"className":31029,"code":160569,"language":31031,"meta":29,"style":29},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[31,160571,160572,160592,160612],{"__ignoreMap":29},[34,160573,160574,160576,160578,160580,160582,160584,160586,160588,160590],{"class":36,"line":37},[34,160575,3678],{"class":87},[34,160577,10091],{"class":40},[34,160579,26695],{"class":87},[34,160581,33094],{"class":63},[34,160583,801],{"class":40},[34,160585,1013],{"class":63},[34,160587,13088],{"class":40},[34,160589,1088],{"class":63},[34,160591,31437],{"class":40},[34,160593,160594,160596,160598,160600,160602,160604,160606,160608,160610],{"class":36,"line":51},[34,160595,3854],{"class":87},[34,160597,10153],{"class":40},[34,160599,26695],{"class":87},[34,160601,33094],{"class":63},[34,160603,801],{"class":40},[34,160605,1013],{"class":63},[34,160607,13088],{"class":40},[34,160609,1088],{"class":63},[34,160611,31437],{"class":40},[34,160613,160614,160616,160618,160620,160623,160625,160627,160629,160632,160634,160636,160638,160640],{"class":36,"line":60},[34,160615,33102],{"class":63},[34,160617,801],{"class":40},[34,160619,851],{"class":87},[34,160621,160622],{"class":156},"\"i=",[34,160624,1690],{"class":63},[34,160626,1236],{"class":40},[34,160628,1739],{"class":63},[34,160630,160631],{"class":156},", j=",[34,160633,1690],{"class":63},[34,160635,1262],{"class":40},[34,160637,1739],{"class":63},[34,160639,1046],{"class":156},[34,160641,807],{"class":40},[108,160643,160644],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160646,160648],{"id":160647},"_410-九九乘法表","4.10 九九乘法表",[24,160650,160652],{"className":31029,"code":160651,"language":31031,"meta":29,"style":29},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[31,160653,160654,160674,160697,160749],{"__ignoreMap":29},[34,160655,160656,160658,160660,160662,160664,160666,160668,160670,160672],{"class":36,"line":37},[34,160657,3678],{"class":87},[34,160659,10091],{"class":40},[34,160661,26695],{"class":87},[34,160663,33094],{"class":63},[34,160665,801],{"class":40},[34,160667,1013],{"class":63},[34,160669,13088],{"class":40},[34,160671,1241],{"class":63},[34,160673,31437],{"class":40},[34,160675,160676,160678,160680,160682,160684,160686,160688,160691,160693,160695],{"class":36,"line":51},[34,160677,3854],{"class":87},[34,160679,10153],{"class":40},[34,160681,26695],{"class":87},[34,160683,33094],{"class":63},[34,160685,801],{"class":40},[34,160687,1013],{"class":63},[34,160689,160690],{"class":40},", i ",[34,160692,1276],{"class":87},[34,160694,25771],{"class":63},[34,160696,31437],{"class":40},[34,160698,160699,160701,160703,160705,160707,160709,160711,160713,160715,160717,160719,160721,160723,160725,160727,160729,160731,160733,160735,160737,160739,160741,160743,160745,160747],{"class":36,"line":60},[34,160700,33102],{"class":63},[34,160702,801],{"class":40},[34,160704,851],{"class":87},[34,160706,1046],{"class":156},[34,160708,1690],{"class":63},[34,160710,1262],{"class":40},[34,160712,1739],{"class":63},[34,160714,1250],{"class":156},[34,160716,1690],{"class":63},[34,160718,1236],{"class":40},[34,160720,1739],{"class":63},[34,160722,153],{"class":156},[34,160724,1690],{"class":63},[34,160726,100778],{"class":40},[34,160728,1250],{"class":87},[34,160730,4063],{"class":40},[34,160732,1739],{"class":63},[34,160734,1046],{"class":156},[34,160736,13088],{"class":40},[34,160738,46452],{"class":5869},[34,160740,153],{"class":87},[34,160742,1046],{"class":156},[34,160744,1894],{"class":63},[34,160746,1046],{"class":156},[34,160748,807],{"class":40},[34,160750,160751,160753],{"class":36,"line":76},[34,160752,31950],{"class":63},[34,160754,2629],{"class":40},[108,160756,160757],{},"关键点：",[752,160759,160760,160766,160772,160778],{},[755,160761,160762,160763,160765],{},"外层 ",[31,160764,1236],{}," 控制行。",[755,160767,160768,160769,160771],{},"内层 ",[31,160770,1262],{}," 控制列。",[755,160773,160774,160775,160777],{},"每行结束后用 ",[31,160776,146973],{}," 换行。",[755,160779,160780,160783],{},[31,160781,160782],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160785,160787],{"id":160786},"_411-循环else","4.11 循环else",[108,160789,160790,160791,160793,160794,160796,160797,160799],{},"Python 的循环可以带 ",[31,160792,2355],{},"。当循环正常结束时执行 ",[31,160795,2355],{},"，如果被 ",[31,160798,2706],{}," 打断，则不执行。",[24,160801,160803],{"className":31029,"code":160802,"language":31031,"meta":29,"style":29},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[31,160804,160805,160825,160837,160848,160852,160858],{"__ignoreMap":29},[34,160806,160807,160809,160811,160813,160815,160817,160819,160821,160823],{"class":36,"line":37},[34,160808,3678],{"class":87},[34,160810,10091],{"class":40},[34,160812,26695],{"class":87},[34,160814,33094],{"class":63},[34,160816,801],{"class":40},[34,160818,1013],{"class":63},[34,160820,13088],{"class":40},[34,160822,1139],{"class":63},[34,160824,31437],{"class":40},[34,160826,160827,160829,160831,160833,160835],{"class":36,"line":51},[34,160828,3754],{"class":87},[34,160830,10091],{"class":40},[34,160832,3602],{"class":87},[34,160834,2691],{"class":63},[34,160836,4392],{"class":40},[34,160838,160839,160841,160843,160846],{"class":36,"line":60},[34,160840,33102],{"class":63},[34,160842,801],{"class":40},[34,160844,160845],{"class":156},"\"找到了\"",[34,160847,807],{"class":40},[34,160849,160850],{"class":36,"line":76},[34,160851,32278],{"class":87},[34,160853,160854,160856],{"class":36,"line":93},[34,160855,2355],{"class":87},[34,160857,4392],{"class":40},[34,160859,160860,160862,160864,160867],{"class":36,"line":99},[34,160861,31950],{"class":63},[34,160863,801],{"class":40},[34,160865,160866],{"class":156},"\"没找到\"",[34,160868,807],{"class":40},[108,160870,160871],{},"常用于搜索。",[24,160873,160875],{"className":31029,"code":160874,"language":31031,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[31,160876,160877,160898,160907,160911,160923,160934,160944,160948,160954],{"__ignoreMap":29},[34,160878,160879,160882,160884,160886,160888,160890,160892,160894,160896],{"class":36,"line":37},[34,160880,160881],{"class":40},"names ",[34,160883,153],{"class":87},[34,160885,52872],{"class":40},[34,160887,150389],{"class":156},[34,160889,13088],{"class":40},[34,160891,151437],{"class":156},[34,160893,13088],{"class":40},[34,160895,160232],{"class":156},[34,160897,33897],{"class":40},[34,160899,160900,160902,160904],{"class":36,"line":51},[34,160901,112208],{"class":40},[34,160903,153],{"class":87},[34,160905,160906],{"class":156}," \"小李\"\n",[34,160908,160909],{"class":36,"line":60},[34,160910,3053],{"emptyLinePlaceholder":726},[34,160912,160913,160915,160918,160920],{"class":36,"line":76},[34,160914,3678],{"class":87},[34,160916,160917],{"class":40}," name ",[34,160919,26695],{"class":87},[34,160921,160922],{"class":40}," names:\n",[34,160924,160925,160927,160929,160931],{"class":36,"line":93},[34,160926,3754],{"class":87},[34,160928,160917],{"class":40},[34,160930,3602],{"class":87},[34,160932,160933],{"class":40}," target:\n",[34,160935,160936,160938,160940,160942],{"class":36,"line":99},[34,160937,33102],{"class":63},[34,160939,801],{"class":40},[34,160941,160845],{"class":156},[34,160943,807],{"class":40},[34,160945,160946],{"class":36,"line":353},[34,160947,32278],{"class":87},[34,160949,160950,160952],{"class":36,"line":359},[34,160951,2355],{"class":87},[34,160953,4392],{"class":40},[34,160955,160956,160958,160960,160962],{"class":36,"line":579},[34,160957,31950],{"class":63},[34,160959,801],{"class":40},[34,160961,160866],{"class":156},[34,160963,807],{"class":40},[14,160965,160967],{"id":160966},"_412-小案例登录重试","4.12 小案例：登录重试",[108,160969,123922],{},[752,160971,160972,160975,160978],{},[755,160973,160974],{},"用户最多输入 3 次密码。",[755,160976,160977],{},"密码正确则登录成功。",[755,160979,160980],{},"3 次都错误则锁定账号。",[108,160982,10688],{},[24,160984,160986],{"className":31029,"code":160985,"language":31031,"meta":29,"style":29},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[31,160987,160988,160998,161002,161018,161034,161038,161050,161061,161065,161071,161096,161102],{"__ignoreMap":29},[34,160989,160990,160993,160995],{"class":36,"line":37},[34,160991,160992],{"class":40},"password ",[34,160994,153],{"class":87},[34,160996,160997],{"class":156}," \"123456\"\n",[34,160999,161000],{"class":36,"line":51},[34,161001,3053],{"emptyLinePlaceholder":726},[34,161003,161004,161006,161008,161010,161012,161014,161016],{"class":36,"line":60},[34,161005,3678],{"class":87},[34,161007,10091],{"class":40},[34,161009,26695],{"class":87},[34,161011,33094],{"class":63},[34,161013,801],{"class":40},[34,161015,869],{"class":63},[34,161017,31437],{"class":40},[34,161019,161020,161023,161025,161027,161029,161032],{"class":36,"line":76},[34,161021,161022],{"class":40},"    user_password ",[34,161024,153],{"class":87},[34,161026,61248],{"class":63},[34,161028,801],{"class":40},[34,161030,161031],{"class":156},"\"请输入密码:\"",[34,161033,807],{"class":40},[34,161035,161036],{"class":36,"line":93},[34,161037,3053],{"emptyLinePlaceholder":726},[34,161039,161040,161042,161045,161047],{"class":36,"line":99},[34,161041,3754],{"class":87},[34,161043,161044],{"class":40}," user_password ",[34,161046,3602],{"class":87},[34,161048,161049],{"class":40}," password:\n",[34,161051,161052,161054,161056,161059],{"class":36,"line":353},[34,161053,33102],{"class":63},[34,161055,801],{"class":40},[34,161057,161058],{"class":156},"\"登录成功\"",[34,161060,807],{"class":40},[34,161062,161063],{"class":36,"line":359},[34,161064,32278],{"class":87},[34,161066,161067,161069],{"class":36,"line":579},[34,161068,158523],{"class":87},[34,161070,4392],{"class":40},[34,161072,161073,161075,161077,161079,161082,161085,161087,161089,161091,161094],{"class":36,"line":589},[34,161074,33102],{"class":63},[34,161076,801],{"class":40},[34,161078,851],{"class":87},[34,161080,161081],{"class":156},"\"密码错误，还剩",[34,161083,161084],{"class":63},"{2",[34,161086,52917],{"class":87},[34,161088,3685],{"class":40},[34,161090,1739],{"class":63},[34,161092,161093],{"class":156},"次机会\"",[34,161095,807],{"class":40},[34,161097,161098,161100],{"class":36,"line":601},[34,161099,2355],{"class":87},[34,161101,4392],{"class":40},[34,161103,161104,161106,161108,161111],{"class":36,"line":613},[34,161105,31950],{"class":63},[34,161107,801],{"class":40},[34,161109,161110],{"class":156},"\"账号已锁定\"",[34,161112,807],{"class":40},[14,161114,161116],{"id":161115},"_413-小案例菜单程序","4.13 小案例：菜单程序",[24,161118,161120],{"className":31029,"code":161119,"language":31031,"meta":29,"style":29},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[31,161121,161122,161130,161141,161152,161163,161174,161185,161189,161204,161208,161220,161231,161243,161254,161266,161277,161289,161299,161303,161309],{"__ignoreMap":29},[34,161123,161124,161126,161128],{"class":36,"line":37},[34,161125,109293],{"class":87},[34,161127,95922],{"class":63},[34,161129,4392],{"class":40},[34,161131,161132,161134,161136,161139],{"class":36,"line":51},[34,161133,31950],{"class":63},[34,161135,801],{"class":40},[34,161137,161138],{"class":156},"\"====== 菜单 ======\"",[34,161140,807],{"class":40},[34,161142,161143,161145,161147,161150],{"class":36,"line":60},[34,161144,31950],{"class":63},[34,161146,801],{"class":40},[34,161148,161149],{"class":156},"\"1. 查询余额\"",[34,161151,807],{"class":40},[34,161153,161154,161156,161158,161161],{"class":36,"line":76},[34,161155,31950],{"class":63},[34,161157,801],{"class":40},[34,161159,161160],{"class":156},"\"2. 存款\"",[34,161162,807],{"class":40},[34,161164,161165,161167,161169,161172],{"class":36,"line":93},[34,161166,31950],{"class":63},[34,161168,801],{"class":40},[34,161170,161171],{"class":156},"\"3. 取款\"",[34,161173,807],{"class":40},[34,161175,161176,161178,161180,161183],{"class":36,"line":99},[34,161177,31950],{"class":63},[34,161179,801],{"class":40},[34,161181,161182],{"class":156},"\"0. 退出\"",[34,161184,807],{"class":40},[34,161186,161187],{"class":36,"line":353},[34,161188,3053],{"emptyLinePlaceholder":726},[34,161190,161191,161194,161196,161198,161200,161202],{"class":36,"line":359},[34,161192,161193],{"class":40},"    choice ",[34,161195,153],{"class":87},[34,161197,61248],{"class":63},[34,161199,801],{"class":40},[34,161201,153574],{"class":156},[34,161203,807],{"class":40},[34,161205,161206],{"class":36,"line":579},[34,161207,3053],{"emptyLinePlaceholder":726},[34,161209,161210,161212,161214,161216,161218],{"class":36,"line":589},[34,161211,3754],{"class":87},[34,161213,153587],{"class":40},[34,161215,3602],{"class":87},[34,161217,153592],{"class":156},[34,161219,4392],{"class":40},[34,161221,161222,161224,161226,161229],{"class":36,"line":601},[34,161223,33102],{"class":63},[34,161225,801],{"class":40},[34,161227,161228],{"class":156},"\"余额为1000元\"",[34,161230,807],{"class":40},[34,161232,161233,161235,161237,161239,161241],{"class":36,"line":613},[34,161234,39944],{"class":87},[34,161236,153587],{"class":40},[34,161238,3602],{"class":87},[34,161240,153611],{"class":156},[34,161242,4392],{"class":40},[34,161244,161245,161247,161249,161252],{"class":36,"line":618},[34,161246,33102],{"class":63},[34,161248,801],{"class":40},[34,161250,161251],{"class":156},"\"存款功能\"",[34,161253,807],{"class":40},[34,161255,161256,161258,161260,161262,161264],{"class":36,"line":628},[34,161257,39944],{"class":87},[34,161259,153587],{"class":40},[34,161261,3602],{"class":87},[34,161263,153629],{"class":156},[34,161265,4392],{"class":40},[34,161267,161268,161270,161272,161275],{"class":36,"line":640},[34,161269,33102],{"class":63},[34,161271,801],{"class":40},[34,161273,161274],{"class":156},"\"取款功能\"",[34,161276,807],{"class":40},[34,161278,161279,161281,161283,161285,161287],{"class":36,"line":2301},[34,161280,39944],{"class":87},[34,161282,153587],{"class":40},[34,161284,3602],{"class":87},[34,161286,153683],{"class":156},[34,161288,4392],{"class":40},[34,161290,161291,161293,161295,161297],{"class":36,"line":2307},[34,161292,33102],{"class":63},[34,161294,801],{"class":40},[34,161296,153694],{"class":156},[34,161298,807],{"class":40},[34,161300,161301],{"class":36,"line":2328},[34,161302,32278],{"class":87},[34,161304,161305,161307],{"class":36,"line":2333},[34,161306,158523],{"class":87},[34,161308,4392],{"class":40},[34,161310,161311,161313,161315,161317],{"class":36,"line":2347},[34,161312,33102],{"class":63},[34,161314,801],{"class":40},[34,161316,153715],{"class":156},[34,161318,807],{"class":40},[108,161320,161321,161322,161324,161325,29036],{},"菜单类程序通常使用 ",[31,161323,160023],{},"，用户选择退出时 ",[31,161326,2706],{},[14,161328,161330],{"id":161329},"_414-易错点","4.14 易错点",[752,161332,161333,161338,161344,161352,161358],{},[755,161334,161335,161337],{},[31,161336,109293],{}," 循环必须更新控制变量。",[755,161339,161340,161343],{},[31,161341,161342],{},"range(1, 10)"," 不包含 10。",[755,161345,161346,161348,161349,161351],{},[31,161347,2706],{}," 结束整个循环，",[31,161350,155173],{}," 只跳过本轮。",[755,161353,161354,161355,161357],{},"嵌套循环中，",[31,161356,2706],{}," 只跳出当前所在的一层循环。",[755,161359,161360],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161362,161364],{"id":161363},"_415-本章练习","4.15 本章练习",[752,161366,161367,161370,161373,161376,161379],{},[755,161368,161369],{},"输出 1 到 100。",[755,161371,161372],{},"计算 1 到 100 的偶数和。",[755,161374,161375],{},"输出 100 以内能被 3 和 5 同时整除的数。",[755,161377,161378],{},"编写猜数字游戏，限制最多猜 7 次。",[755,161380,161381],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[45,161383,161384],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":161386},[161387,161388,161389,161390,161391,161395,161396,161397,161398,161399,161400,161401,161402,161403,161404],{"id":159643,"depth":51,"text":159644},{"id":159673,"depth":51,"text":159674},{"id":159762,"depth":51,"text":159763},{"id":159856,"depth":51,"text":159857},{"id":160030,"depth":51,"text":160031,"children":161392},[161393,161394],{"id":160034,"depth":60,"text":160035},{"id":160098,"depth":60,"text":160099},{"id":160162,"depth":51,"text":160163},{"id":160257,"depth":51,"text":160258},{"id":160366,"depth":51,"text":160367},{"id":160562,"depth":51,"text":160563},{"id":160647,"depth":51,"text":160648},{"id":160786,"depth":51,"text":160787},{"id":160966,"depth":51,"text":160967},{"id":161115,"depth":51,"text":161116},{"id":161329,"depth":51,"text":161330},{"id":161363,"depth":51,"text":161364},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159635,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161411,"title":161412,"body":161413,"description":723,"extension":724,"meta":163418,"navigation":726,"path":163419,"seo":163420,"stem":163421,"__hash__":163422},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161414,"toc":163398},[161415,161418,161422,161425,161428,161442,161445,161459,161463,161465,161484,161486,161533,161535,161549,161553,161627,161630,161634,161637,161696,161704,161707,161760,161763,161767,161772,161827,161835,161885,161889,161894,161902,162001,162007,162011,162016,162019,162030,162071,162084,162088,162091,162127,162130,162143,162146,162206,162210,162214,162217,162268,162272,162275,162322,162328,162394,162397,162401,162404,162520,162523,162527,162530,162636,162640,162643,162681,162684,162726,162729,162789,162792,162796,163260,163263,163267,163294,163300,163361,163365,163395],[10,161416,161412],{"id":161417},"_5-函数基础",[14,161419,161421],{"id":161420},"_51-为什么需要函数","5.1 为什么需要函数",[108,161423,161424],{},"函数用于封装一段可以重复使用的代码。",[108,161426,161427],{},"不使用函数的问题：",[752,161429,161430,161433,161436,161439],{},[755,161431,161432],{},"重复代码多。",[755,161434,161435],{},"修改逻辑时容易漏改。",[755,161437,161438],{},"主流程不清晰。",[755,161440,161441],{},"程序越写越长，难以维护。",[108,161443,161444],{},"使用函数后的好处：",[752,161446,161447,161450,161453,161456],{},[755,161448,161449],{},"提高复用性。",[755,161451,161452],{},"提高可读性。",[755,161454,161455],{},"便于调试。",[755,161457,161458],{},"便于分工。",[14,161460,161462],{"id":161461},"_52-函数定义","5.2 函数定义",[108,161464,5834],{},[24,161466,161468],{"className":31029,"code":161467,"language":31031,"meta":29,"style":29},"def 函数名():\n    函数体\n",[31,161469,161470,161479],{"__ignoreMap":29},[34,161471,161472,161474,161477],{"class":36,"line":37},[34,161473,32598],{"class":87},[34,161475,161476],{"class":149}," 函数名",[34,161478,32604],{"class":40},[34,161480,161481],{"class":36,"line":51},[34,161482,161483],{"class":40},"    函数体\n",[108,161485,15788],{},[24,161487,161489],{"className":31029,"code":161488,"language":31031,"meta":29,"style":29},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[31,161490,161491,161500,161510,161520,161524,161528],{"__ignoreMap":29},[34,161492,161493,161495,161498],{"class":36,"line":37},[34,161494,32598],{"class":87},[34,161496,161497],{"class":149}," say_hello",[34,161499,32604],{"class":40},[34,161501,161502,161504,161506,161508],{"class":36,"line":51},[34,161503,31950],{"class":63},[34,161505,801],{"class":40},[34,161507,6497],{"class":156},[34,161509,807],{"class":40},[34,161511,161512,161514,161516,161518],{"class":36,"line":60},[34,161513,31950],{"class":63},[34,161515,801],{"class":40},[34,161517,147140],{"class":156},[34,161519,807],{"class":40},[34,161521,161522],{"class":36,"line":76},[34,161523,3053],{"emptyLinePlaceholder":726},[34,161525,161526],{"class":36,"line":93},[34,161527,3053],{"emptyLinePlaceholder":726},[34,161529,161530],{"class":36,"line":99},[34,161531,161532],{"class":40},"say_hello()\n",[108,161534,9678],{},[752,161536,161537,161540,161543,161546],{},[755,161538,161539],{},"函数必须先定义，再调用。",[755,161541,161542],{},"函数名遵循变量命名规则。",[755,161544,161545],{},"函数体需要缩进。",[755,161547,161548],{},"函数不调用就不会执行。",[14,161550,161552],{"id":161551},"_53-函数调用","5.3 函数调用",[24,161554,161556],{"className":31029,"code":161555,"language":31031,"meta":29,"style":29},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[31,161557,161558,161567,161578,161589,161600,161610,161614,161618,161623],{"__ignoreMap":29},[34,161559,161560,161562,161565],{"class":36,"line":37},[34,161561,32598],{"class":87},[34,161563,161564],{"class":149}," print_menu",[34,161566,32604],{"class":40},[34,161568,161569,161571,161573,161576],{"class":36,"line":51},[34,161570,31950],{"class":63},[34,161572,801],{"class":40},[34,161574,161575],{"class":156},"\"1. 查询\"",[34,161577,807],{"class":40},[34,161579,161580,161582,161584,161587],{"class":36,"line":60},[34,161581,31950],{"class":63},[34,161583,801],{"class":40},[34,161585,161586],{"class":156},"\"2. 添加\"",[34,161588,807],{"class":40},[34,161590,161591,161593,161595,161598],{"class":36,"line":76},[34,161592,31950],{"class":63},[34,161594,801],{"class":40},[34,161596,161597],{"class":156},"\"3. 删除\"",[34,161599,807],{"class":40},[34,161601,161602,161604,161606,161608],{"class":36,"line":93},[34,161603,31950],{"class":63},[34,161605,801],{"class":40},[34,161607,161182],{"class":156},[34,161609,807],{"class":40},[34,161611,161612],{"class":36,"line":99},[34,161613,3053],{"emptyLinePlaceholder":726},[34,161615,161616],{"class":36,"line":353},[34,161617,3053],{"emptyLinePlaceholder":726},[34,161619,161620],{"class":36,"line":359},[34,161621,161622],{"class":40},"print_menu()\n",[34,161624,161625],{"class":36,"line":579},[34,161626,161622],{"class":40},[108,161628,161629],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161631,161633],{"id":161632},"_54-参数","5.4 参数",[108,161635,161636],{},"参数用于向函数传递数据。",[24,161638,161640],{"className":31029,"code":161639,"language":31031,"meta":29,"style":29},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[31,161641,161642,161651,161671,161675,161679,161688],{"__ignoreMap":29},[34,161643,161644,161646,161648],{"class":36,"line":37},[34,161645,32598],{"class":87},[34,161647,161497],{"class":149},[34,161649,161650],{"class":40},"(name):\n",[34,161652,161653,161655,161657,161659,161661,161663,161665,161667,161669],{"class":36,"line":51},[34,161654,31950],{"class":63},[34,161656,801],{"class":40},[34,161658,851],{"class":87},[34,161660,157555],{"class":156},[34,161662,1690],{"class":63},[34,161664,80440],{"class":40},[34,161666,1739],{"class":63},[34,161668,1046],{"class":156},[34,161670,807],{"class":40},[34,161672,161673],{"class":36,"line":60},[34,161674,3053],{"emptyLinePlaceholder":726},[34,161676,161677],{"class":36,"line":76},[34,161678,3053],{"emptyLinePlaceholder":726},[34,161680,161681,161684,161686],{"class":36,"line":93},[34,161682,161683],{"class":40},"say_hello(",[34,161685,150389],{"class":156},[34,161687,807],{"class":40},[34,161689,161690,161692,161694],{"class":36,"line":99},[34,161691,161683],{"class":40},[34,161693,151437],{"class":156},[34,161695,807],{"class":40},[108,161697,161698,161700,161701,161703],{},[31,161699,80440],{}," 是形参，",[31,161702,150389],{}," 是实参。",[108,161705,161706],{},"多个参数：",[24,161708,161710],{"className":31029,"code":161709,"language":31031,"meta":29,"style":29},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[31,161711,161712,161720,161733,161739,161743,161747],{"__ignoreMap":29},[34,161713,161714,161716,161718],{"class":36,"line":37},[34,161715,32598],{"class":87},[34,161717,5862],{"class":149},[34,161719,151594],{"class":40},[34,161721,161722,161725,161727,161729,161731],{"class":36,"line":51},[34,161723,161724],{"class":40},"    result ",[34,161726,153],{"class":87},[34,161728,11522],{"class":40},[34,161730,1276],{"class":87},[34,161732,151605],{"class":40},[34,161734,161735,161737],{"class":36,"line":60},[34,161736,31950],{"class":63},[34,161738,77216],{"class":40},[34,161740,161741],{"class":36,"line":76},[34,161742,3053],{"emptyLinePlaceholder":726},[34,161744,161745],{"class":36,"line":93},[34,161746,3053],{"emptyLinePlaceholder":726},[34,161748,161749,161752,161754,161756,161758],{"class":36,"line":99},[34,161750,161751],{"class":40},"add(",[34,161753,1241],{"class":63},[34,161755,13088],{"class":40},[34,161757,1495],{"class":63},[34,161759,807],{"class":40},[108,161761,161762],{},"调用时参数数量必须匹配。",[14,161764,161766],{"id":161765},"_55-返回值","5.5 返回值",[108,161768,161769,161771],{},[31,161770,17698],{}," 用于把函数内部的结果返回给调用者。",[24,161773,161775],{"className":31029,"code":161774,"language":31031,"meta":29,"style":29},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[31,161776,161777,161785,161795,161799,161803,161821],{"__ignoreMap":29},[34,161778,161779,161781,161783],{"class":36,"line":37},[34,161780,32598],{"class":87},[34,161782,5862],{"class":149},[34,161784,151594],{"class":40},[34,161786,161787,161789,161791,161793],{"class":36,"line":51},[34,161788,4743],{"class":87},[34,161790,11522],{"class":40},[34,161792,1276],{"class":87},[34,161794,151605],{"class":40},[34,161796,161797],{"class":36,"line":60},[34,161798,3053],{"emptyLinePlaceholder":726},[34,161800,161801],{"class":36,"line":76},[34,161802,3053],{"emptyLinePlaceholder":726},[34,161804,161805,161808,161810,161813,161815,161817,161819],{"class":36,"line":93},[34,161806,161807],{"class":40},"result ",[34,161809,153],{"class":87},[34,161811,161812],{"class":40}," add(",[34,161814,1241],{"class":63},[34,161816,13088],{"class":40},[34,161818,1495],{"class":63},[34,161820,807],{"class":40},[34,161822,161823,161825],{"class":36,"line":99},[34,161824,31066],{"class":63},[34,161826,77216],{"class":40},[108,161828,161829,161830,161832,161833,29036],{},"如果函数没有写 ",[31,161831,17698],{},"，默认返回 ",[31,161834,96316],{},[24,161836,161838],{"className":31029,"code":161837,"language":31031,"meta":29,"style":29},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[31,161839,161840,161848,161858,161862,161866,161875],{"__ignoreMap":29},[34,161841,161842,161844,161846],{"class":36,"line":37},[34,161843,32598],{"class":87},[34,161845,161497],{"class":149},[34,161847,32604],{"class":40},[34,161849,161850,161852,161854,161856],{"class":36,"line":51},[34,161851,31950],{"class":63},[34,161853,801],{"class":40},[34,161855,6497],{"class":156},[34,161857,807],{"class":40},[34,161859,161860],{"class":36,"line":60},[34,161861,3053],{"emptyLinePlaceholder":726},[34,161863,161864],{"class":36,"line":76},[34,161865,3053],{"emptyLinePlaceholder":726},[34,161867,161868,161870,161872],{"class":36,"line":93},[34,161869,161807],{"class":40},[34,161871,153],{"class":87},[34,161873,161874],{"class":40}," say_hello()\n",[34,161876,161877,161879,161882],{"class":36,"line":99},[34,161878,31066],{"class":63},[34,161880,161881],{"class":40},"(result)  ",[34,161883,161884],{"class":205},"# None\n",[14,161886,161888],{"id":161887},"_56-return的作用","5.6 return的作用",[108,161890,161891,161893],{},[31,161892,17698],{}," 有两个作用：",[752,161895,161896,161899],{},[755,161897,161898],{},"返回结果。",[755,161900,161901],{},"结束函数。",[24,161903,161905],{"className":31029,"code":161904,"language":31031,"meta":29,"style":29},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[31,161906,161907,161917,161929,161936,161940,161952,161959,161963,161970,161974,161978,161989],{"__ignoreMap":29},[34,161908,161909,161911,161914],{"class":36,"line":37},[34,161910,32598],{"class":87},[34,161912,161913],{"class":149}," check_age",[34,161915,161916],{"class":40},"(age):\n",[34,161918,161919,161921,161923,161925,161927],{"class":36,"line":51},[34,161920,3754],{"class":87},[34,161922,16359],{"class":40},[34,161924,41],{"class":87},[34,161926,4746],{"class":63},[34,161928,4392],{"class":40},[34,161930,161931,161933],{"class":36,"line":60},[34,161932,15405],{"class":87},[34,161934,161935],{"class":156}," \"年龄不合法\"\n",[34,161937,161938],{"class":36,"line":76},[34,161939,3053],{"emptyLinePlaceholder":726},[34,161941,161942,161944,161946,161948,161950],{"class":36,"line":93},[34,161943,3754],{"class":87},[34,161945,16359],{"class":40},[34,161947,2364],{"class":87},[34,161949,156786],{"class":63},[34,161951,4392],{"class":40},[34,161953,161954,161956],{"class":36,"line":99},[34,161955,15405],{"class":87},[34,161957,161958],{"class":156}," \"成年人\"\n",[34,161960,161961],{"class":36,"line":353},[34,161962,3053],{"emptyLinePlaceholder":726},[34,161964,161965,161967],{"class":36,"line":359},[34,161966,4743],{"class":87},[34,161968,161969],{"class":156}," \"未成年人\"\n",[34,161971,161972],{"class":36,"line":579},[34,161973,3053],{"emptyLinePlaceholder":726},[34,161975,161976],{"class":36,"line":589},[34,161977,3053],{"emptyLinePlaceholder":726},[34,161979,161980,161982,161985,161987],{"class":36,"line":601},[34,161981,31066],{"class":63},[34,161983,161984],{"class":40},"(check_age(",[34,161986,1495],{"class":63},[34,161988,31148],{"class":40},[34,161990,161991,161993,161995,161997,161999],{"class":36,"line":613},[34,161992,31066],{"class":63},[34,161994,161984],{"class":40},[34,161996,1327],{"class":87},[34,161998,1013],{"class":63},[34,162000,31148],{"class":40},[108,162002,162003,162004,162006],{},"函数执行到 ",[31,162005,17698],{}," 后，后面的代码不会继续执行。",[14,162008,162010],{"id":162009},"_57-none","5.7 None",[108,162012,162013,162015],{},[31,162014,96316],{}," 表示空值或没有结果。",[108,162017,162018],{},"常见使用场景：",[752,162020,162021,162024,162027],{},[755,162022,162023],{},"函数没有返回值。",[755,162025,162026],{},"变量暂时没有具体值。",[755,162028,162029],{},"表示查询不到结果。",[24,162031,162033],{"className":31029,"code":162032,"language":31031,"meta":29,"style":29},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[31,162034,162035,162043,162047,162060],{"__ignoreMap":29},[34,162036,162037,162039,162041],{"class":36,"line":37},[34,162038,161807],{"class":40},[34,162040,153],{"class":87},[34,162042,152673],{"class":63},[34,162044,162045],{"class":36,"line":51},[34,162046,3053],{"emptyLinePlaceholder":726},[34,162048,162049,162051,162054,162056,162058],{"class":36,"line":60},[34,162050,2191],{"class":87},[34,162052,162053],{"class":40}," result ",[34,162055,39578],{"class":87},[34,162057,39584],{"class":63},[34,162059,4392],{"class":40},[34,162061,162062,162064,162066,162069],{"class":36,"line":76},[34,162063,31950],{"class":63},[34,162065,801],{"class":40},[34,162067,162068],{"class":156},"\"没有数据\"",[34,162070,807],{"class":40},[108,162072,162073,162074,162076,162077,162080,162081,29036],{},"判断 ",[31,162075,96316],{}," 推荐使用 ",[31,162078,162079],{},"is None","，不要写成 ",[31,162082,162083],{},"== None",[14,162085,162087],{"id":162086},"_58-函数文档字符串","5.8 函数文档字符串",[108,162089,162090],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[24,162092,162094],{"className":31029,"code":162093,"language":31031,"meta":29,"style":29},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[31,162095,162096,162106,162111],{"__ignoreMap":29},[34,162097,162098,162100,162103],{"class":36,"line":37},[34,162099,32598],{"class":87},[34,162101,162102],{"class":149}," calculate_bmi",[34,162104,162105],{"class":40},"(weight, height):\n",[34,162107,162108],{"class":36,"line":51},[34,162109,162110],{"class":156},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[34,162112,162113,162115,162118,162120,162123,162125],{"class":36,"line":60},[34,162114,4743],{"class":87},[34,162116,162117],{"class":40}," weight ",[34,162119,1379],{"class":87},[34,162121,162122],{"class":40}," height ",[34,162124,11314],{"class":87},[34,162126,48374],{"class":63},[108,162128,162129],{},"查看说明：",[24,162131,162133],{"className":31029,"code":162132,"language":31031,"meta":29,"style":29},"help(calculate_bmi)\n",[31,162134,162135],{"__ignoreMap":29},[34,162136,162137,162140],{"class":36,"line":37},[34,162138,162139],{"class":63},"help",[34,162141,162142],{"class":40},"(calculate_bmi)\n",[108,162144,162145],{},"较完整的写法：",[24,162147,162149],{"className":31029,"code":162148,"language":31031,"meta":29,"style":29},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[31,162150,162151,162159,162164,162169,162173,162178,162183,162188,162192],{"__ignoreMap":29},[34,162152,162153,162155,162157],{"class":36,"line":37},[34,162154,32598],{"class":87},[34,162156,162102],{"class":149},[34,162158,162105],{"class":40},[34,162160,162161],{"class":36,"line":51},[34,162162,162163],{"class":156},"    \"\"\"\n",[34,162165,162166],{"class":36,"line":60},[34,162167,162168],{"class":156},"    计算BMI。\n",[34,162170,162171],{"class":36,"line":76},[34,162172,3053],{"emptyLinePlaceholder":726},[34,162174,162175],{"class":36,"line":93},[34,162176,162177],{"class":156},"    :param weight: 体重，单位kg\n",[34,162179,162180],{"class":36,"line":99},[34,162181,162182],{"class":156},"    :param height: 身高，单位m\n",[34,162184,162185],{"class":36,"line":353},[34,162186,162187],{"class":156},"    :return: BMI数值\n",[34,162189,162190],{"class":36,"line":359},[34,162191,162163],{"class":156},[34,162193,162194,162196,162198,162200,162202,162204],{"class":36,"line":579},[34,162195,4743],{"class":87},[34,162197,162117],{"class":40},[34,162199,1379],{"class":87},[34,162201,162122],{"class":40},[34,162203,11314],{"class":87},[34,162205,48374],{"class":63},[14,162207,162209],{"id":162208},"_59-变量作用域","5.9 变量作用域",[19,162211,162213],{"id":162212},"_591-局部变量","5.9.1 局部变量",[108,162215,162216],{},"在函数内部定义的变量，只能在函数内部使用。",[24,162218,162220],{"className":31029,"code":162219,"language":31031,"meta":29,"style":29},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[31,162221,162222,162231,162239,162245,162249,162253,162258],{"__ignoreMap":29},[34,162223,162224,162226,162229],{"class":36,"line":37},[34,162225,32598],{"class":87},[34,162227,162228],{"class":149}," test",[34,162230,32604],{"class":40},[34,162232,162233,162235,162237],{"class":36,"line":51},[34,162234,46244],{"class":40},[34,162236,153],{"class":87},[34,162238,59071],{"class":63},[34,162240,162241,162243],{"class":36,"line":60},[34,162242,31950],{"class":63},[34,162244,814],{"class":40},[34,162246,162247],{"class":36,"line":76},[34,162248,3053],{"emptyLinePlaceholder":726},[34,162250,162251],{"class":36,"line":93},[34,162252,3053],{"emptyLinePlaceholder":726},[34,162254,162255],{"class":36,"line":99},[34,162256,162257],{"class":40},"test()\n",[34,162259,162260,162262,162265],{"class":36,"line":353},[34,162261,31066],{"class":63},[34,162263,162264],{"class":40},"(num)  ",[34,162266,162267],{"class":205},"# 报错\n",[19,162269,162271],{"id":162270},"_592-全局变量","5.9.2 全局变量",[108,162273,162274],{},"在函数外部定义的变量，可以在函数内部读取。",[24,162276,162278],{"className":31029,"code":162277,"language":31031,"meta":29,"style":29},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[31,162279,162280,162288,162292,162296,162304,162310,162314,162318],{"__ignoreMap":29},[34,162281,162282,162284,162286],{"class":36,"line":37},[34,162283,147037],{"class":40},[34,162285,153],{"class":87},[34,162287,149854],{"class":156},[34,162289,162290],{"class":36,"line":51},[34,162291,3053],{"emptyLinePlaceholder":726},[34,162293,162294],{"class":36,"line":60},[34,162295,3053],{"emptyLinePlaceholder":726},[34,162297,162298,162300,162302],{"class":36,"line":76},[34,162299,32598],{"class":87},[34,162301,161497],{"class":149},[34,162303,32604],{"class":40},[34,162305,162306,162308],{"class":36,"line":93},[34,162307,31950],{"class":63},[34,162309,151161],{"class":40},[34,162311,162312],{"class":36,"line":99},[34,162313,3053],{"emptyLinePlaceholder":726},[34,162315,162316],{"class":36,"line":353},[34,162317,3053],{"emptyLinePlaceholder":726},[34,162319,162320],{"class":36,"line":359},[34,162321,161532],{"class":40},[108,162323,162324,162325,29036],{},"如果要在函数内部修改全局变量，需要 ",[31,162326,162327],{},"global",[24,162329,162331],{"className":31029,"code":162330,"language":31031,"meta":29,"style":29},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[31,162332,162333,162341,162345,162349,162358,162366,162374,162378,162382,162387],{"__ignoreMap":29},[34,162334,162335,162337,162339],{"class":36,"line":37},[34,162336,147192],{"class":40},[34,162338,153],{"class":87},[34,162340,47984],{"class":63},[34,162342,162343],{"class":36,"line":51},[34,162344,3053],{"emptyLinePlaceholder":726},[34,162346,162347],{"class":36,"line":60},[34,162348,3053],{"emptyLinePlaceholder":726},[34,162350,162351,162353,162356],{"class":36,"line":76},[34,162352,32598],{"class":87},[34,162354,162355],{"class":149}," add_count",[34,162357,32604],{"class":40},[34,162359,162360,162363],{"class":36,"line":93},[34,162361,162362],{"class":87},"    global",[34,162364,162365],{"class":40}," count\n",[34,162367,162368,162370,162372],{"class":36,"line":99},[34,162369,159934],{"class":40},[34,162371,10130],{"class":87},[34,162373,56342],{"class":63},[34,162375,162376],{"class":36,"line":353},[34,162377,3053],{"emptyLinePlaceholder":726},[34,162379,162380],{"class":36,"line":359},[34,162381,3053],{"emptyLinePlaceholder":726},[34,162383,162384],{"class":36,"line":579},[34,162385,162386],{"class":40},"add_count()\n",[34,162388,162389,162391],{"class":36,"line":589},[34,162390,31066],{"class":63},[34,162392,162393],{"class":40},"(count)\n",[108,162395,162396],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162398,162400],{"id":162399},"_510-函数嵌套调用","5.10 函数嵌套调用",[108,162402,162403],{},"一个函数中可以调用另一个函数。",[24,162405,162407],{"className":31029,"code":162406,"language":31031,"meta":29,"style":29},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[31,162408,162409,162418,162432,162436,162440,162449,162454,162474,162495,162499,162503,162507],{"__ignoreMap":29},[34,162410,162411,162413,162416],{"class":36,"line":37},[34,162412,32598],{"class":87},[34,162414,162415],{"class":149}," print_line",[34,162417,32604],{"class":40},[34,162419,162420,162422,162424,162426,162428,162430],{"class":36,"line":51},[34,162421,31950],{"class":63},[34,162423,801],{"class":40},[34,162425,33134],{"class":156},[34,162427,7171],{"class":87},[34,162429,79295],{"class":63},[34,162431,807],{"class":40},[34,162433,162434],{"class":36,"line":60},[34,162435,3053],{"emptyLinePlaceholder":726},[34,162437,162438],{"class":36,"line":76},[34,162439,3053],{"emptyLinePlaceholder":726},[34,162441,162442,162444,162447],{"class":36,"line":93},[34,162443,32598],{"class":87},[34,162445,162446],{"class":149}," print_info",[34,162448,149876],{"class":40},[34,162450,162451],{"class":36,"line":99},[34,162452,162453],{"class":40},"    print_line()\n",[34,162455,162456,162458,162460,162462,162464,162466,162468,162470,162472],{"class":36,"line":353},[34,162457,31950],{"class":63},[34,162459,801],{"class":40},[34,162461,851],{"class":87},[34,162463,157183],{"class":156},[34,162465,1690],{"class":63},[34,162467,80440],{"class":40},[34,162469,1739],{"class":63},[34,162471,1046],{"class":156},[34,162473,807],{"class":40},[34,162475,162476,162478,162480,162482,162485,162487,162489,162491,162493],{"class":36,"line":359},[34,162477,31950],{"class":63},[34,162479,801],{"class":40},[34,162481,851],{"class":87},[34,162483,162484],{"class":156},"\"年龄:",[34,162486,1690],{"class":63},[34,162488,70856],{"class":40},[34,162490,1739],{"class":63},[34,162492,1046],{"class":156},[34,162494,807],{"class":40},[34,162496,162497],{"class":36,"line":579},[34,162498,162453],{"class":40},[34,162500,162501],{"class":36,"line":589},[34,162502,3053],{"emptyLinePlaceholder":726},[34,162504,162505],{"class":36,"line":601},[34,162506,3053],{"emptyLinePlaceholder":726},[34,162508,162509,162512,162514,162516,162518],{"class":36,"line":613},[34,162510,162511],{"class":40},"print_info(",[34,162513,150389],{"class":156},[34,162515,13088],{"class":40},[34,162517,1445],{"class":63},[34,162519,807],{"class":40},[108,162521,162522],{},"这种方式可以把小功能组合成大功能。",[14,162524,162526],{"id":162525},"_511-参数检查","5.11 参数检查",[108,162528,162529],{},"函数内部可以检查参数是否合法。",[24,162531,162533],{"className":31029,"code":162532,"language":31031,"meta":29,"style":29},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[31,162534,162535,162544,162556,162562,162572,162576,162580,162597,162601,162613,162624,162630],{"__ignoreMap":29},[34,162536,162537,162539,162542],{"class":36,"line":37},[34,162538,32598],{"class":87},[34,162540,162541],{"class":149}," divide",[34,162543,151594],{"class":40},[34,162545,162546,162548,162550,162552,162554],{"class":36,"line":51},[34,162547,3754],{"class":87},[34,162549,11535],{"class":40},[34,162551,3602],{"class":87},[34,162553,4746],{"class":63},[34,162555,4392],{"class":40},[34,162557,162558,162560],{"class":36,"line":60},[34,162559,15405],{"class":87},[34,162561,152673],{"class":63},[34,162563,162564,162566,162568,162570],{"class":36,"line":76},[34,162565,4743],{"class":87},[34,162567,11522],{"class":40},[34,162569,1379],{"class":87},[34,162571,151605],{"class":40},[34,162573,162574],{"class":36,"line":93},[34,162575,3053],{"emptyLinePlaceholder":726},[34,162577,162578],{"class":36,"line":99},[34,162579,3053],{"emptyLinePlaceholder":726},[34,162581,162582,162584,162586,162589,162591,162593,162595],{"class":36,"line":353},[34,162583,161807],{"class":40},[34,162585,153],{"class":87},[34,162587,162588],{"class":40}," divide(",[34,162590,1241],{"class":63},[34,162592,13088],{"class":40},[34,162594,987],{"class":63},[34,162596,807],{"class":40},[34,162598,162599],{"class":36,"line":359},[34,162600,3053],{"emptyLinePlaceholder":726},[34,162602,162603,162605,162607,162609,162611],{"class":36,"line":579},[34,162604,2191],{"class":87},[34,162606,162053],{"class":40},[34,162608,39578],{"class":87},[34,162610,39584],{"class":63},[34,162612,4392],{"class":40},[34,162614,162615,162617,162619,162622],{"class":36,"line":589},[34,162616,31950],{"class":63},[34,162618,801],{"class":40},[34,162620,162621],{"class":156},"\"除数不能为0\"",[34,162623,807],{"class":40},[34,162625,162626,162628],{"class":36,"line":601},[34,162627,2355],{"class":87},[34,162629,4392],{"class":40},[34,162631,162632,162634],{"class":36,"line":613},[34,162633,31950],{"class":63},[34,162635,77216],{"class":40},[14,162637,162639],{"id":162638},"_512-类型提示","5.12 类型提示",[108,162641,162642],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[24,162644,162646],{"className":31029,"code":162645,"language":31031,"meta":29,"style":29},"def add(a: int, b: int) -> int:\n    return a + b\n",[31,162647,162648,162671],{"__ignoreMap":29},[34,162649,162650,162652,162654,162657,162659,162662,162664,162667,162669],{"class":36,"line":37},[34,162651,32598],{"class":87},[34,162653,5862],{"class":149},[34,162655,162656],{"class":40},"(a: ",[34,162658,804],{"class":63},[34,162660,162661],{"class":40},", b: ",[34,162663,804],{"class":63},[34,162665,162666],{"class":40},") -> ",[34,162668,804],{"class":63},[34,162670,4392],{"class":40},[34,162672,162673,162675,162677,162679],{"class":36,"line":51},[34,162674,4743],{"class":87},[34,162676,11522],{"class":40},[34,162678,1276],{"class":87},[34,162680,151605],{"class":40},[108,162682,162683],{},"字符串参数：",[24,162685,162687],{"className":31029,"code":162686,"language":31031,"meta":29,"style":29},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[31,162688,162689,162706],{"__ignoreMap":29},[34,162690,162691,162693,162695,162698,162700,162702,162704],{"class":36,"line":37},[34,162692,32598],{"class":87},[34,162694,161497],{"class":149},[34,162696,162697],{"class":40},"(name: ",[34,162699,1962],{"class":63},[34,162701,162666],{"class":40},[34,162703,96316],{"class":63},[34,162705,4392],{"class":40},[34,162707,162708,162710,162712,162714,162716,162718,162720,162722,162724],{"class":36,"line":51},[34,162709,31950],{"class":63},[34,162711,801],{"class":40},[34,162713,851],{"class":87},[34,162715,157555],{"class":156},[34,162717,1690],{"class":63},[34,162719,80440],{"class":40},[34,162721,1739],{"class":63},[34,162723,1046],{"class":156},[34,162725,807],{"class":40},[108,162727,162728],{},"列表参数：",[24,162730,162732],{"className":31029,"code":162731,"language":31031,"meta":29,"style":29},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[31,162733,162734,162753,162761,162773,162782],{"__ignoreMap":29},[34,162735,162736,162738,162741,162744,162746,162749,162751],{"class":36,"line":37},[34,162737,32598],{"class":87},[34,162739,162740],{"class":149}," get_total",[34,162742,162743],{"class":40},"(numbers: list[",[34,162745,804],{"class":63},[34,162747,162748],{"class":40},"]) -> ",[34,162750,804],{"class":63},[34,162752,4392],{"class":40},[34,162754,162755,162757,162759],{"class":36,"line":51},[34,162756,159808],{"class":40},[34,162758,153],{"class":87},[34,162760,47984],{"class":63},[34,162762,162763,162765,162768,162770],{"class":36,"line":60},[34,162764,3854],{"class":87},[34,162766,162767],{"class":40}," number ",[34,162769,26695],{"class":87},[34,162771,162772],{"class":40}," numbers:\n",[34,162774,162775,162777,162779],{"class":36,"line":76},[34,162776,160483],{"class":40},[34,162778,10130],{"class":87},[34,162780,162781],{"class":40}," number\n",[34,162783,162784,162786],{"class":36,"line":93},[34,162785,4743],{"class":87},[34,162787,162788],{"class":40}," total\n",[108,162790,162791],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162793,162795],{"id":162794},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[24,162797,162799],{"className":31029,"code":162798,"language":31031,"meta":29,"style":29},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[31,162800,162801,162811,162815,162819,162827,162838,162848,162858,162868,162878,162882,162886,162895,162917,162921,162925,162934,162940,162960,162972,162983,162987,162996,163007,163012,163016,163020,163029,163035,163054,163066,163076,163080,163091,163101,163105,163113,163124,163128,163132,163136,163144,163149,163163,163167,163179,163184,163196,163201,163213,163218,163230,163240,163244,163250],{"__ignoreMap":29},[34,162802,162803,162806,162808],{"class":36,"line":37},[34,162804,162805],{"class":40},"balance ",[34,162807,153],{"class":87},[34,162809,162810],{"class":63}," 1000\n",[34,162812,162813],{"class":36,"line":51},[34,162814,3053],{"emptyLinePlaceholder":726},[34,162816,162817],{"class":36,"line":60},[34,162818,3053],{"emptyLinePlaceholder":726},[34,162820,162821,162823,162825],{"class":36,"line":76},[34,162822,32598],{"class":87},[34,162824,152534],{"class":149},[34,162826,32604],{"class":40},[34,162828,162829,162831,162833,162836],{"class":36,"line":93},[34,162830,31950],{"class":63},[34,162832,801],{"class":40},[34,162834,162835],{"class":156},"\"====== ATM ======\"",[34,162837,807],{"class":40},[34,162839,162840,162842,162844,162846],{"class":36,"line":99},[34,162841,31950],{"class":63},[34,162843,801],{"class":40},[34,162845,161149],{"class":156},[34,162847,807],{"class":40},[34,162849,162850,162852,162854,162856],{"class":36,"line":353},[34,162851,31950],{"class":63},[34,162853,801],{"class":40},[34,162855,161160],{"class":156},[34,162857,807],{"class":40},[34,162859,162860,162862,162864,162866],{"class":36,"line":359},[34,162861,31950],{"class":63},[34,162863,801],{"class":40},[34,162865,161171],{"class":156},[34,162867,807],{"class":40},[34,162869,162870,162872,162874,162876],{"class":36,"line":579},[34,162871,31950],{"class":63},[34,162873,801],{"class":40},[34,162875,161182],{"class":156},[34,162877,807],{"class":40},[34,162879,162880],{"class":36,"line":589},[34,162881,3053],{"emptyLinePlaceholder":726},[34,162883,162884],{"class":36,"line":601},[34,162885,3053],{"emptyLinePlaceholder":726},[34,162887,162888,162890,162893],{"class":36,"line":613},[34,162889,32598],{"class":87},[34,162891,162892],{"class":149}," show_balance",[34,162894,32604],{"class":40},[34,162896,162897,162899,162901,162903,162906,162908,162911,162913,162915],{"class":36,"line":618},[34,162898,31950],{"class":63},[34,162900,801],{"class":40},[34,162902,851],{"class":87},[34,162904,162905],{"class":156},"\"当前余额:",[34,162907,1690],{"class":63},[34,162909,162910],{"class":40},"balance",[34,162912,1739],{"class":63},[34,162914,157513],{"class":156},[34,162916,807],{"class":40},[34,162918,162919],{"class":36,"line":628},[34,162920,3053],{"emptyLinePlaceholder":726},[34,162922,162923],{"class":36,"line":640},[34,162924,3053],{"emptyLinePlaceholder":726},[34,162926,162927,162929,162932],{"class":36,"line":2301},[34,162928,32598],{"class":87},[34,162930,162931],{"class":149}," save_money",[34,162933,32604],{"class":40},[34,162935,162936,162938],{"class":36,"line":2307},[34,162937,162362],{"class":87},[34,162939,150600],{"class":40},[34,162941,162942,162945,162947,162949,162951,162953,162955,162958],{"class":36,"line":2328},[34,162943,162944],{"class":40},"    money ",[34,162946,153],{"class":87},[34,162948,110427],{"class":63},[34,162950,801],{"class":40},[34,162952,669],{"class":63},[34,162954,801],{"class":40},[34,162956,162957],{"class":156},"\"请输入存款金额:\"",[34,162959,31148],{"class":40},[34,162961,162962,162964,162966,162968,162970],{"class":36,"line":2333},[34,162963,3754],{"class":87},[34,162965,150643],{"class":40},[34,162967,2247],{"class":87},[34,162969,4746],{"class":63},[34,162971,4392],{"class":40},[34,162973,162974,162976,162978,162981],{"class":36,"line":2347},[34,162975,33102],{"class":63},[34,162977,801],{"class":40},[34,162979,162980],{"class":156},"\"金额必须大于0\"",[34,162982,807],{"class":40},[34,162984,162985],{"class":36,"line":2352},[34,162986,152862],{"class":87},[34,162988,162989,162992,162994],{"class":36,"line":2381},[34,162990,162991],{"class":40},"    balance ",[34,162993,10130],{"class":87},[34,162995,150676],{"class":40},[34,162997,162998,163000,163002,163005],{"class":36,"line":2386},[34,162999,31950],{"class":63},[34,163001,801],{"class":40},[34,163003,163004],{"class":156},"\"存款成功\"",[34,163006,807],{"class":40},[34,163008,163009],{"class":36,"line":2403},[34,163010,163011],{"class":40},"    show_balance()\n",[34,163013,163014],{"class":36,"line":2408},[34,163015,3053],{"emptyLinePlaceholder":726},[34,163017,163018],{"class":36,"line":2413},[34,163019,3053],{"emptyLinePlaceholder":726},[34,163021,163022,163024,163027],{"class":36,"line":2418},[34,163023,32598],{"class":87},[34,163025,163026],{"class":149}," withdraw_money",[34,163028,32604],{"class":40},[34,163030,163031,163033],{"class":36,"line":2432},[34,163032,162362],{"class":87},[34,163034,150600],{"class":40},[34,163036,163037,163039,163041,163043,163045,163047,163049,163052],{"class":36,"line":2437},[34,163038,162944],{"class":40},[34,163040,153],{"class":87},[34,163042,110427],{"class":63},[34,163044,801],{"class":40},[34,163046,669],{"class":63},[34,163048,801],{"class":40},[34,163050,163051],{"class":156},"\"请输入取款金额:\"",[34,163053,31148],{"class":40},[34,163055,163056,163058,163060,163062,163064],{"class":36,"line":3230},[34,163057,3754],{"class":87},[34,163059,150643],{"class":40},[34,163061,2247],{"class":87},[34,163063,4746],{"class":63},[34,163065,4392],{"class":40},[34,163067,163068,163070,163072,163074],{"class":36,"line":3244},[34,163069,33102],{"class":63},[34,163071,801],{"class":40},[34,163073,162980],{"class":156},[34,163075,807],{"class":40},[34,163077,163078],{"class":36,"line":3252},[34,163079,152862],{"class":87},[34,163081,163082,163084,163086,163088],{"class":36,"line":3257},[34,163083,3754],{"class":87},[34,163085,150643],{"class":40},[34,163087,1753],{"class":87},[34,163089,163090],{"class":40}," balance:\n",[34,163092,163093,163095,163097,163099],{"class":36,"line":3263},[34,163094,33102],{"class":63},[34,163096,801],{"class":40},[34,163098,150738],{"class":156},[34,163100,807],{"class":40},[34,163102,163103],{"class":36,"line":3269},[34,163104,152862],{"class":87},[34,163106,163107,163109,163111],{"class":36,"line":3274},[34,163108,162991],{"class":40},[34,163110,150753],{"class":87},[34,163112,150676],{"class":40},[34,163114,163115,163117,163119,163122],{"class":36,"line":8601},[34,163116,31950],{"class":63},[34,163118,801],{"class":40},[34,163120,163121],{"class":156},"\"取款成功\"",[34,163123,807],{"class":40},[34,163125,163126],{"class":36,"line":8625},[34,163127,163011],{"class":40},[34,163129,163130],{"class":36,"line":8630},[34,163131,3053],{"emptyLinePlaceholder":726},[34,163133,163134],{"class":36,"line":8636},[34,163135,3053],{"emptyLinePlaceholder":726},[34,163137,163138,163140,163142],{"class":36,"line":8663},[34,163139,109293],{"class":87},[34,163141,95922],{"class":63},[34,163143,4392],{"class":40},[34,163145,163146],{"class":36,"line":8668},[34,163147,163148],{"class":40},"    show_menu()\n",[34,163150,163151,163153,163155,163157,163159,163161],{"class":36,"line":8674},[34,163152,161193],{"class":40},[34,163154,153],{"class":87},[34,163156,61248],{"class":63},[34,163158,801],{"class":40},[34,163160,153574],{"class":156},[34,163162,807],{"class":40},[34,163164,163165],{"class":36,"line":8686},[34,163166,3053],{"emptyLinePlaceholder":726},[34,163168,163169,163171,163173,163175,163177],{"class":36,"line":8698},[34,163170,3754],{"class":87},[34,163172,153587],{"class":40},[34,163174,3602],{"class":87},[34,163176,153592],{"class":156},[34,163178,4392],{"class":40},[34,163180,163181],{"class":36,"line":8710},[34,163182,163183],{"class":40},"        show_balance()\n",[34,163185,163186,163188,163190,163192,163194],{"class":36,"line":10369},[34,163187,39944],{"class":87},[34,163189,153587],{"class":40},[34,163191,3602],{"class":87},[34,163193,153611],{"class":156},[34,163195,4392],{"class":40},[34,163197,163198],{"class":36,"line":10394},[34,163199,163200],{"class":40},"        save_money()\n",[34,163202,163203,163205,163207,163209,163211],{"class":36,"line":10417},[34,163204,39944],{"class":87},[34,163206,153587],{"class":40},[34,163208,3602],{"class":87},[34,163210,153629],{"class":156},[34,163212,4392],{"class":40},[34,163214,163215],{"class":36,"line":10441},[34,163216,163217],{"class":40},"        withdraw_money()\n",[34,163219,163220,163222,163224,163226,163228],{"class":36,"line":10446},[34,163221,39944],{"class":87},[34,163223,153587],{"class":40},[34,163225,3602],{"class":87},[34,163227,153683],{"class":156},[34,163229,4392],{"class":40},[34,163231,163232,163234,163236,163238],{"class":36,"line":10451},[34,163233,33102],{"class":63},[34,163235,801],{"class":40},[34,163237,153694],{"class":156},[34,163239,807],{"class":40},[34,163241,163242],{"class":36,"line":10456},[34,163243,32278],{"class":87},[34,163245,163246,163248],{"class":36,"line":10465},[34,163247,158523],{"class":87},[34,163249,4392],{"class":40},[34,163251,163252,163254,163256,163258],{"class":36,"line":10470},[34,163253,33102],{"class":63},[34,163255,801],{"class":40},[34,163257,153715],{"class":156},[34,163259,807],{"class":40},[108,163261,163262],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163264,163266],{"id":163265},"_514-易错点","5.14 易错点",[752,163268,163269,163272,163275,163280,163285,163288],{},[755,163270,163271],{},"函数定义后必须调用才会执行。",[755,163273,163274],{},"函数名后面有括号才是调用。",[755,163276,163277,163279],{},[31,163278,17698],{}," 后面的代码不会执行。",[755,163281,163282,163283,29036],{},"没有返回值的函数默认返回 ",[31,163284,96316],{},[755,163286,163287],{},"局部变量不能在函数外部访问。",[755,163289,163290,163291,163293],{},"不要滥用 ",[31,163292,162327],{},"，更好的方式是让函数返回新值。",[108,163295,163296,163297,163299],{},"例如不用 ",[31,163298,162327],{}," 改写存款：",[24,163301,163303],{"className":31029,"code":163302,"language":31031,"meta":29,"style":29},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[31,163304,163305,163314,163325,163329,163333,163341,163354],{"__ignoreMap":29},[34,163306,163307,163309,163311],{"class":36,"line":37},[34,163308,32598],{"class":87},[34,163310,162931],{"class":149},[34,163312,163313],{"class":40},"(balance, money):\n",[34,163315,163316,163318,163321,163323],{"class":36,"line":51},[34,163317,4743],{"class":87},[34,163319,163320],{"class":40}," balance ",[34,163322,1276],{"class":87},[34,163324,150676],{"class":40},[34,163326,163327],{"class":36,"line":60},[34,163328,3053],{"emptyLinePlaceholder":726},[34,163330,163331],{"class":36,"line":76},[34,163332,3053],{"emptyLinePlaceholder":726},[34,163334,163335,163337,163339],{"class":36,"line":93},[34,163336,162805],{"class":40},[34,163338,153],{"class":87},[34,163340,162810],{"class":63},[34,163342,163343,163345,163347,163350,163352],{"class":36,"line":99},[34,163344,162805],{"class":40},[34,163346,153],{"class":87},[34,163348,163349],{"class":40}," save_money(balance, ",[34,163351,2376],{"class":63},[34,163353,807],{"class":40},[34,163355,163356,163358],{"class":36,"line":353},[34,163357,31066],{"class":63},[34,163359,163360],{"class":40},"(balance)\n",[14,163362,163364],{"id":163363},"_515-本章练习","5.15 本章练习",[752,163366,163367,163374,163380,163386,163392],{},[755,163368,163369,163370,163373],{},"定义函数 ",[31,163371,163372],{},"print_student(name, age)","，输出学生信息。",[755,163375,163369,163376,163379],{},[31,163377,163378],{},"get_max(a, b, c)","，返回三个数中的最大值。",[755,163381,163369,163382,163385],{},[31,163383,163384],{},"is_even(num)","，判断一个数是否为偶数。",[755,163387,163369,163388,163391],{},[31,163389,163390],{},"calculate_bmi(weight, height)","，返回 BMI。",[755,163393,163394],{},"把第 4 章的菜单程序拆分成多个函数。",[45,163396,163397],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":29,"searchDepth":51,"depth":51,"links":163399},[163400,163401,163402,163403,163404,163405,163406,163407,163408,163412,163413,163414,163415,163416,163417],{"id":161420,"depth":51,"text":161421},{"id":161461,"depth":51,"text":161462},{"id":161551,"depth":51,"text":161552},{"id":161632,"depth":51,"text":161633},{"id":161765,"depth":51,"text":161766},{"id":161887,"depth":51,"text":161888},{"id":162009,"depth":51,"text":162010},{"id":162086,"depth":51,"text":162087},{"id":162208,"depth":51,"text":162209,"children":163409},[163410,163411],{"id":162212,"depth":60,"text":162213},{"id":162270,"depth":60,"text":162271},{"id":162399,"depth":51,"text":162400},{"id":162525,"depth":51,"text":162526},{"id":162638,"depth":51,"text":162639},{"id":162794,"depth":51,"text":162795},{"id":163265,"depth":51,"text":163266},{"id":163363,"depth":51,"text":163364},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161412,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163424,"title":163425,"body":163426,"description":723,"extension":724,"meta":166470,"navigation":726,"path":166471,"seo":166472,"stem":166473,"__hash__":166474},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163427,"toc":166451},[163428,163431,163435,163438,163441,163545,163548,163552,163555,163635,163638,163642,163645,163705,163708,163744,163747,163762,163766,163839,163842,163897,163900,163970,163973,164057,164067,164125,164129,164174,164177,164203,164206,164312,164316,164319,164361,164364,164428,164431,164435,164438,164499,164502,164532,164535,164573,164577,164580,164589,164592,164716,164719,164760,164764,164767,164778,164818,164821,164836,164841,164844,164911,164914,165004,165008,165011,165059,165062,165089,165091,165121,165124,165144,165147,165178,165181,165214,165218,165221,165245,165248,165272,165275,165299,165303,165306,165436,165439,165519,165522,165597,165601,165604,165654,165657,165699,165702,165726,165728,165752,165755,165810,165813,165879,165883,165886,165889,165927,165930,165983,165986,166032,166035,166068,166071,166075,166394,166398,166427,166431,166448],[10,163429,163425],{"id":163430},"_6-数据容器",[14,163432,163434],{"id":163433},"_61-什么是数据容器","6.1 什么是数据容器",[108,163436,163437],{},"数据容器用于一次保存多个数据。",[108,163439,163440],{},"常见容器：",[934,163442,163443,163460],{},[937,163444,163445],{},[940,163446,163447,163449,163452,163455,163458],{},[943,163448,26423],{},[943,163450,163451],{},"是否有序",[943,163453,163454],{},"是否可变",[943,163456,163457],{},"是否允许重复",[943,163459,28143],{},[980,163461,163462,163480,163496,163511,163528],{},[940,163463,163464,163467,163470,163473,163476],{},[985,163465,163466],{},"list列表",[985,163468,163469],{},"有序",[985,163471,163472],{},"可变",[985,163474,163475],{},"允许",[985,163477,163478],{},[31,163479,155758],{},[940,163481,163482,163485,163487,163490,163492],{},[985,163483,163484],{},"tuple元组",[985,163486,163469],{},[985,163488,163489],{},"不可变",[985,163491,163475],{},[985,163493,163494],{},[31,163495,155771],{},[940,163497,163498,163501,163503,163505,163507],{},[985,163499,163500],{},"str字符串",[985,163502,163469],{},[985,163504,163489],{},[985,163506,163475],{},[985,163508,163509],{},[31,163510,156381],{},[940,163512,163513,163516,163519,163521,163524],{},[985,163514,163515],{},"set集合",[985,163517,163518],{},"无序",[985,163520,163472],{},[985,163522,163523],{},"不允许",[985,163525,163526],{},[31,163527,155796],{},[940,163529,163530,163533,163535,163537,163540],{},[985,163531,163532],{},"dict字典",[985,163534,163469],{},[985,163536,163472],{},[985,163538,163539],{},"key不允许重复",[985,163541,163542],{},[31,163543,163544],{},"{\"name\": \"小明\"}",[108,163546,163547],{},"Python 3.7 之后，字典保持插入顺序。",[14,163549,163551],{"id":163550},"_62-列表list","6.2 列表list",[108,163553,163554],{},"列表用于保存一组有顺序的数据。",[24,163556,163558],{"className":31029,"code":163557,"language":31031,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[31,163559,163560,163580,163605,163626],{"__ignoreMap":29},[34,163561,163562,163564,163566,163568,163570,163572,163574,163576,163578],{"class":36,"line":37},[34,163563,160881],{"class":40},[34,163565,153],{"class":87},[34,163567,52872],{"class":40},[34,163569,150389],{"class":156},[34,163571,13088],{"class":40},[34,163573,151437],{"class":156},[34,163575,13088],{"class":40},[34,163577,160232],{"class":156},[34,163579,33897],{"class":40},[34,163581,163582,163585,163587,163589,163591,163593,163595,163597,163599,163601,163603],{"class":36,"line":51},[34,163583,163584],{"class":40},"numbers ",[34,163586,153],{"class":87},[34,163588,52872],{"class":40},[34,163590,1013],{"class":63},[34,163592,13088],{"class":40},[34,163594,875],{"class":63},[34,163596,13088],{"class":40},[34,163598,869],{"class":63},[34,163600,13088],{"class":40},[34,163602,1088],{"class":63},[34,163604,33897],{"class":40},[34,163606,163607,163610,163612,163614,163616,163618,163620,163622,163624],{"class":36,"line":60},[34,163608,163609],{"class":40},"mixed ",[34,163611,153],{"class":87},[34,163613,52872],{"class":40},[34,163615,150389],{"class":156},[34,163617,13088],{"class":40},[34,163619,1445],{"class":63},[34,163621,13088],{"class":40},[34,163623,32127],{"class":63},[34,163625,33897],{"class":40},[34,163627,163628,163631,163633],{"class":36,"line":76},[34,163629,163630],{"class":40},"empty ",[34,163632,153],{"class":87},[34,163634,52484],{"class":40},[108,163636,163637],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163639,163641],{"id":163640},"_63-列表索引","6.3 列表索引",[108,163643,163644],{},"正向索引从 0 开始：",[24,163646,163648],{"className":31029,"code":163647,"language":31031,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[31,163649,163650,163670,163674,163685,163695],{"__ignoreMap":29},[34,163651,163652,163654,163656,163658,163660,163662,163664,163666,163668],{"class":36,"line":37},[34,163653,160881],{"class":40},[34,163655,153],{"class":87},[34,163657,52872],{"class":40},[34,163659,150389],{"class":156},[34,163661,13088],{"class":40},[34,163663,151437],{"class":156},[34,163665,13088],{"class":40},[34,163667,160232],{"class":156},[34,163669,33897],{"class":40},[34,163671,163672],{"class":36,"line":51},[34,163673,3053],{"emptyLinePlaceholder":726},[34,163675,163676,163678,163681,163683],{"class":36,"line":60},[34,163677,31066],{"class":63},[34,163679,163680],{"class":40},"(names[",[34,163682,987],{"class":63},[34,163684,5310],{"class":40},[34,163686,163687,163689,163691,163693],{"class":36,"line":76},[34,163688,31066],{"class":63},[34,163690,163680],{"class":40},[34,163692,1013],{"class":63},[34,163694,5310],{"class":40},[34,163696,163697,163699,163701,163703],{"class":36,"line":93},[34,163698,31066],{"class":63},[34,163700,163680],{"class":40},[34,163702,875],{"class":63},[34,163704,5310],{"class":40},[108,163706,163707],{},"反向索引从 -1 开始：",[24,163709,163711],{"className":31029,"code":163710,"language":31031,"meta":29,"style":29},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[31,163712,163713,163729],{"__ignoreMap":29},[34,163714,163715,163717,163719,163721,163723,163726],{"class":36,"line":37},[34,163716,31066],{"class":63},[34,163718,163680],{"class":40},[34,163720,1327],{"class":87},[34,163722,1013],{"class":63},[34,163724,163725],{"class":40},"])  ",[34,163727,163728],{"class":205},"# 小刚\n",[34,163730,163731,163733,163735,163737,163739,163741],{"class":36,"line":51},[34,163732,31066],{"class":63},[34,163734,163680],{"class":40},[34,163736,1327],{"class":87},[34,163738,875],{"class":63},[34,163740,163725],{"class":40},[34,163742,163743],{"class":205},"# 小红\n",[108,163745,163746],{},"索引越界会报错：",[24,163748,163750],{"className":31029,"code":163749,"language":31031,"meta":29,"style":29},"print(names[3])\n",[31,163751,163752],{"__ignoreMap":29},[34,163753,163754,163756,163758,163760],{"class":36,"line":37},[34,163755,31066],{"class":63},[34,163757,163680],{"class":40},[34,163759,869],{"class":63},[34,163761,5310],{"class":40},[14,163763,163765],{"id":163764},"_64-列表常用方法","6.4 列表常用方法",[24,163767,163769],{"className":31029,"code":163768,"language":31031,"meta":29,"style":29},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[31,163770,163771,163787,163791,163800,163814,163828,163832],{"__ignoreMap":29},[34,163772,163773,163775,163777,163779,163781,163783,163785],{"class":36,"line":37},[34,163774,160881],{"class":40},[34,163776,153],{"class":87},[34,163778,52872],{"class":40},[34,163780,150389],{"class":156},[34,163782,13088],{"class":40},[34,163784,151437],{"class":156},[34,163786,33897],{"class":40},[34,163788,163789],{"class":36,"line":51},[34,163790,3053],{"emptyLinePlaceholder":726},[34,163792,163793,163796,163798],{"class":36,"line":60},[34,163794,163795],{"class":40},"names.append(",[34,163797,160232],{"class":156},[34,163799,807],{"class":40},[34,163801,163802,163805,163807,163809,163812],{"class":36,"line":76},[34,163803,163804],{"class":40},"names.insert(",[34,163806,1013],{"class":63},[34,163808,13088],{"class":40},[34,163810,163811],{"class":156},"\"小李\"",[34,163813,807],{"class":40},[34,163815,163816,163819,163821,163823,163826],{"class":36,"line":93},[34,163817,163818],{"class":40},"names.extend([",[34,163820,9336],{"class":156},[34,163822,13088],{"class":40},[34,163824,163825],{"class":156},"\"小赵\"",[34,163827,5310],{"class":40},[34,163829,163830],{"class":36,"line":99},[34,163831,3053],{"emptyLinePlaceholder":726},[34,163833,163834,163836],{"class":36,"line":353},[34,163835,31066],{"class":63},[34,163837,163838],{"class":40},"(names)\n",[108,163840,163841],{},"删除元素：",[24,163843,163845],{"className":31029,"code":163844,"language":31031,"meta":29,"style":29},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[31,163846,163847,163856,163866,163880,163892],{"__ignoreMap":29},[34,163848,163849,163852,163854],{"class":36,"line":37},[34,163850,163851],{"class":40},"names.remove(",[34,163853,151437],{"class":156},[34,163855,807],{"class":40},[34,163857,163858,163861,163863],{"class":36,"line":51},[34,163859,163860],{"class":40},"last ",[34,163862,153],{"class":87},[34,163864,163865],{"class":40}," names.pop()\n",[34,163867,163868,163871,163873,163876,163878],{"class":36,"line":60},[34,163869,163870],{"class":40},"first ",[34,163872,153],{"class":87},[34,163874,163875],{"class":40}," names.pop(",[34,163877,987],{"class":63},[34,163879,807],{"class":40},[34,163881,163882,163885,163888,163890],{"class":36,"line":76},[34,163883,163884],{"class":87},"del",[34,163886,163887],{"class":40}," names[",[34,163889,987],{"class":63},[34,163891,33897],{"class":40},[34,163893,163894],{"class":36,"line":93},[34,163895,163896],{"class":40},"names.clear()\n",[108,163898,163899],{},"查询和统计：",[24,163901,163903],{"className":31029,"code":163902,"language":31031,"meta":29,"style":29},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[31,163904,163905,163933,163937,163948,163959],{"__ignoreMap":29},[34,163906,163907,163909,163911,163913,163915,163917,163919,163921,163923,163925,163927,163929,163931],{"class":36,"line":37},[34,163908,163584],{"class":40},[34,163910,153],{"class":87},[34,163912,52872],{"class":40},[34,163914,1013],{"class":63},[34,163916,13088],{"class":40},[34,163918,875],{"class":63},[34,163920,13088],{"class":40},[34,163922,869],{"class":63},[34,163924,13088],{"class":40},[34,163926,875],{"class":63},[34,163928,13088],{"class":40},[34,163930,1088],{"class":63},[34,163932,33897],{"class":40},[34,163934,163935],{"class":36,"line":51},[34,163936,3053],{"emptyLinePlaceholder":726},[34,163938,163939,163941,163944,163946],{"class":36,"line":60},[34,163940,31066],{"class":63},[34,163942,163943],{"class":40},"(numbers.index(",[34,163945,869],{"class":63},[34,163947,31148],{"class":40},[34,163949,163950,163952,163955,163957],{"class":36,"line":76},[34,163951,31066],{"class":63},[34,163953,163954],{"class":40},"(numbers.count(",[34,163956,875],{"class":63},[34,163958,31148],{"class":40},[34,163960,163961,163963,163965,163967],{"class":36,"line":93},[34,163962,31066],{"class":63},[34,163964,801],{"class":40},[34,163966,8011],{"class":63},[34,163968,163969],{"class":40},"(numbers))\n",[108,163971,163972],{},"排序：",[24,163974,163976],{"className":31029,"code":163975,"language":31031,"meta":29,"style":29},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[31,163977,163978,164002,164006,164011,164018,164022,164036,164042,164046,164051],{"__ignoreMap":29},[34,163979,163980,163982,163984,163986,163988,163990,163992,163994,163996,163998,164000],{"class":36,"line":37},[34,163981,163584],{"class":40},[34,163983,153],{"class":87},[34,163985,52872],{"class":40},[34,163987,869],{"class":63},[34,163989,13088],{"class":40},[34,163991,1013],{"class":63},[34,163993,13088],{"class":40},[34,163995,1114],{"class":63},[34,163997,13088],{"class":40},[34,163999,875],{"class":63},[34,164001,33897],{"class":40},[34,164003,164004],{"class":36,"line":51},[34,164005,3053],{"emptyLinePlaceholder":726},[34,164007,164008],{"class":36,"line":60},[34,164009,164010],{"class":40},"numbers.sort()\n",[34,164012,164013,164015],{"class":36,"line":76},[34,164014,31066],{"class":63},[34,164016,164017],{"class":40},"(numbers)\n",[34,164019,164020],{"class":36,"line":93},[34,164021,3053],{"emptyLinePlaceholder":726},[34,164023,164024,164027,164030,164032,164034],{"class":36,"line":99},[34,164025,164026],{"class":40},"numbers.sort(",[34,164028,164029],{"class":5869},"reverse",[34,164031,153],{"class":87},[34,164033,32127],{"class":63},[34,164035,807],{"class":40},[34,164037,164038,164040],{"class":36,"line":353},[34,164039,31066],{"class":63},[34,164041,164017],{"class":40},[34,164043,164044],{"class":36,"line":359},[34,164045,3053],{"emptyLinePlaceholder":726},[34,164047,164048],{"class":36,"line":579},[34,164049,164050],{"class":40},"numbers.reverse()\n",[34,164052,164053,164055],{"class":36,"line":589},[34,164054,31066],{"class":63},[34,164056,164017],{"class":40},[108,164058,164059,164062,164063,164066],{},[31,164060,164061],{},"sort()"," 会修改原列表，",[31,164064,164065],{},"sorted()"," 返回新列表。",[24,164068,164070],{"className":31029,"code":164069,"language":31031,"meta":29,"style":29},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[31,164071,164072,164096,164108,164112,164118],{"__ignoreMap":29},[34,164073,164074,164076,164078,164080,164082,164084,164086,164088,164090,164092,164094],{"class":36,"line":37},[34,164075,163584],{"class":40},[34,164077,153],{"class":87},[34,164079,52872],{"class":40},[34,164081,869],{"class":63},[34,164083,13088],{"class":40},[34,164085,1013],{"class":63},[34,164087,13088],{"class":40},[34,164089,1114],{"class":63},[34,164091,13088],{"class":40},[34,164093,875],{"class":63},[34,164095,33897],{"class":40},[34,164097,164098,164101,164103,164106],{"class":36,"line":51},[34,164099,164100],{"class":40},"new_numbers ",[34,164102,153],{"class":87},[34,164104,164105],{"class":63}," sorted",[34,164107,164017],{"class":40},[34,164109,164110],{"class":36,"line":60},[34,164111,3053],{"emptyLinePlaceholder":726},[34,164113,164114,164116],{"class":36,"line":76},[34,164115,31066],{"class":63},[34,164117,164017],{"class":40},[34,164119,164120,164122],{"class":36,"line":93},[34,164121,31066],{"class":63},[34,164123,164124],{"class":40},"(new_numbers)\n",[14,164126,164128],{"id":164127},"_65-列表遍历","6.5 列表遍历",[24,164130,164132],{"className":31029,"code":164131,"language":31031,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[31,164133,164134,164154,164158,164168],{"__ignoreMap":29},[34,164135,164136,164138,164140,164142,164144,164146,164148,164150,164152],{"class":36,"line":37},[34,164137,160881],{"class":40},[34,164139,153],{"class":87},[34,164141,52872],{"class":40},[34,164143,150389],{"class":156},[34,164145,13088],{"class":40},[34,164147,151437],{"class":156},[34,164149,13088],{"class":40},[34,164151,160232],{"class":156},[34,164153,33897],{"class":40},[34,164155,164156],{"class":36,"line":51},[34,164157,3053],{"emptyLinePlaceholder":726},[34,164159,164160,164162,164164,164166],{"class":36,"line":60},[34,164161,3678],{"class":87},[34,164163,160917],{"class":40},[34,164165,26695],{"class":87},[34,164167,160922],{"class":40},[34,164169,164170,164172],{"class":36,"line":76},[34,164171,31950],{"class":63},[34,164173,151161],{"class":40},[108,164175,164176],{},"需要索引时：",[24,164178,164180],{"className":31029,"code":164179,"language":31031,"meta":29,"style":29},"for index, name in enumerate(names):\n    print(index, name)\n",[31,164181,164182,164196],{"__ignoreMap":29},[34,164183,164184,164186,164189,164191,164193],{"class":36,"line":37},[34,164185,3678],{"class":87},[34,164187,164188],{"class":40}," index, name ",[34,164190,26695],{"class":87},[34,164192,32257],{"class":63},[34,164194,164195],{"class":40},"(names):\n",[34,164197,164198,164200],{"class":36,"line":51},[34,164199,31950],{"class":63},[34,164201,164202],{"class":40},"(index, name)\n",[108,164204,164205],{},"统计总分：",[24,164207,164209],{"className":31029,"code":164208,"language":31031,"meta":29,"style":29},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[31,164210,164211,164236,164244,164248,164259,164267,164271,164288],{"__ignoreMap":29},[34,164212,164213,164216,164218,164220,164222,164224,164226,164228,164230,164232,164234],{"class":36,"line":37},[34,164214,164215],{"class":40},"scores ",[34,164217,153],{"class":87},[34,164219,52872],{"class":40},[34,164221,1656],{"class":63},[34,164223,13088],{"class":40},[34,164225,1531],{"class":63},[34,164227,13088],{"class":40},[34,164229,1049],{"class":63},[34,164231,13088],{"class":40},[34,164233,1356],{"class":63},[34,164235,33897],{"class":40},[34,164237,164238,164240,164242],{"class":36,"line":51},[34,164239,157761],{"class":40},[34,164241,153],{"class":87},[34,164243,47984],{"class":63},[34,164245,164246],{"class":36,"line":60},[34,164247,3053],{"emptyLinePlaceholder":726},[34,164249,164250,164252,164254,164256],{"class":36,"line":76},[34,164251,3678],{"class":87},[34,164253,158284],{"class":40},[34,164255,26695],{"class":87},[34,164257,164258],{"class":40}," scores:\n",[34,164260,164261,164263,164265],{"class":36,"line":93},[34,164262,159808],{"class":40},[34,164264,10130],{"class":87},[34,164266,2238],{"class":40},[34,164268,164269],{"class":36,"line":99},[34,164270,3053],{"emptyLinePlaceholder":726},[34,164272,164273,164276,164278,164281,164283,164285],{"class":36,"line":353},[34,164274,164275],{"class":40},"avg ",[34,164277,153],{"class":87},[34,164279,164280],{"class":40}," total ",[34,164282,1379],{"class":87},[34,164284,7984],{"class":63},[34,164286,164287],{"class":40},"(scores)\n",[34,164289,164290,164292,164294,164296,164299,164301,164304,164306,164308,164310],{"class":36,"line":359},[34,164291,31066],{"class":63},[34,164293,801],{"class":40},[34,164295,851],{"class":87},[34,164297,164298],{"class":156},"\"平均分:",[34,164300,1690],{"class":63},[34,164302,164303],{"class":40},"avg",[34,164305,157660],{"class":87},[34,164307,1739],{"class":63},[34,164309,1046],{"class":156},[34,164311,807],{"class":40},[14,164313,164315],{"id":164314},"_66-元组tuple","6.6 元组tuple",[108,164317,164318],{},"元组和列表类似，但不可修改。",[24,164320,164322],{"className":31029,"code":164321,"language":31031,"meta":29,"style":29},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[31,164323,164324,164341],{"__ignoreMap":29},[34,164325,164326,164329,164331,164333,164335,164337,164339],{"class":36,"line":37},[34,164327,164328],{"class":40},"point ",[34,164330,153],{"class":87},[34,164332,2312],{"class":40},[34,164334,1241],{"class":63},[34,164336,13088],{"class":40},[34,164338,1495],{"class":63},[34,164340,807],{"class":40},[34,164342,164343,164345,164347,164349,164351,164353,164355,164357,164359],{"class":36,"line":51},[34,164344,116944],{"class":40},[34,164346,153],{"class":87},[34,164348,2312],{"class":40},[34,164350,150389],{"class":156},[34,164352,13088],{"class":40},[34,164354,1445],{"class":63},[34,164356,13088],{"class":40},[34,164358,69904],{"class":156},[34,164360,807],{"class":40},[108,164362,164363],{},"单元素元组必须加逗号：",[24,164365,164367],{"className":31029,"code":164366,"language":31031,"meta":29,"style":29},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[31,164368,164369,164383,164396,164400,164414],{"__ignoreMap":29},[34,164370,164371,164374,164376,164378,164380],{"class":36,"line":37},[34,164372,164373],{"class":40},"t1 ",[34,164375,153],{"class":87},[34,164377,2312],{"class":40},[34,164379,1241],{"class":63},[34,164381,164382],{"class":40},",)\n",[34,164384,164385,164388,164390,164392,164394],{"class":36,"line":51},[34,164386,164387],{"class":40},"t2 ",[34,164389,153],{"class":87},[34,164391,2312],{"class":40},[34,164393,1241],{"class":63},[34,164395,807],{"class":40},[34,164397,164398],{"class":36,"line":60},[34,164399,3053],{"emptyLinePlaceholder":726},[34,164401,164402,164404,164406,164408,164411],{"class":36,"line":76},[34,164403,31066],{"class":63},[34,164405,801],{"class":40},[34,164407,103737],{"class":63},[34,164409,164410],{"class":40},"(t1))  ",[34,164412,164413],{"class":205},"# tuple\n",[34,164415,164416,164418,164420,164422,164425],{"class":36,"line":93},[34,164417,31066],{"class":63},[34,164419,801],{"class":40},[34,164421,103737],{"class":63},[34,164423,164424],{"class":40},"(t2))  ",[34,164426,164427],{"class":205},"# int\n",[108,164429,164430],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164432,164434],{"id":164433},"_67-字符串str","6.7 字符串str",[108,164436,164437],{},"字符串也是序列，可以索引、切片和遍历。",[24,164439,164441],{"className":31029,"code":164440,"language":31031,"meta":29,"style":29},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[31,164442,164443,164451,164455,164466,164478,164482,164493],{"__ignoreMap":29},[34,164444,164445,164447,164449],{"class":36,"line":37},[34,164446,156945],{"class":40},[34,164448,153],{"class":87},[34,164450,160182],{"class":156},[34,164452,164453],{"class":36,"line":51},[34,164454,3053],{"emptyLinePlaceholder":726},[34,164456,164457,164459,164462,164464],{"class":36,"line":60},[34,164458,31066],{"class":63},[34,164460,164461],{"class":40},"(text[",[34,164463,987],{"class":63},[34,164465,5310],{"class":40},[34,164467,164468,164470,164472,164474,164476],{"class":36,"line":76},[34,164469,31066],{"class":63},[34,164471,164461],{"class":40},[34,164473,1327],{"class":87},[34,164475,1013],{"class":63},[34,164477,5310],{"class":40},[34,164479,164480],{"class":36,"line":93},[34,164481,3053],{"emptyLinePlaceholder":726},[34,164483,164484,164486,164488,164490],{"class":36,"line":99},[34,164485,3678],{"class":87},[34,164487,160193],{"class":40},[34,164489,26695],{"class":87},[34,164491,164492],{"class":40}," text:\n",[34,164494,164495,164497],{"class":36,"line":353},[34,164496,31950],{"class":63},[34,164498,160204],{"class":40},[108,164500,164501],{},"字符串不可变：",[24,164503,164505],{"className":31029,"code":164504,"language":31031,"meta":29,"style":29},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[31,164506,164507,164515],{"__ignoreMap":29},[34,164508,164509,164511,164513],{"class":36,"line":37},[34,164510,156945],{"class":40},[34,164512,153],{"class":87},[34,164514,160182],{"class":156},[34,164516,164517,164520,164522,164524,164526,164529],{"class":36,"line":51},[34,164518,164519],{"class":40},"text[",[34,164521,987],{"class":63},[34,164523,5096],{"class":40},[34,164525,153],{"class":87},[34,164527,164528],{"class":156}," \"P\"",[34,164530,164531],{"class":205},"  # 报错\n",[108,164533,164534],{},"如果要得到新字符串：",[24,164536,164538],{"className":31029,"code":164537,"language":31031,"meta":29,"style":29},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[31,164539,164540,164548,164566],{"__ignoreMap":29},[34,164541,164542,164544,164546],{"class":36,"line":37},[34,164543,156945],{"class":40},[34,164545,153],{"class":87},[34,164547,160182],{"class":156},[34,164549,164550,164552,164554,164556,164558,164561,164563],{"class":36,"line":51},[34,164551,156945],{"class":40},[34,164553,153],{"class":87},[34,164555,164528],{"class":156},[34,164557,46217],{"class":87},[34,164559,164560],{"class":40}," text[",[34,164562,1013],{"class":63},[34,164564,164565],{"class":40},":]\n",[34,164567,164568,164570],{"class":36,"line":60},[34,164569,31066],{"class":63},[34,164571,164572],{"class":40},"(text)\n",[14,164574,164576],{"id":164575},"_68-切片","6.8 切片",[108,164578,164579],{},"切片用于从序列中取一部分。",[24,164581,164583],{"className":31029,"code":164582,"language":31031,"meta":29,"style":29},"序列[开始:结束:步长]\n",[31,164584,164585],{"__ignoreMap":29},[34,164586,164587],{"class":36,"line":37},[34,164588,164582],{"class":40},[108,164590,164591],{},"结束位置不包含。",[24,164593,164595],{"className":31029,"code":164594,"language":31031,"meta":29,"style":29},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[31,164596,164597,164634,164638,164657,164672,164686,164700],{"__ignoreMap":29},[34,164598,164599,164602,164604,164606,164608,164610,164612,164614,164616,164618,164620,164622,164624,164626,164628,164630,164632],{"class":36,"line":37},[34,164600,164601],{"class":40},"nums ",[34,164603,153],{"class":87},[34,164605,52872],{"class":40},[34,164607,987],{"class":63},[34,164609,13088],{"class":40},[34,164611,1013],{"class":63},[34,164613,13088],{"class":40},[34,164615,875],{"class":63},[34,164617,13088],{"class":40},[34,164619,869],{"class":63},[34,164621,13088],{"class":40},[34,164623,1088],{"class":63},[34,164625,13088],{"class":40},[34,164627,1114],{"class":63},[34,164629,13088],{"class":40},[34,164631,1139],{"class":63},[34,164633,33897],{"class":40},[34,164635,164636],{"class":36,"line":51},[34,164637,3053],{"emptyLinePlaceholder":726},[34,164639,164640,164642,164645,164647,164649,164651,164654],{"class":36,"line":60},[34,164641,31066],{"class":63},[34,164643,164644],{"class":40},"(nums[",[34,164646,1013],{"class":63},[34,164648,1653],{"class":40},[34,164650,1088],{"class":63},[34,164652,164653],{"class":40},"])    ",[34,164655,164656],{"class":205},"# [1, 2, 3]\n",[34,164658,164659,164661,164664,164666,164669],{"class":36,"line":76},[34,164660,31066],{"class":63},[34,164662,164663],{"class":40},"(nums[:",[34,164665,869],{"class":63},[34,164667,164668],{"class":40},"])     ",[34,164670,164671],{"class":205},"# [0, 1, 2]\n",[34,164673,164674,164676,164678,164680,164683],{"class":36,"line":93},[34,164675,31066],{"class":63},[34,164677,164644],{"class":40},[34,164679,869],{"class":63},[34,164681,164682],{"class":40},":])     ",[34,164684,164685],{"class":205},"# [3, 4, 5, 6]\n",[34,164687,164688,164690,164693,164695,164697],{"class":36,"line":99},[34,164689,31066],{"class":63},[34,164691,164692],{"class":40},"(nums[::",[34,164694,875],{"class":63},[34,164696,164653],{"class":40},[34,164698,164699],{"class":205},"# [0, 2, 4, 6]\n",[34,164701,164702,164704,164706,164708,164710,164713],{"class":36,"line":353},[34,164703,31066],{"class":63},[34,164705,164692],{"class":40},[34,164707,1327],{"class":87},[34,164709,1013],{"class":63},[34,164711,164712],{"class":40},"])   ",[34,164714,164715],{"class":205},"# 反转\n",[108,164717,164718],{},"字符串切片：",[24,164720,164722],{"className":31029,"code":164721,"language":31031,"meta":29,"style":29},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[31,164723,164724,164733,164747],{"__ignoreMap":29},[34,164725,164726,164728,164730],{"class":36,"line":37},[34,164727,156945],{"class":40},[34,164729,153],{"class":87},[34,164731,164732],{"class":156}," \"abcdef\"\n",[34,164734,164735,164737,164739,164741,164743,164745],{"class":36,"line":51},[34,164736,31066],{"class":63},[34,164738,164461],{"class":40},[34,164740,1013],{"class":63},[34,164742,1653],{"class":40},[34,164744,1088],{"class":63},[34,164746,5310],{"class":40},[34,164748,164749,164751,164754,164756,164758],{"class":36,"line":60},[34,164750,31066],{"class":63},[34,164752,164753],{"class":40},"(text[::",[34,164755,1327],{"class":87},[34,164757,1013],{"class":63},[34,164759,5310],{"class":40},[14,164761,164763],{"id":164762},"_69-集合set","6.9 集合set",[108,164765,164766],{},"集合特点：",[752,164768,164769,164772,164775],{},[755,164770,164771],{},"无序。",[755,164773,164774],{},"元素不重复。",[755,164776,164777],{},"可以做交集、并集、差集。",[24,164779,164781],{"className":31029,"code":164780,"language":31031,"meta":29,"style":29},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[31,164782,164783,164811],{"__ignoreMap":29},[34,164784,164785,164787,164789,164791,164793,164795,164797,164799,164801,164803,164805,164807,164809],{"class":36,"line":37},[34,164786,164601],{"class":40},[34,164788,153],{"class":87},[34,164790,5101],{"class":40},[34,164792,1013],{"class":63},[34,164794,13088],{"class":40},[34,164796,875],{"class":63},[34,164798,13088],{"class":40},[34,164800,869],{"class":63},[34,164802,13088],{"class":40},[34,164804,869],{"class":63},[34,164806,13088],{"class":40},[34,164808,1088],{"class":63},[34,164810,241],{"class":40},[34,164812,164813,164815],{"class":36,"line":51},[34,164814,31066],{"class":63},[34,164816,164817],{"class":40},"(nums)\n",[108,164819,164820],{},"创建空集合：",[24,164822,164824],{"className":31029,"code":164823,"language":31031,"meta":29,"style":29},"s = set()\n",[31,164825,164826],{"__ignoreMap":29},[34,164827,164828,164830,164832,164834],{"class":36,"line":37},[34,164829,11232],{"class":40},[34,164831,153],{"class":87},[34,164833,120352],{"class":63},[34,164835,2629],{"class":40},[108,164837,9678,164838,164840],{},[31,164839,33110],{}," 是空字典，不是空集合。",[108,164842,164843],{},"集合常用操作：",[24,164845,164847],{"className":31029,"code":164846,"language":31031,"meta":29,"style":29},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[31,164848,164849,164869,164873,164882,164891,164900],{"__ignoreMap":29},[34,164850,164851,164853,164855,164857,164859,164861,164863,164865,164867],{"class":36,"line":37},[34,164852,11232],{"class":40},[34,164854,153],{"class":87},[34,164856,5101],{"class":40},[34,164858,1013],{"class":63},[34,164860,13088],{"class":40},[34,164862,875],{"class":63},[34,164864,13088],{"class":40},[34,164866,869],{"class":63},[34,164868,241],{"class":40},[34,164870,164871],{"class":36,"line":51},[34,164872,3053],{"emptyLinePlaceholder":726},[34,164874,164875,164878,164880],{"class":36,"line":60},[34,164876,164877],{"class":40},"s.add(",[34,164879,1088],{"class":63},[34,164881,807],{"class":40},[34,164883,164884,164887,164889],{"class":36,"line":76},[34,164885,164886],{"class":40},"s.remove(",[34,164888,875],{"class":63},[34,164890,807],{"class":40},[34,164892,164893,164896,164898],{"class":36,"line":93},[34,164894,164895],{"class":40},"s.discard(",[34,164897,1241],{"class":63},[34,164899,807],{"class":40},[34,164901,164902,164904,164906,164908],{"class":36,"line":99},[34,164903,31066],{"class":63},[34,164905,801],{"class":40},[34,164907,8011],{"class":63},[34,164909,164910],{"class":40},"(s))\n",[108,164912,164913],{},"交并差：",[24,164915,164917],{"className":31029,"code":164916,"language":31031,"meta":29,"style":29},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[31,164918,164919,164939,164959,164963,164978,164991],{"__ignoreMap":29},[34,164920,164921,164923,164925,164927,164929,164931,164933,164935,164937],{"class":36,"line":37},[34,164922,11572],{"class":40},[34,164924,153],{"class":87},[34,164926,5101],{"class":40},[34,164928,1013],{"class":63},[34,164930,13088],{"class":40},[34,164932,875],{"class":63},[34,164934,13088],{"class":40},[34,164936,869],{"class":63},[34,164938,241],{"class":40},[34,164940,164941,164943,164945,164947,164949,164951,164953,164955,164957],{"class":36,"line":51},[34,164942,11598],{"class":40},[34,164944,153],{"class":87},[34,164946,5101],{"class":40},[34,164948,869],{"class":63},[34,164950,13088],{"class":40},[34,164952,1088],{"class":63},[34,164954,13088],{"class":40},[34,164956,1114],{"class":63},[34,164958,241],{"class":40},[34,164960,164961],{"class":36,"line":60},[34,164962,3053],{"emptyLinePlaceholder":726},[34,164964,164965,164967,164970,164972,164975],{"class":36,"line":76},[34,164966,31066],{"class":63},[34,164968,164969],{"class":40},"(a ",[34,164971,1148],{"class":87},[34,164973,164974],{"class":40}," b)  ",[34,164976,164977],{"class":205},"# 交集\n",[34,164979,164980,164982,164984,164986,164988],{"class":36,"line":93},[34,164981,31066],{"class":63},[34,164983,164969],{"class":40},[34,164985,1714],{"class":87},[34,164987,164974],{"class":40},[34,164989,164990],{"class":205},"# 并集\n",[34,164992,164993,164995,164997,164999,165001],{"class":36,"line":99},[34,164994,31066],{"class":63},[34,164996,164969],{"class":40},[34,164998,1327],{"class":87},[34,165000,164974],{"class":40},[34,165002,165003],{"class":205},"# 差集\n",[14,165005,165007],{"id":165006},"_610-字典dict","6.10 字典dict",[108,165009,165010],{},"字典通过 key-value 保存数据。",[24,165012,165014],{"className":31029,"code":165013,"language":31031,"meta":29,"style":29},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[31,165015,165016,165024,165034,165045,165055],{"__ignoreMap":29},[34,165017,165018,165020,165022],{"class":36,"line":37},[34,165019,149982],{"class":40},[34,165021,153],{"class":87},[34,165023,57],{"class":40},[34,165025,165026,165028,165030,165032],{"class":36,"line":51},[34,165027,147521],{"class":156},[34,165029,67],{"class":40},[34,165031,150389],{"class":156},[34,165033,32117],{"class":40},[34,165035,165036,165039,165041,165043],{"class":36,"line":60},[34,165037,165038],{"class":156},"    \"age\"",[34,165040,67],{"class":40},[34,165042,1445],{"class":63},[34,165044,32117],{"class":40},[34,165046,165047,165050,165052],{"class":36,"line":76},[34,165048,165049],{"class":156},"    \"score\"",[34,165051,67],{"class":40},[34,165053,165054],{"class":63},"95\n",[34,165056,165057],{"class":36,"line":93},[34,165058,241],{"class":40},[108,165060,165061],{},"获取值：",[24,165063,165065],{"className":31029,"code":165064,"language":31031,"meta":29,"style":29},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[31,165066,165067,165078],{"__ignoreMap":29},[34,165068,165069,165071,165074,165076],{"class":36,"line":37},[34,165070,31066],{"class":63},[34,165072,165073],{"class":40},"(student[",[34,165075,63317],{"class":156},[34,165077,5310],{"class":40},[34,165079,165080,165082,165085,165087],{"class":36,"line":51},[34,165081,31066],{"class":63},[34,165083,165084],{"class":40},"(student.get(",[34,165086,63317],{"class":156},[34,165088,31148],{"class":40},[108,165090,16041],{},[24,165092,165094],{"className":31029,"code":165093,"language":31031,"meta":29,"style":29},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[31,165095,165096,165109],{"__ignoreMap":29},[34,165097,165098,165100,165103,165106],{"class":36,"line":37},[34,165099,153360],{"class":40},[34,165101,165102],{"class":156},"\"address\"",[34,165104,165105],{"class":40},"]     ",[34,165107,165108],{"class":205},"# key不存在会报错\n",[34,165110,165111,165114,165116,165118],{"class":36,"line":51},[34,165112,165113],{"class":40},"student.get(",[34,165115,165102],{"class":156},[34,165117,14367],{"class":40},[34,165119,165120],{"class":205},"# key不存在返回None\n",[108,165122,165123],{},"设置默认值：",[24,165125,165127],{"className":31029,"code":165126,"language":31031,"meta":29,"style":29},"print(student.get(\"address\", \"未知\"))\n",[31,165128,165129],{"__ignoreMap":29},[34,165130,165131,165133,165135,165137,165139,165142],{"class":36,"line":37},[34,165132,31066],{"class":63},[34,165134,165084],{"class":40},[34,165136,165102],{"class":156},[34,165138,13088],{"class":40},[34,165140,165141],{"class":156},"\"未知\"",[34,165143,31148],{"class":40},[108,165145,165146],{},"新增和修改：",[24,165148,165150],{"className":31029,"code":165149,"language":31031,"meta":29,"style":29},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[31,165151,165152,165165],{"__ignoreMap":29},[34,165153,165154,165156,165158,165160,165162],{"class":36,"line":37},[34,165155,153360],{"class":40},[34,165157,69759],{"class":156},[34,165159,5096],{"class":40},[34,165161,153],{"class":87},[34,165163,165164],{"class":63}," 19\n",[34,165166,165167,165169,165171,165173,165175],{"class":36,"line":51},[34,165168,153360],{"class":40},[34,165170,165102],{"class":156},[34,165172,5096],{"class":40},[34,165174,153],{"class":87},[34,165176,165177],{"class":156}," \"北京\"\n",[108,165179,165180],{},"删除：",[24,165182,165184],{"className":31029,"code":165183,"language":31031,"meta":29,"style":29},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[31,165185,165186,165199,165209],{"__ignoreMap":29},[34,165187,165188,165190,165192,165195,165197],{"class":36,"line":37},[34,165189,155859],{"class":40},[34,165191,153],{"class":87},[34,165193,165194],{"class":40}," student.pop(",[34,165196,151973],{"class":156},[34,165198,807],{"class":40},[34,165200,165201,165203,165205,165207],{"class":36,"line":51},[34,165202,163884],{"class":87},[34,165204,152650],{"class":40},[34,165206,69759],{"class":156},[34,165208,33897],{"class":40},[34,165210,165211],{"class":36,"line":60},[34,165212,165213],{"class":40},"student.clear()\n",[14,165215,165217],{"id":165216},"_611-字典遍历","6.11 字典遍历",[108,165219,165220],{},"遍历 key：",[24,165222,165224],{"className":31029,"code":165223,"language":31031,"meta":29,"style":29},"for key in student:\n    print(key, student[key])\n",[31,165225,165226,165238],{"__ignoreMap":29},[34,165227,165228,165230,165233,165235],{"class":36,"line":37},[34,165229,3678],{"class":87},[34,165231,165232],{"class":40}," key ",[34,165234,26695],{"class":87},[34,165236,165237],{"class":40}," student:\n",[34,165239,165240,165242],{"class":36,"line":51},[34,165241,31950],{"class":63},[34,165243,165244],{"class":40},"(key, student[key])\n",[108,165246,165247],{},"遍历 value：",[24,165249,165251],{"className":31029,"code":165250,"language":31031,"meta":29,"style":29},"for value in student.values():\n    print(value)\n",[31,165252,165253,165265],{"__ignoreMap":29},[34,165254,165255,165257,165260,165262],{"class":36,"line":37},[34,165256,3678],{"class":87},[34,165258,165259],{"class":40}," value ",[34,165261,26695],{"class":87},[34,165263,165264],{"class":40}," student.values():\n",[34,165266,165267,165269],{"class":36,"line":51},[34,165268,31950],{"class":63},[34,165270,165271],{"class":40},"(value)\n",[108,165273,165274],{},"遍历 key 和 value：",[24,165276,165278],{"className":31029,"code":165277,"language":31031,"meta":29,"style":29},"for key, value in student.items():\n    print(key, value)\n",[31,165279,165280,165292],{"__ignoreMap":29},[34,165281,165282,165284,165287,165289],{"class":36,"line":37},[34,165283,3678],{"class":87},[34,165285,165286],{"class":40}," key, value ",[34,165288,26695],{"class":87},[34,165290,165291],{"class":40}," student.items():\n",[34,165293,165294,165296],{"class":36,"line":51},[34,165295,31950],{"class":63},[34,165297,165298],{"class":40},"(key, value)\n",[14,165300,165302],{"id":165301},"_612-嵌套容器","6.12 嵌套容器",[108,165304,165305],{},"列表中保存字典，是项目中最常见的结构之一。",[24,165307,165309],{"className":31029,"code":165308,"language":31031,"meta":29,"style":29},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[31,165310,165311,165319,165347,165375,165403,165407,165411,165421],{"__ignoreMap":29},[34,165312,165313,165315,165317],{"class":36,"line":37},[34,165314,160217],{"class":40},[34,165316,153],{"class":87},[34,165318,56090],{"class":40},[34,165320,165321,165323,165325,165327,165329,165331,165333,165335,165337,165339,165341,165343,165345],{"class":36,"line":51},[34,165322,148886],{"class":40},[34,165324,63317],{"class":156},[34,165326,67],{"class":40},[34,165328,150389],{"class":156},[34,165330,13088],{"class":40},[34,165332,69759],{"class":156},[34,165334,67],{"class":40},[34,165336,1445],{"class":63},[34,165338,13088],{"class":40},[34,165340,151973],{"class":156},[34,165342,67],{"class":40},[34,165344,1782],{"class":63},[34,165346,5583],{"class":40},[34,165348,165349,165351,165353,165355,165357,165359,165361,165363,165365,165367,165369,165371,165373],{"class":36,"line":60},[34,165350,148886],{"class":40},[34,165352,63317],{"class":156},[34,165354,67],{"class":40},[34,165356,151437],{"class":156},[34,165358,13088],{"class":40},[34,165360,69759],{"class":156},[34,165362,67],{"class":40},[34,165364,1420],{"class":63},[34,165366,13088],{"class":40},[34,165368,151973],{"class":156},[34,165370,67],{"class":40},[34,165372,1605],{"class":63},[34,165374,5583],{"class":40},[34,165376,165377,165379,165381,165383,165385,165387,165389,165391,165393,165395,165397,165399,165401],{"class":36,"line":76},[34,165378,148886],{"class":40},[34,165380,63317],{"class":156},[34,165382,67],{"class":40},[34,165384,160232],{"class":156},[34,165386,13088],{"class":40},[34,165388,69759],{"class":156},[34,165390,67],{"class":40},[34,165392,1470],{"class":63},[34,165394,13088],{"class":40},[34,165396,151973],{"class":156},[34,165398,67],{"class":40},[34,165400,1201],{"class":63},[34,165402,5583],{"class":40},[34,165404,165405],{"class":36,"line":93},[34,165406,33897],{"class":40},[34,165408,165409],{"class":36,"line":99},[34,165410,3053],{"emptyLinePlaceholder":726},[34,165412,165413,165415,165417,165419],{"class":36,"line":353},[34,165414,3678],{"class":87},[34,165416,152638],{"class":40},[34,165418,26695],{"class":87},[34,165420,152643],{"class":40},[34,165422,165423,165425,165427,165429,165432,165434],{"class":36,"line":359},[34,165424,31950],{"class":63},[34,165426,165073],{"class":40},[34,165428,63317],{"class":156},[34,165430,165431],{"class":40},"], student[",[34,165433,151973],{"class":156},[34,165435,5310],{"class":40},[108,165437,165438],{},"统计平均分：",[24,165440,165442],{"className":31029,"code":165441,"language":31031,"meta":29,"style":29},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[31,165443,165444,165452,165456,165466,165478,165482,165497],{"__ignoreMap":29},[34,165445,165446,165448,165450],{"class":36,"line":37},[34,165447,157761],{"class":40},[34,165449,153],{"class":87},[34,165451,47984],{"class":63},[34,165453,165454],{"class":36,"line":51},[34,165455,3053],{"emptyLinePlaceholder":726},[34,165457,165458,165460,165462,165464],{"class":36,"line":60},[34,165459,3678],{"class":87},[34,165461,152638],{"class":40},[34,165463,26695],{"class":87},[34,165465,152643],{"class":40},[34,165467,165468,165470,165472,165474,165476],{"class":36,"line":76},[34,165469,159808],{"class":40},[34,165471,10130],{"class":87},[34,165473,152650],{"class":40},[34,165475,151973],{"class":156},[34,165477,33897],{"class":40},[34,165479,165480],{"class":36,"line":93},[34,165481,3053],{"emptyLinePlaceholder":726},[34,165483,165484,165486,165488,165490,165492,165494],{"class":36,"line":99},[34,165485,164275],{"class":40},[34,165487,153],{"class":87},[34,165489,164280],{"class":40},[34,165491,1379],{"class":87},[34,165493,7984],{"class":63},[34,165495,165496],{"class":40},"(students)\n",[34,165498,165499,165501,165503,165505,165507,165509,165511,165513,165515,165517],{"class":36,"line":353},[34,165500,31066],{"class":63},[34,165502,801],{"class":40},[34,165504,851],{"class":87},[34,165506,164298],{"class":156},[34,165508,1690],{"class":63},[34,165510,164303],{"class":40},[34,165512,157660],{"class":87},[34,165514,1739],{"class":63},[34,165516,1046],{"class":156},[34,165518,807],{"class":40},[108,165520,165521],{},"查找学生：",[24,165523,165525],{"className":31029,"code":165524,"language":31031,"meta":29,"style":29},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[31,165526,165527,165542,165546,165556,165570,165576,165580,165586],{"__ignoreMap":29},[34,165528,165529,165531,165533,165535,165537,165540],{"class":36,"line":37},[34,165530,112208],{"class":40},[34,165532,153],{"class":87},[34,165534,61248],{"class":63},[34,165536,801],{"class":40},[34,165538,165539],{"class":156},"\"请输入学生姓名:\"",[34,165541,807],{"class":40},[34,165543,165544],{"class":36,"line":51},[34,165545,3053],{"emptyLinePlaceholder":726},[34,165547,165548,165550,165552,165554],{"class":36,"line":60},[34,165549,3678],{"class":87},[34,165551,152638],{"class":40},[34,165553,26695],{"class":87},[34,165555,152643],{"class":40},[34,165557,165558,165560,165562,165564,165566,165568],{"class":36,"line":76},[34,165559,3754],{"class":87},[34,165561,152650],{"class":40},[34,165563,63317],{"class":156},[34,165565,5096],{"class":40},[34,165567,3602],{"class":87},[34,165569,160933],{"class":40},[34,165571,165572,165574],{"class":36,"line":93},[34,165573,33102],{"class":63},[34,165575,150543],{"class":40},[34,165577,165578],{"class":36,"line":99},[34,165579,32278],{"class":87},[34,165581,165582,165584],{"class":36,"line":353},[34,165583,2355],{"class":87},[34,165585,4392],{"class":40},[34,165587,165588,165590,165592,165595],{"class":36,"line":359},[34,165589,31950],{"class":63},[34,165591,801],{"class":40},[34,165593,165594],{"class":156},"\"没有找到\"",[34,165596,807],{"class":40},[14,165598,165600],{"id":165599},"_613-容器通用操作","6.13 容器通用操作",[108,165602,165603],{},"长度：",[24,165605,165607],{"className":31029,"code":165606,"language":31031,"meta":29,"style":29},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[31,165608,165609,165628,165638],{"__ignoreMap":29},[34,165610,165611,165613,165616,165618,165620,165622,165624,165626],{"class":36,"line":37},[34,165612,8011],{"class":63},[34,165614,165615],{"class":40},"([",[34,165617,1013],{"class":63},[34,165619,13088],{"class":40},[34,165621,875],{"class":63},[34,165623,13088],{"class":40},[34,165625,869],{"class":63},[34,165627,5310],{"class":40},[34,165629,165630,165632,165634,165636],{"class":36,"line":51},[34,165631,8011],{"class":63},[34,165633,801],{"class":40},[34,165635,156381],{"class":156},[34,165637,807],{"class":40},[34,165639,165640,165642,165645,165647,165649,165651],{"class":36,"line":60},[34,165641,8011],{"class":63},[34,165643,165644],{"class":40},"({",[34,165646,63317],{"class":156},[34,165648,67],{"class":40},[34,165650,150389],{"class":156},[34,165652,165653],{"class":40},"})\n",[108,165655,165656],{},"最大最小：",[24,165658,165660],{"className":31029,"code":165659,"language":31031,"meta":29,"style":29},"max([1, 2, 3])\nmin([1, 2, 3])\n",[31,165661,165662,165680],{"__ignoreMap":29},[34,165663,165664,165666,165668,165670,165672,165674,165676,165678],{"class":36,"line":37},[34,165665,6668],{"class":63},[34,165667,165615],{"class":40},[34,165669,1013],{"class":63},[34,165671,13088],{"class":40},[34,165673,875],{"class":63},[34,165675,13088],{"class":40},[34,165677,869],{"class":63},[34,165679,5310],{"class":40},[34,165681,165682,165685,165687,165689,165691,165693,165695,165697],{"class":36,"line":51},[34,165683,165684],{"class":63},"min",[34,165686,165615],{"class":40},[34,165688,1013],{"class":63},[34,165690,13088],{"class":40},[34,165692,875],{"class":63},[34,165694,13088],{"class":40},[34,165696,869],{"class":63},[34,165698,5310],{"class":40},[108,165700,165701],{},"求和：",[24,165703,165705],{"className":31029,"code":165704,"language":31031,"meta":29,"style":29},"sum([1, 2, 3])\n",[31,165706,165707],{"__ignoreMap":29},[34,165708,165709,165712,165714,165716,165718,165720,165722,165724],{"class":36,"line":37},[34,165710,165711],{"class":63},"sum",[34,165713,165615],{"class":40},[34,165715,1013],{"class":63},[34,165717,13088],{"class":40},[34,165719,875],{"class":63},[34,165721,13088],{"class":40},[34,165723,869],{"class":63},[34,165725,5310],{"class":40},[108,165727,163972],{},[24,165729,165731],{"className":31029,"code":165730,"language":31031,"meta":29,"style":29},"sorted([3, 1, 2])\n",[31,165732,165733],{"__ignoreMap":29},[34,165734,165735,165738,165740,165742,165744,165746,165748,165750],{"class":36,"line":37},[34,165736,165737],{"class":63},"sorted",[34,165739,165615],{"class":40},[34,165741,869],{"class":63},[34,165743,13088],{"class":40},[34,165745,1013],{"class":63},[34,165747,13088],{"class":40},[34,165749,875],{"class":63},[34,165751,5310],{"class":40},[108,165753,165754],{},"类型转换：",[24,165756,165758],{"className":31029,"code":165757,"language":31031,"meta":29,"style":29},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[31,165759,165760,165770,165788],{"__ignoreMap":29},[34,165761,165762,165764,165766,165768],{"class":36,"line":37},[34,165763,154571],{"class":63},[34,165765,801],{"class":40},[34,165767,156381],{"class":156},[34,165769,807],{"class":40},[34,165771,165772,165774,165776,165778,165780,165782,165784,165786],{"class":36,"line":51},[34,165773,155766],{"class":63},[34,165775,165615],{"class":40},[34,165777,1013],{"class":63},[34,165779,13088],{"class":40},[34,165781,875],{"class":63},[34,165783,13088],{"class":40},[34,165785,869],{"class":63},[34,165787,5310],{"class":40},[34,165789,165790,165792,165794,165796,165798,165800,165802,165804,165806,165808],{"class":36,"line":60},[34,165791,155791],{"class":63},[34,165793,165615],{"class":40},[34,165795,1013],{"class":63},[34,165797,13088],{"class":40},[34,165799,1013],{"class":63},[34,165801,13088],{"class":40},[34,165803,875],{"class":63},[34,165805,13088],{"class":40},[34,165807,869],{"class":63},[34,165809,5310],{"class":40},[108,165811,165812],{},"成员判断：",[24,165814,165816],{"className":31029,"code":165815,"language":31031,"meta":29,"style":29},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[31,165817,165818,165835,165859],{"__ignoreMap":29},[34,165819,165820,165822,165824,165827,165830,165833],{"class":36,"line":37},[34,165821,31066],{"class":63},[34,165823,801],{"class":40},[34,165825,165826],{"class":156},"\"a\"",[34,165828,165829],{"class":87}," in",[34,165831,165832],{"class":156}," \"abc\"",[34,165834,807],{"class":40},[34,165836,165837,165839,165841,165843,165845,165847,165849,165851,165853,165855,165857],{"class":36,"line":51},[34,165838,31066],{"class":63},[34,165840,801],{"class":40},[34,165842,1013],{"class":63},[34,165844,165829],{"class":87},[34,165846,52872],{"class":40},[34,165848,1013],{"class":63},[34,165850,13088],{"class":40},[34,165852,875],{"class":63},[34,165854,13088],{"class":40},[34,165856,869],{"class":63},[34,165858,5310],{"class":40},[34,165860,165861,165863,165865,165867,165869,165871,165873,165875,165877],{"class":36,"line":60},[34,165862,31066],{"class":63},[34,165864,801],{"class":40},[34,165866,63317],{"class":156},[34,165868,165829],{"class":87},[34,165870,5101],{"class":40},[34,165872,63317],{"class":156},[34,165874,67],{"class":40},[34,165876,150389],{"class":156},[34,165878,165653],{"class":40},[14,165880,165882],{"id":165881},"_614-推导式","6.14 推导式",[108,165884,165885],{},"推导式用于快速生成容器。",[108,165887,165888],{},"列表推导式：",[24,165890,165892],{"className":31029,"code":165891,"language":31031,"meta":29,"style":29},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[31,165893,165894,165921],{"__ignoreMap":29},[34,165895,165896,165898,165900,165903,165905,165907,165909,165911,165913,165915,165917,165919],{"class":36,"line":37},[34,165897,164601],{"class":40},[34,165899,153],{"class":87},[34,165901,165902],{"class":40}," [i ",[34,165904,3678],{"class":87},[34,165906,10091],{"class":40},[34,165908,26695],{"class":87},[34,165910,33094],{"class":63},[34,165912,801],{"class":40},[34,165914,1013],{"class":63},[34,165916,13088],{"class":40},[34,165918,1139],{"class":63},[34,165920,97930],{"class":40},[34,165922,165923,165925],{"class":36,"line":51},[34,165924,31066],{"class":63},[34,165926,164817],{"class":40},[108,165928,165929],{},"带条件：",[24,165931,165933],{"className":31029,"code":165932,"language":31031,"meta":29,"style":29},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[31,165934,165935,165976],{"__ignoreMap":29},[34,165936,165937,165940,165942,165944,165946,165948,165950,165952,165954,165956,165958,165960,165962,165964,165966,165968,165970,165972,165974],{"class":36,"line":37},[34,165938,165939],{"class":40},"even_nums ",[34,165941,153],{"class":87},[34,165943,165902],{"class":40},[34,165945,3678],{"class":87},[34,165947,10091],{"class":40},[34,165949,26695],{"class":87},[34,165951,33094],{"class":63},[34,165953,801],{"class":40},[34,165955,1013],{"class":63},[34,165957,13088],{"class":40},[34,165959,1132],{"class":63},[34,165961,14367],{"class":40},[34,165963,2191],{"class":87},[34,165965,10091],{"class":40},[34,165967,1123],{"class":87},[34,165969,15408],{"class":63},[34,165971,102189],{"class":87},[34,165973,4746],{"class":63},[34,165975,33897],{"class":40},[34,165977,165978,165980],{"class":36,"line":51},[34,165979,31066],{"class":63},[34,165981,165982],{"class":40},"(even_nums)\n",[108,165984,165985],{},"字典推导式：",[24,165987,165989],{"className":31029,"code":165988,"language":31031,"meta":29,"style":29},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[31,165990,165991,166025],{"__ignoreMap":29},[34,165992,165993,165996,165998,166001,166003,166005,166008,166010,166012,166014,166016,166018,166020,166022],{"class":36,"line":37},[34,165994,165995],{"class":40},"squares ",[34,165997,153],{"class":87},[34,165999,166000],{"class":40}," {i: i ",[34,166002,11314],{"class":87},[34,166004,15408],{"class":63},[34,166006,166007],{"class":87}," for",[34,166009,10091],{"class":40},[34,166011,26695],{"class":87},[34,166013,33094],{"class":63},[34,166015,801],{"class":40},[34,166017,1013],{"class":63},[34,166019,13088],{"class":40},[34,166021,1139],{"class":63},[34,166023,166024],{"class":40},")}\n",[34,166026,166027,166029],{"class":36,"line":51},[34,166028,31066],{"class":63},[34,166030,166031],{"class":40},"(squares)\n",[108,166033,166034],{},"集合推导式：",[24,166036,166038],{"className":31029,"code":166037,"language":31031,"meta":29,"style":29},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[31,166039,166040,166061],{"__ignoreMap":29},[34,166041,166042,166045,166047,166050,166052,166054,166056,166059],{"class":36,"line":37},[34,166043,166044],{"class":40},"chars ",[34,166046,153],{"class":87},[34,166048,166049],{"class":40}," {ch ",[34,166051,3678],{"class":87},[34,166053,160193],{"class":40},[34,166055,26695],{"class":87},[34,166057,166058],{"class":156}," \"hello\"",[34,166060,241],{"class":40},[34,166062,166063,166065],{"class":36,"line":51},[34,166064,31066],{"class":63},[34,166066,166067],{"class":40},"(chars)\n",[108,166069,166070],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166072,166074],{"id":166073},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[24,166076,166078],{"className":31029,"code":166077,"language":31031,"meta":29,"style":29},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[31,166079,166080,166088,166108,166128,166148,166168,166172,166176,166184,166198,166207,166211,166221,166233,166237,166257,166266,166270,166286,166291,166295,166309,166313,166335,166371],{"__ignoreMap":29},[34,166081,166082,166084,166086],{"class":36,"line":37},[34,166083,160217],{"class":40},[34,166085,153],{"class":87},[34,166087,56090],{"class":40},[34,166089,166090,166092,166094,166096,166098,166100,166102,166104,166106],{"class":36,"line":51},[34,166091,148886],{"class":40},[34,166093,63317],{"class":156},[34,166095,67],{"class":40},[34,166097,150389],{"class":156},[34,166099,13088],{"class":40},[34,166101,151973],{"class":156},[34,166103,67],{"class":40},[34,166105,1782],{"class":63},[34,166107,5583],{"class":40},[34,166109,166110,166112,166114,166116,166118,166120,166122,166124,166126],{"class":36,"line":60},[34,166111,148886],{"class":40},[34,166113,63317],{"class":156},[34,166115,67],{"class":40},[34,166117,151437],{"class":156},[34,166119,13088],{"class":40},[34,166121,151973],{"class":156},[34,166123,67],{"class":40},[34,166125,1605],{"class":63},[34,166127,5583],{"class":40},[34,166129,166130,166132,166134,166136,166138,166140,166142,166144,166146],{"class":36,"line":76},[34,166131,148886],{"class":40},[34,166133,63317],{"class":156},[34,166135,67],{"class":40},[34,166137,160232],{"class":156},[34,166139,13088],{"class":40},[34,166141,151973],{"class":156},[34,166143,67],{"class":40},[34,166145,1201],{"class":63},[34,166147,5583],{"class":40},[34,166149,166150,166152,166154,166156,166158,166160,166162,166164,166166],{"class":36,"line":93},[34,166151,148886],{"class":40},[34,166153,63317],{"class":156},[34,166155,67],{"class":40},[34,166157,163811],{"class":156},[34,166159,13088],{"class":40},[34,166161,151973],{"class":156},[34,166163,67],{"class":40},[34,166165,1676],{"class":63},[34,166167,5583],{"class":40},[34,166169,166170],{"class":36,"line":99},[34,166171,33897],{"class":40},[34,166173,166174],{"class":36,"line":353},[34,166175,3053],{"emptyLinePlaceholder":726},[34,166177,166178,166180,166182],{"class":36,"line":359},[34,166179,157761],{"class":40},[34,166181,153],{"class":87},[34,166183,47984],{"class":63},[34,166185,166186,166189,166191,166194,166196],{"class":36,"line":579},[34,166187,166188],{"class":40},"max_student ",[34,166190,153],{"class":87},[34,166192,166193],{"class":40}," students[",[34,166195,987],{"class":63},[34,166197,33897],{"class":40},[34,166199,166200,166203,166205],{"class":36,"line":589},[34,166201,166202],{"class":40},"passed ",[34,166204,153],{"class":87},[34,166206,52484],{"class":40},[34,166208,166209],{"class":36,"line":601},[34,166210,3053],{"emptyLinePlaceholder":726},[34,166212,166213,166215,166217,166219],{"class":36,"line":613},[34,166214,3678],{"class":87},[34,166216,152638],{"class":40},[34,166218,26695],{"class":87},[34,166220,152643],{"class":40},[34,166222,166223,166225,166227,166229,166231],{"class":36,"line":618},[34,166224,159808],{"class":40},[34,166226,10130],{"class":87},[34,166228,152650],{"class":40},[34,166230,151973],{"class":156},[34,166232,33897],{"class":40},[34,166234,166235],{"class":36,"line":628},[34,166236,3053],{"emptyLinePlaceholder":726},[34,166238,166239,166241,166243,166245,166247,166249,166252,166254],{"class":36,"line":640},[34,166240,3754],{"class":87},[34,166242,152650],{"class":40},[34,166244,151973],{"class":156},[34,166246,5096],{"class":40},[34,166248,1753],{"class":87},[34,166250,166251],{"class":40}," max_student[",[34,166253,151973],{"class":156},[34,166255,166256],{"class":40},"]:\n",[34,166258,166259,166262,166264],{"class":36,"line":2301},[34,166260,166261],{"class":40},"        max_student ",[34,166263,153],{"class":87},[34,166265,152666],{"class":40},[34,166267,166268],{"class":36,"line":2307},[34,166269,3053],{"emptyLinePlaceholder":726},[34,166271,166272,166274,166276,166278,166280,166282,166284],{"class":36,"line":2328},[34,166273,3754],{"class":87},[34,166275,152650],{"class":40},[34,166277,151973],{"class":156},[34,166279,5096],{"class":40},[34,166281,2364],{"class":87},[34,166283,158338],{"class":63},[34,166285,4392],{"class":40},[34,166287,166288],{"class":36,"line":2333},[34,166289,166290],{"class":40},"        passed.append(student)\n",[34,166292,166293],{"class":36,"line":2347},[34,166294,3053],{"emptyLinePlaceholder":726},[34,166296,166297,166299,166301,166303,166305,166307],{"class":36,"line":2352},[34,166298,164275],{"class":40},[34,166300,153],{"class":87},[34,166302,164280],{"class":40},[34,166304,1379],{"class":87},[34,166306,7984],{"class":63},[34,166308,165496],{"class":40},[34,166310,166311],{"class":36,"line":2381},[34,166312,3053],{"emptyLinePlaceholder":726},[34,166314,166315,166317,166319,166321,166323,166325,166327,166329,166331,166333],{"class":36,"line":2386},[34,166316,31066],{"class":63},[34,166318,801],{"class":40},[34,166320,851],{"class":87},[34,166322,164298],{"class":156},[34,166324,1690],{"class":63},[34,166326,164303],{"class":40},[34,166328,157660],{"class":87},[34,166330,1739],{"class":63},[34,166332,1046],{"class":156},[34,166334,807],{"class":40},[34,166336,166337,166339,166341,166343,166346,166348,166351,166353,166355,166357,166359,166361,166363,166365,166367,166369],{"class":36,"line":2403},[34,166338,31066],{"class":63},[34,166340,801],{"class":40},[34,166342,851],{"class":87},[34,166344,166345],{"class":156},"\"最高分学生:",[34,166347,1690],{"class":63},[34,166349,166350],{"class":40},"max_student[",[34,166352,153383],{"class":156},[34,166354,1733],{"class":40},[34,166356,1739],{"class":63},[34,166358,5101],{"class":63},[34,166360,166350],{"class":40},[34,166362,153421],{"class":156},[34,166364,1733],{"class":40},[34,166366,1739],{"class":63},[34,166368,1046],{"class":156},[34,166370,807],{"class":40},[34,166372,166373,166375,166377,166379,166382,166385,166388,166390,166392],{"class":36,"line":2408},[34,166374,31066],{"class":63},[34,166376,801],{"class":40},[34,166378,851],{"class":87},[34,166380,166381],{"class":156},"\"及格人数:",[34,166383,166384],{"class":63},"{len",[34,166386,166387],{"class":40},"(passed)",[34,166389,1739],{"class":63},[34,166391,1046],{"class":156},[34,166393,807],{"class":40},[14,166395,166397],{"id":166396},"_616-易错点","6.16 易错点",[752,166399,166400,166403,166406,166409,166415,166424],{},[755,166401,166402],{},"列表可变，元组和字符串不可变。",[755,166404,166405],{},"切片结束位置不包含。",[755,166407,166408],{},"字典通过 key 取值，不是通过索引。",[755,166410,166411,166412,29036],{},"空集合要用 ",[31,166413,166414],{},"set()",[755,166416,104996,166417,166420,166421,29036],{},[31,166418,166419],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[31,166422,166423],{},"get()",[755,166425,166426],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166428,166430],{"id":166429},"_617-本章练习","6.17 本章练习",[752,166432,166433,166436,166439,166442,166445],{},[755,166434,166435],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[755,166437,166438],{},"输入一句话，统计每个字符出现次数。",[755,166440,166441],{},"使用集合去除列表中的重复元素。",[755,166443,166444],{},"使用字典保存一个学生的信息，并实现修改成绩。",[755,166446,166447],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[45,166449,166450],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":166452},[166453,166454,166455,166456,166457,166458,166459,166460,166461,166462,166463,166464,166465,166466,166467,166468,166469],{"id":163433,"depth":51,"text":163434},{"id":163550,"depth":51,"text":163551},{"id":163640,"depth":51,"text":163641},{"id":163764,"depth":51,"text":163765},{"id":164127,"depth":51,"text":164128},{"id":164314,"depth":51,"text":164315},{"id":164433,"depth":51,"text":164434},{"id":164575,"depth":51,"text":164576},{"id":164762,"depth":51,"text":164763},{"id":165006,"depth":51,"text":165007},{"id":165216,"depth":51,"text":165217},{"id":165301,"depth":51,"text":165302},{"id":165599,"depth":51,"text":165600},{"id":165881,"depth":51,"text":165882},{"id":166073,"depth":51,"text":166074},{"id":166396,"depth":51,"text":166397},{"id":166429,"depth":51,"text":166430},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163425,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166476,"title":166477,"body":166478,"description":723,"extension":724,"meta":168650,"navigation":726,"path":168651,"seo":168652,"stem":168653,"__hash__":168654},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166479,"toc":168625},[166480,166483,166487,166490,166570,166573,166594,166597,166601,166604,166666,166669,166686,166690,166693,166738,166740,166748,166752,166755,166837,166840,166843,166868,166871,166894,166898,166901,166903,166965,166968,166970,167021,167025,167029,167035,167140,167144,167150,167221,167225,167228,167296,167299,167379,167383,167389,167425,167428,167431,167541,167547,167551,167554,167626,167629,167633,167637,167642,167704,167708,167713,167781,167785,167790,167906,167910,167913,167993,167996,168000,168003,168107,168109,168124,168127,168131,168269,168277,168281,168283,168294,168296,168554,168558,168590,168594,168622],[10,166481,166477],{"id":166482},"_7-函数进阶",[14,166484,166486],{"id":166485},"_71-多返回值","7.1 多返回值",[108,166488,166489],{},"Python 函数可以返回多个值，本质上返回的是元组。",[24,166491,166493],{"className":31029,"code":166492,"language":31031,"meta":29,"style":29},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[31,166494,166495,166504,166512,166520,166529,166536,166540,166544,166553,166559],{"__ignoreMap":29},[34,166496,166497,166499,166502],{"class":36,"line":37},[34,166498,32598],{"class":87},[34,166500,166501],{"class":149}," get_info",[34,166503,32604],{"class":40},[34,166505,166506,166508,166510],{"class":36,"line":51},[34,166507,152871],{"class":40},[34,166509,153],{"class":87},[34,166511,149854],{"class":156},[34,166513,166514,166516,166518],{"class":36,"line":60},[34,166515,152887],{"class":40},[34,166517,153],{"class":87},[34,166519,147052],{"class":63},[34,166521,166522,166524,166526],{"class":36,"line":76},[34,166523,152902],{"class":40},[34,166525,153],{"class":87},[34,166527,166528],{"class":63}," 95\n",[34,166530,166531,166533],{"class":36,"line":93},[34,166532,4743],{"class":87},[34,166534,166535],{"class":40}," name, age, score\n",[34,166537,166538],{"class":36,"line":99},[34,166539,3053],{"emptyLinePlaceholder":726},[34,166541,166542],{"class":36,"line":353},[34,166543,3053],{"emptyLinePlaceholder":726},[34,166545,166546,166548,166550],{"class":36,"line":359},[34,166547,161807],{"class":40},[34,166549,153],{"class":87},[34,166551,166552],{"class":40}," get_info()\n",[34,166554,166555,166557],{"class":36,"line":579},[34,166556,31066],{"class":63},[34,166558,77216],{"class":40},[34,166560,166561,166563,166565,166567],{"class":36,"line":589},[34,166562,31066],{"class":63},[34,166564,801],{"class":40},[34,166566,103737],{"class":63},[34,166568,166569],{"class":40},"(result))\n",[108,166571,166572],{},"可以直接解包：",[24,166574,166576],{"className":31029,"code":166575,"language":31031,"meta":29,"style":29},"name, age, score = get_info()\nprint(name, age, score)\n",[31,166577,166578,166587],{"__ignoreMap":29},[34,166579,166580,166583,166585],{"class":36,"line":37},[34,166581,166582],{"class":40},"name, age, score ",[34,166584,153],{"class":87},[34,166586,166552],{"class":40},[34,166588,166589,166591],{"class":36,"line":51},[34,166590,31066],{"class":63},[34,166592,166593],{"class":40},"(name, age, score)\n",[108,166595,166596],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166598,166600],{"id":166599},"_72-位置参数","7.2 位置参数",[108,166602,166603],{},"位置参数按顺序传递。",[24,166605,166607],{"className":31029,"code":166606,"language":31031,"meta":29,"style":29},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[31,166608,166609,166617,166645,166649,166653],{"__ignoreMap":29},[34,166610,166611,166613,166615],{"class":36,"line":37},[34,166612,32598],{"class":87},[34,166614,149873],{"class":149},[34,166616,149876],{"class":40},[34,166618,166619,166621,166623,166625,166627,166629,166631,166633,166635,166637,166639,166641,166643],{"class":36,"line":51},[34,166620,31950],{"class":63},[34,166622,801],{"class":40},[34,166624,851],{"class":87},[34,166626,149887],{"class":156},[34,166628,1690],{"class":63},[34,166630,80440],{"class":40},[34,166632,1739],{"class":63},[34,166634,149896],{"class":156},[34,166636,1690],{"class":63},[34,166638,70856],{"class":40},[34,166640,1739],{"class":63},[34,166642,149905],{"class":156},[34,166644,807],{"class":40},[34,166646,166647],{"class":36,"line":60},[34,166648,3053],{"emptyLinePlaceholder":726},[34,166650,166651],{"class":36,"line":76},[34,166652,3053],{"emptyLinePlaceholder":726},[34,166654,166655,166658,166660,166662,166664],{"class":36,"line":93},[34,166656,166657],{"class":40},"introduce(",[34,166659,150389],{"class":156},[34,166661,13088],{"class":40},[34,166663,1445],{"class":63},[34,166665,807],{"class":40},[108,166667,166668],{},"顺序错了就会得到错误含义：",[24,166670,166672],{"className":31029,"code":166671,"language":31031,"meta":29,"style":29},"introduce(18, \"小明\")\n",[31,166673,166674],{"__ignoreMap":29},[34,166675,166676,166678,166680,166682,166684],{"class":36,"line":37},[34,166677,166657],{"class":40},[34,166679,1445],{"class":63},[34,166681,13088],{"class":40},[34,166683,150389],{"class":156},[34,166685,807],{"class":40},[14,166687,166689],{"id":166688},"_73-关键字参数","7.3 关键字参数",[108,166691,166692],{},"关键字参数按参数名传递。",[24,166694,166696],{"className":31029,"code":166695,"language":31031,"meta":29,"style":29},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[31,166697,166698,166718],{"__ignoreMap":29},[34,166699,166700,166702,166704,166706,166708,166710,166712,166714,166716],{"class":36,"line":37},[34,166701,166657],{"class":40},[34,166703,80440],{"class":5869},[34,166705,153],{"class":87},[34,166707,150389],{"class":156},[34,166709,13088],{"class":40},[34,166711,70856],{"class":5869},[34,166713,153],{"class":87},[34,166715,1445],{"class":63},[34,166717,807],{"class":40},[34,166719,166720,166722,166724,166726,166728,166730,166732,166734,166736],{"class":36,"line":51},[34,166721,166657],{"class":40},[34,166723,70856],{"class":5869},[34,166725,153],{"class":87},[34,166727,1445],{"class":63},[34,166729,13088],{"class":40},[34,166731,80440],{"class":5869},[34,166733,153],{"class":87},[34,166735,150389],{"class":156},[34,166737,807],{"class":40},[108,166739,118564],{},[752,166741,166742,166745],{},[755,166743,166744],{},"顺序不容易错。",[755,166746,166747],{},"调用时可读性更强。",[14,166749,166751],{"id":166750},"_74-默认参数","7.4 默认参数",[108,166753,166754],{},"默认参数给参数设置默认值。",[24,166756,166758],{"className":31029,"code":166757,"language":31031,"meta":29,"style":29},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[31,166759,166760,166776,166806,166810,166814,166824],{"__ignoreMap":29},[34,166761,166762,166764,166766,166769,166771,166774],{"class":36,"line":37},[34,166763,32598],{"class":87},[34,166765,122723],{"class":149},[34,166767,166768],{"class":40},"(host, port",[34,166770,153],{"class":87},[34,166772,166773],{"class":63},"3306",[34,166775,31437],{"class":40},[34,166777,166778,166780,166782,166784,166787,166789,166791,166793,166795,166797,166800,166802,166804],{"class":36,"line":51},[34,166779,31950],{"class":63},[34,166781,801],{"class":40},[34,166783,851],{"class":87},[34,166785,166786],{"class":156},"\"连接",[34,166788,1690],{"class":63},[34,166790,28046],{"class":40},[34,166792,1739],{"class":63},[34,166794,1653],{"class":156},[34,166796,1690],{"class":63},[34,166798,166799],{"class":40},"port",[34,166801,1739],{"class":63},[34,166803,1046],{"class":156},[34,166805,807],{"class":40},[34,166807,166808],{"class":36,"line":60},[34,166809,3053],{"emptyLinePlaceholder":726},[34,166811,166812],{"class":36,"line":76},[34,166813,3053],{"emptyLinePlaceholder":726},[34,166815,166816,166819,166822],{"class":36,"line":93},[34,166817,166818],{"class":40},"connect(",[34,166820,166821],{"class":156},"\"localhost\"",[34,166823,807],{"class":40},[34,166825,166826,166828,166830,166832,166835],{"class":36,"line":99},[34,166827,166818],{"class":40},[34,166829,166821],{"class":156},[34,166831,13088],{"class":40},[34,166833,166834],{"class":63},"6379",[34,166836,807],{"class":40},[108,166838,166839],{},"注意：默认参数必须放在非默认参数后面。",[108,166841,166842],{},"错误：",[24,166844,166846],{"className":31029,"code":166845,"language":31031,"meta":29,"style":29},"def connect(port=3306, host):\n    pass\n",[31,166847,166848,166864],{"__ignoreMap":29},[34,166849,166850,166852,166854,166857,166859,166861],{"class":36,"line":37},[34,166851,32598],{"class":87},[34,166853,122723],{"class":149},[34,166855,166856],{"class":40},"(port",[34,166858,153],{"class":87},[34,166860,166773],{"class":63},[34,166862,166863],{"class":40},", host):\n",[34,166865,166866],{"class":36,"line":51},[34,166867,150038],{"class":87},[108,166869,166870],{},"正确：",[24,166872,166874],{"className":31029,"code":166873,"language":31031,"meta":29,"style":29},"def connect(host, port=3306):\n    pass\n",[31,166875,166876,166890],{"__ignoreMap":29},[34,166877,166878,166880,166882,166884,166886,166888],{"class":36,"line":37},[34,166879,32598],{"class":87},[34,166881,122723],{"class":149},[34,166883,166768],{"class":40},[34,166885,153],{"class":87},[34,166887,166773],{"class":63},[34,166889,31437],{"class":40},[34,166891,166892],{"class":36,"line":51},[34,166893,150038],{"class":87},[14,166895,166897],{"id":166896},"_75-默认参数的坑","7.5 默认参数的坑",[108,166899,166900],{},"不要使用可变对象作为默认参数。",[108,166902,158124],{},[24,166904,166906],{"className":31029,"code":166905,"language":31031,"meta":29,"style":29},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[31,166907,166908,166923,166928,166935,166939,166943,166954],{"__ignoreMap":29},[34,166909,166910,166912,166915,166918,166920],{"class":36,"line":37},[34,166911,32598],{"class":87},[34,166913,166914],{"class":149}," add_item",[34,166916,166917],{"class":40},"(item, items",[34,166919,153],{"class":87},[34,166921,166922],{"class":40},"[]):\n",[34,166924,166925],{"class":36,"line":51},[34,166926,166927],{"class":40},"    items.append(item)\n",[34,166929,166930,166932],{"class":36,"line":60},[34,166931,4743],{"class":87},[34,166933,166934],{"class":40}," items\n",[34,166936,166937],{"class":36,"line":76},[34,166938,3053],{"emptyLinePlaceholder":726},[34,166940,166941],{"class":36,"line":93},[34,166942,3053],{"emptyLinePlaceholder":726},[34,166944,166945,166947,166950,166952],{"class":36,"line":99},[34,166946,31066],{"class":63},[34,166948,166949],{"class":40},"(add_item(",[34,166951,165826],{"class":156},[34,166953,31148],{"class":40},[34,166955,166956,166958,166960,166963],{"class":36,"line":353},[34,166957,31066],{"class":63},[34,166959,166949],{"class":40},[34,166961,166962],{"class":156},"\"b\"",[34,166964,31148],{"class":40},[108,166966,166967],{},"第二次调用会复用第一次的列表。",[108,166969,156389],{},[24,166971,166973],{"className":31029,"code":166972,"language":31031,"meta":29,"style":29},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[31,166974,166975,166989,167002,167011,167015],{"__ignoreMap":29},[34,166976,166977,166979,166981,166983,166985,166987],{"class":36,"line":37},[34,166978,32598],{"class":87},[34,166980,166914],{"class":149},[34,166982,166917],{"class":40},[34,166984,153],{"class":87},[34,166986,96316],{"class":63},[34,166988,31437],{"class":40},[34,166990,166991,166993,166996,166998,167000],{"class":36,"line":51},[34,166992,3754],{"class":87},[34,166994,166995],{"class":40}," items ",[34,166997,39578],{"class":87},[34,166999,39584],{"class":63},[34,167001,4392],{"class":40},[34,167003,167004,167007,167009],{"class":36,"line":60},[34,167005,167006],{"class":40},"        items ",[34,167008,153],{"class":87},[34,167010,52484],{"class":40},[34,167012,167013],{"class":36,"line":76},[34,167014,166927],{"class":40},[34,167016,167017,167019],{"class":36,"line":93},[34,167018,4743],{"class":87},[34,167020,166934],{"class":40},[14,167022,167024],{"id":167023},"_76-不定长参数","7.6 不定长参数",[19,167026,167028],{"id":167027},"_761-args","7.6.1 *args",[108,167030,167031,167034],{},[31,167032,167033],{},"*args"," 接收任意数量的位置参数，得到元组。",[24,167036,167038],{"className":31029,"code":167037,"language":31031,"meta":29,"style":29},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[31,167039,167040,167053,167061,167072,167081,167087,167091,167095,167114],{"__ignoreMap":29},[34,167041,167042,167044,167046,167048,167050],{"class":36,"line":37},[34,167043,32598],{"class":87},[34,167045,5862],{"class":149},[34,167047,801],{"class":40},[34,167049,1250],{"class":87},[34,167051,167052],{"class":40},"args):\n",[34,167054,167055,167057,167059],{"class":36,"line":51},[34,167056,159808],{"class":40},[34,167058,153],{"class":87},[34,167060,47984],{"class":63},[34,167062,167063,167065,167067,167069],{"class":36,"line":60},[34,167064,3854],{"class":87},[34,167066,156681],{"class":40},[34,167068,26695],{"class":87},[34,167070,167071],{"class":40}," args:\n",[34,167073,167074,167076,167078],{"class":36,"line":76},[34,167075,160483],{"class":40},[34,167077,10130],{"class":87},[34,167079,167080],{"class":40}," num\n",[34,167082,167083,167085],{"class":36,"line":93},[34,167084,4743],{"class":87},[34,167086,162788],{"class":40},[34,167088,167089],{"class":36,"line":99},[34,167090,3053],{"emptyLinePlaceholder":726},[34,167092,167093],{"class":36,"line":353},[34,167094,3053],{"emptyLinePlaceholder":726},[34,167096,167097,167099,167102,167104,167106,167108,167110,167112],{"class":36,"line":359},[34,167098,31066],{"class":63},[34,167100,167101],{"class":40},"(add(",[34,167103,1013],{"class":63},[34,167105,13088],{"class":40},[34,167107,875],{"class":63},[34,167109,13088],{"class":40},[34,167111,869],{"class":63},[34,167113,31148],{"class":40},[34,167115,167116,167118,167120,167122,167124,167126,167128,167130,167132,167134,167136,167138],{"class":36,"line":579},[34,167117,31066],{"class":63},[34,167119,167101],{"class":40},[34,167121,1013],{"class":63},[34,167123,13088],{"class":40},[34,167125,875],{"class":63},[34,167127,13088],{"class":40},[34,167129,869],{"class":63},[34,167131,13088],{"class":40},[34,167133,1088],{"class":63},[34,167135,13088],{"class":40},[34,167137,1114],{"class":63},[34,167139,31148],{"class":40},[19,167141,167143],{"id":167142},"_762-kwargs","7.6.2 **kwargs",[108,167145,167146,167149],{},[31,167147,167148],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[24,167151,167153],{"className":31029,"code":167152,"language":31031,"meta":29,"style":29},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[31,167154,167155,167168,167179,167185,167189,167193],{"__ignoreMap":29},[34,167156,167157,167159,167161,167163,167165],{"class":36,"line":37},[34,167158,32598],{"class":87},[34,167160,162446],{"class":149},[34,167162,801],{"class":40},[34,167164,11314],{"class":87},[34,167166,167167],{"class":40},"kwargs):\n",[34,167169,167170,167172,167174,167176],{"class":36,"line":51},[34,167171,3854],{"class":87},[34,167173,165286],{"class":40},[34,167175,26695],{"class":87},[34,167177,167178],{"class":40}," kwargs.items():\n",[34,167180,167181,167183],{"class":36,"line":60},[34,167182,33102],{"class":63},[34,167184,165298],{"class":40},[34,167186,167187],{"class":36,"line":76},[34,167188,3053],{"emptyLinePlaceholder":726},[34,167190,167191],{"class":36,"line":93},[34,167192,3053],{"emptyLinePlaceholder":726},[34,167194,167195,167197,167199,167201,167203,167205,167207,167209,167211,167213,167215,167217,167219],{"class":36,"line":99},[34,167196,162511],{"class":40},[34,167198,80440],{"class":5869},[34,167200,153],{"class":87},[34,167202,150389],{"class":156},[34,167204,13088],{"class":40},[34,167206,70856],{"class":5869},[34,167208,153],{"class":87},[34,167210,1445],{"class":63},[34,167212,13088],{"class":40},[34,167214,70907],{"class":5869},[34,167216,153],{"class":87},[34,167218,69904],{"class":156},[34,167220,807],{"class":40},[14,167222,167224],{"id":167223},"_77-参数解包","7.7 参数解包",[108,167226,167227],{},"列表或元组解包为位置参数：",[24,167229,167231],{"className":31029,"code":167230,"language":31031,"meta":29,"style":29},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[31,167232,167233,167242,167257,167261,167265,167285],{"__ignoreMap":29},[34,167234,167235,167237,167239],{"class":36,"line":37},[34,167236,32598],{"class":87},[34,167238,5862],{"class":149},[34,167240,167241],{"class":40},"(a, b, c):\n",[34,167243,167244,167246,167248,167250,167252,167254],{"class":36,"line":51},[34,167245,4743],{"class":87},[34,167247,11522],{"class":40},[34,167249,1276],{"class":87},[34,167251,11535],{"class":40},[34,167253,1276],{"class":87},[34,167255,167256],{"class":40}," c\n",[34,167258,167259],{"class":36,"line":60},[34,167260,3053],{"emptyLinePlaceholder":726},[34,167262,167263],{"class":36,"line":76},[34,167264,3053],{"emptyLinePlaceholder":726},[34,167266,167267,167269,167271,167273,167275,167277,167279,167281,167283],{"class":36,"line":93},[34,167268,164601],{"class":40},[34,167270,153],{"class":87},[34,167272,52872],{"class":40},[34,167274,1013],{"class":63},[34,167276,13088],{"class":40},[34,167278,875],{"class":63},[34,167280,13088],{"class":40},[34,167282,869],{"class":63},[34,167284,33897],{"class":40},[34,167286,167287,167289,167291,167293],{"class":36,"line":99},[34,167288,31066],{"class":63},[34,167290,167101],{"class":40},[34,167292,1250],{"class":87},[34,167294,167295],{"class":40},"nums))\n",[108,167297,167298],{},"字典解包为关键字参数：",[24,167300,167302],{"className":31029,"code":167301,"language":31031,"meta":29,"style":29},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[31,167303,167304,167312,167338,167342,167346,167370],{"__ignoreMap":29},[34,167305,167306,167308,167310],{"class":36,"line":37},[34,167307,32598],{"class":87},[34,167309,149873],{"class":149},[34,167311,149876],{"class":40},[34,167313,167314,167316,167318,167320,167322,167324,167326,167328,167330,167332,167334,167336],{"class":36,"line":51},[34,167315,31950],{"class":63},[34,167317,801],{"class":40},[34,167319,851],{"class":87},[34,167321,1046],{"class":156},[34,167323,1690],{"class":63},[34,167325,80440],{"class":40},[34,167327,1739],{"class":63},[34,167329,5101],{"class":63},[34,167331,70856],{"class":40},[34,167333,1739],{"class":63},[34,167335,1046],{"class":156},[34,167337,807],{"class":40},[34,167339,167340],{"class":36,"line":60},[34,167341,3053],{"emptyLinePlaceholder":726},[34,167343,167344],{"class":36,"line":76},[34,167345,3053],{"emptyLinePlaceholder":726},[34,167347,167348,167350,167352,167354,167356,167358,167360,167362,167364,167366,167368],{"class":36,"line":93},[34,167349,116944],{"class":40},[34,167351,153],{"class":87},[34,167353,5101],{"class":40},[34,167355,63317],{"class":156},[34,167357,67],{"class":40},[34,167359,150389],{"class":156},[34,167361,13088],{"class":40},[34,167363,69759],{"class":156},[34,167365,67],{"class":40},[34,167367,1445],{"class":63},[34,167369,241],{"class":40},[34,167371,167372,167374,167376],{"class":36,"line":99},[34,167373,166657],{"class":40},[34,167375,11314],{"class":87},[34,167377,167378],{"class":40},"info)\n",[14,167380,167382],{"id":167381},"_78-匿名函数lambda","7.8 匿名函数lambda",[108,167384,167385,167388],{},[31,167386,167387],{},"lambda"," 用于定义简单匿名函数。",[24,167390,167392],{"className":31029,"code":167391,"language":31031,"meta":29,"style":29},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[31,167393,167394,167411],{"__ignoreMap":29},[34,167395,167396,167399,167401,167404,167407,167409],{"class":36,"line":37},[34,167397,167398],{"class":40},"add ",[34,167400,153],{"class":87},[34,167402,167403],{"class":87}," lambda",[34,167405,167406],{"class":40}," a, b: a ",[34,167408,1276],{"class":87},[34,167410,151605],{"class":40},[34,167412,167413,167415,167417,167419,167421,167423],{"class":36,"line":51},[34,167414,31066],{"class":63},[34,167416,167101],{"class":40},[34,167418,1013],{"class":63},[34,167420,13088],{"class":40},[34,167422,875],{"class":63},[34,167424,31148],{"class":40},[108,167426,167427],{},"常和排序、过滤等函数一起使用。",[108,167429,167430],{},"按分数排序：",[24,167432,167434],{"className":31029,"code":167433,"language":31031,"meta":29,"style":29},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[31,167435,167436,167444,167464,167484,167504,167508,167512,167535],{"__ignoreMap":29},[34,167437,167438,167440,167442],{"class":36,"line":37},[34,167439,160217],{"class":40},[34,167441,153],{"class":87},[34,167443,56090],{"class":40},[34,167445,167446,167448,167450,167452,167454,167456,167458,167460,167462],{"class":36,"line":51},[34,167447,148886],{"class":40},[34,167449,63317],{"class":156},[34,167451,67],{"class":40},[34,167453,150389],{"class":156},[34,167455,13088],{"class":40},[34,167457,151973],{"class":156},[34,167459,67],{"class":40},[34,167461,1782],{"class":63},[34,167463,5583],{"class":40},[34,167465,167466,167468,167470,167472,167474,167476,167478,167480,167482],{"class":36,"line":60},[34,167467,148886],{"class":40},[34,167469,63317],{"class":156},[34,167471,67],{"class":40},[34,167473,151437],{"class":156},[34,167475,13088],{"class":40},[34,167477,151973],{"class":156},[34,167479,67],{"class":40},[34,167481,1605],{"class":63},[34,167483,5583],{"class":40},[34,167485,167486,167488,167490,167492,167494,167496,167498,167500,167502],{"class":36,"line":76},[34,167487,148886],{"class":40},[34,167489,63317],{"class":156},[34,167491,67],{"class":40},[34,167493,160232],{"class":156},[34,167495,13088],{"class":40},[34,167497,151973],{"class":156},[34,167499,67],{"class":40},[34,167501,1201],{"class":63},[34,167503,5583],{"class":40},[34,167505,167506],{"class":36,"line":93},[34,167507,33897],{"class":40},[34,167509,167510],{"class":36,"line":99},[34,167511,3053],{"emptyLinePlaceholder":726},[34,167513,167514,167517,167519,167521,167523,167525,167527,167529,167531,167533],{"class":36,"line":353},[34,167515,167516],{"class":40},"students.sort(",[34,167518,154447],{"class":5869},[34,167520,154450],{"class":87},[34,167522,154453],{"class":40},[34,167524,151973],{"class":156},[34,167526,112832],{"class":40},[34,167528,164029],{"class":5869},[34,167530,153],{"class":87},[34,167532,32127],{"class":63},[34,167534,807],{"class":40},[34,167536,167537,167539],{"class":36,"line":359},[34,167538,31066],{"class":63},[34,167540,165496],{"class":40},[108,167542,167543,167544,167546],{},"如果逻辑复杂，不要硬写 ",[31,167545,167387],{},"，定义普通函数更清晰。",[14,167548,167550],{"id":167549},"_79-函数作为参数","7.9 函数作为参数",[108,167552,167553],{},"函数可以作为参数传给另一个函数。",[24,167555,167557],{"className":31029,"code":167556,"language":31031,"meta":29,"style":29},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[31,167558,167559,167567,167577,167581,167585,167595,167602,167606,167610],{"__ignoreMap":29},[34,167560,167561,167563,167565],{"class":36,"line":37},[34,167562,32598],{"class":87},[34,167564,5862],{"class":149},[34,167566,151594],{"class":40},[34,167568,167569,167571,167573,167575],{"class":36,"line":51},[34,167570,4743],{"class":87},[34,167572,11522],{"class":40},[34,167574,1276],{"class":87},[34,167576,151605],{"class":40},[34,167578,167579],{"class":36,"line":60},[34,167580,3053],{"emptyLinePlaceholder":726},[34,167582,167583],{"class":36,"line":76},[34,167584,3053],{"emptyLinePlaceholder":726},[34,167586,167587,167589,167592],{"class":36,"line":93},[34,167588,32598],{"class":87},[34,167590,167591],{"class":149}," calculate",[34,167593,167594],{"class":40},"(a, b, func):\n",[34,167596,167597,167599],{"class":36,"line":99},[34,167598,4743],{"class":87},[34,167600,167601],{"class":40}," func(a, b)\n",[34,167603,167604],{"class":36,"line":353},[34,167605,3053],{"emptyLinePlaceholder":726},[34,167607,167608],{"class":36,"line":359},[34,167609,3053],{"emptyLinePlaceholder":726},[34,167611,167612,167614,167617,167619,167621,167623],{"class":36,"line":579},[34,167613,31066],{"class":63},[34,167615,167616],{"class":40},"(calculate(",[34,167618,1241],{"class":63},[34,167620,13088],{"class":40},[34,167622,1495],{"class":63},[34,167624,167625],{"class":40},", add))\n",[108,167627,167628],{},"这种思想在排序、回调、框架中经常出现。",[14,167630,167632],{"id":167631},"_710-mapfiltersorted","7.10 map、filter、sorted",[19,167634,167636],{"id":167635},"_7101-map","7.10.1 map",[108,167638,167639,167641],{},[31,167640,74675],{}," 对每个元素执行函数。",[24,167643,167645],{"className":31029,"code":167644,"language":31031,"meta":29,"style":29},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[31,167646,167647,167671,167694],{"__ignoreMap":29},[34,167648,167649,167651,167653,167655,167657,167659,167661,167663,167665,167667,167669],{"class":36,"line":37},[34,167650,164601],{"class":40},[34,167652,153],{"class":87},[34,167654,52872],{"class":40},[34,167656,1013],{"class":63},[34,167658,13088],{"class":40},[34,167660,875],{"class":63},[34,167662,13088],{"class":40},[34,167664,869],{"class":63},[34,167666,13088],{"class":40},[34,167668,1088],{"class":63},[34,167670,33897],{"class":40},[34,167672,167673,167675,167677,167680,167682,167684,167687,167689,167691],{"class":36,"line":51},[34,167674,161807],{"class":40},[34,167676,153],{"class":87},[34,167678,167679],{"class":63}," map",[34,167681,801],{"class":40},[34,167683,167387],{"class":87},[34,167685,167686],{"class":40}," x: x ",[34,167688,1250],{"class":87},[34,167690,15408],{"class":63},[34,167692,167693],{"class":40},", nums)\n",[34,167695,167696,167698,167700,167702],{"class":36,"line":60},[34,167697,31066],{"class":63},[34,167699,801],{"class":40},[34,167701,154571],{"class":63},[34,167703,166569],{"class":40},[19,167705,167707],{"id":167706},"_7102-filter","7.10.2 filter",[108,167709,167710,167712],{},[31,167711,80681],{}," 保留满足条件的元素。",[24,167714,167716],{"className":31029,"code":167715,"language":31031,"meta":29,"style":29},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[31,167717,167718,167746,167771],{"__ignoreMap":29},[34,167719,167720,167722,167724,167726,167728,167730,167732,167734,167736,167738,167740,167742,167744],{"class":36,"line":37},[34,167721,164601],{"class":40},[34,167723,153],{"class":87},[34,167725,52872],{"class":40},[34,167727,1013],{"class":63},[34,167729,13088],{"class":40},[34,167731,875],{"class":63},[34,167733,13088],{"class":40},[34,167735,869],{"class":63},[34,167737,13088],{"class":40},[34,167739,1088],{"class":63},[34,167741,13088],{"class":40},[34,167743,1114],{"class":63},[34,167745,33897],{"class":40},[34,167747,167748,167750,167752,167755,167757,167759,167761,167763,167765,167767,167769],{"class":36,"line":51},[34,167749,161807],{"class":40},[34,167751,153],{"class":87},[34,167753,167754],{"class":63}," filter",[34,167756,801],{"class":40},[34,167758,167387],{"class":87},[34,167760,167686],{"class":40},[34,167762,1123],{"class":87},[34,167764,15408],{"class":63},[34,167766,102189],{"class":87},[34,167768,4746],{"class":63},[34,167770,167693],{"class":40},[34,167772,167773,167775,167777,167779],{"class":36,"line":60},[34,167774,31066],{"class":63},[34,167776,801],{"class":40},[34,167778,154571],{"class":63},[34,167780,166569],{"class":40},[19,167782,167784],{"id":167783},"_7103-sorted","7.10.3 sorted",[108,167786,167787,167789],{},[31,167788,165737],{}," 返回排序后的新列表。",[24,167791,167793],{"className":31029,"code":167792,"language":31031,"meta":29,"style":29},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[31,167794,167795,167803,167823,167843,167863,167867,167871,167900],{"__ignoreMap":29},[34,167796,167797,167799,167801],{"class":36,"line":37},[34,167798,160217],{"class":40},[34,167800,153],{"class":87},[34,167802,56090],{"class":40},[34,167804,167805,167807,167809,167811,167813,167815,167817,167819,167821],{"class":36,"line":51},[34,167806,148886],{"class":40},[34,167808,63317],{"class":156},[34,167810,67],{"class":40},[34,167812,150389],{"class":156},[34,167814,13088],{"class":40},[34,167816,151973],{"class":156},[34,167818,67],{"class":40},[34,167820,1782],{"class":63},[34,167822,5583],{"class":40},[34,167824,167825,167827,167829,167831,167833,167835,167837,167839,167841],{"class":36,"line":60},[34,167826,148886],{"class":40},[34,167828,63317],{"class":156},[34,167830,67],{"class":40},[34,167832,151437],{"class":156},[34,167834,13088],{"class":40},[34,167836,151973],{"class":156},[34,167838,67],{"class":40},[34,167840,1605],{"class":63},[34,167842,5583],{"class":40},[34,167844,167845,167847,167849,167851,167853,167855,167857,167859,167861],{"class":36,"line":76},[34,167846,148886],{"class":40},[34,167848,63317],{"class":156},[34,167850,67],{"class":40},[34,167852,160232],{"class":156},[34,167854,13088],{"class":40},[34,167856,151973],{"class":156},[34,167858,67],{"class":40},[34,167860,1201],{"class":63},[34,167862,5583],{"class":40},[34,167864,167865],{"class":36,"line":93},[34,167866,33897],{"class":40},[34,167868,167869],{"class":36,"line":99},[34,167870,3053],{"emptyLinePlaceholder":726},[34,167872,167873,167875,167877,167879,167882,167884,167886,167888,167890,167892,167894,167896,167898],{"class":36,"line":353},[34,167874,161807],{"class":40},[34,167876,153],{"class":87},[34,167878,164105],{"class":63},[34,167880,167881],{"class":40},"(students, ",[34,167883,154447],{"class":5869},[34,167885,154450],{"class":87},[34,167887,154453],{"class":40},[34,167889,151973],{"class":156},[34,167891,112832],{"class":40},[34,167893,164029],{"class":5869},[34,167895,153],{"class":87},[34,167897,32127],{"class":63},[34,167899,807],{"class":40},[34,167901,167902,167904],{"class":36,"line":359},[34,167903,31066],{"class":63},[34,167905,77216],{"class":40},[14,167907,167909],{"id":167908},"_711-闭包入门","7.11 闭包入门",[108,167911,167912],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[24,167914,167916],{"className":31029,"code":167915,"language":31031,"meta":29,"style":29},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[31,167917,167918,167928,167938,167949,167953,167960,167964,167968,167982],{"__ignoreMap":29},[34,167919,167920,167922,167925],{"class":36,"line":37},[34,167921,32598],{"class":87},[34,167923,167924],{"class":149}," outer",[34,167926,167927],{"class":40},"(base):\n",[34,167929,167930,167932,167935],{"class":36,"line":51},[34,167931,31452],{"class":87},[34,167933,167934],{"class":149}," inner",[34,167936,167937],{"class":40},"(num):\n",[34,167939,167940,167942,167945,167947],{"class":36,"line":60},[34,167941,15405],{"class":87},[34,167943,167944],{"class":40}," base ",[34,167946,1276],{"class":87},[34,167948,167080],{"class":40},[34,167950,167951],{"class":36,"line":76},[34,167952,3053],{"emptyLinePlaceholder":726},[34,167954,167955,167957],{"class":36,"line":93},[34,167956,4743],{"class":87},[34,167958,167959],{"class":40}," inner\n",[34,167961,167962],{"class":36,"line":99},[34,167963,3053],{"emptyLinePlaceholder":726},[34,167965,167966],{"class":36,"line":353},[34,167967,3053],{"emptyLinePlaceholder":726},[34,167969,167970,167973,167975,167978,167980],{"class":36,"line":359},[34,167971,167972],{"class":40},"add_10 ",[34,167974,153],{"class":87},[34,167976,167977],{"class":40}," outer(",[34,167979,1241],{"class":63},[34,167981,807],{"class":40},[34,167983,167984,167986,167989,167991],{"class":36,"line":579},[34,167985,31066],{"class":63},[34,167987,167988],{"class":40},"(add_10(",[34,167990,1114],{"class":63},[34,167992,31148],{"class":40},[108,167994,167995],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167997,167999],{"id":167998},"_712-装饰器入门","7.12 装饰器入门",[108,168001,168002],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[24,168004,168006],{"className":31029,"code":168005,"language":31031,"meta":29,"style":29},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[31,168007,168008,168017,168026,168037,168042,168053,168057,168064,168068,168072,168077,168085,168095,168099,168103],{"__ignoreMap":29},[34,168009,168010,168012,168014],{"class":36,"line":37},[34,168011,32598],{"class":87},[34,168013,87821],{"class":149},[34,168015,168016],{"class":40},"(func):\n",[34,168018,168019,168021,168024],{"class":36,"line":51},[34,168020,31452],{"class":87},[34,168022,168023],{"class":149}," wrapper",[34,168025,32604],{"class":40},[34,168027,168028,168030,168032,168035],{"class":36,"line":60},[34,168029,33102],{"class":63},[34,168031,801],{"class":40},[34,168033,168034],{"class":156},"\"函数开始执行\"",[34,168036,807],{"class":40},[34,168038,168039],{"class":36,"line":76},[34,168040,168041],{"class":40},"        func()\n",[34,168043,168044,168046,168048,168051],{"class":36,"line":93},[34,168045,33102],{"class":63},[34,168047,801],{"class":40},[34,168049,168050],{"class":156},"\"函数执行结束\"",[34,168052,807],{"class":40},[34,168054,168055],{"class":36,"line":99},[34,168056,3053],{"emptyLinePlaceholder":726},[34,168058,168059,168061],{"class":36,"line":353},[34,168060,4743],{"class":87},[34,168062,168063],{"class":40}," wrapper\n",[34,168065,168066],{"class":36,"line":359},[34,168067,3053],{"emptyLinePlaceholder":726},[34,168069,168070],{"class":36,"line":579},[34,168071,3053],{"emptyLinePlaceholder":726},[34,168073,168074],{"class":36,"line":589},[34,168075,168076],{"class":149},"@log\n",[34,168078,168079,168081,168083],{"class":36,"line":601},[34,168080,32598],{"class":87},[34,168082,161497],{"class":149},[34,168084,32604],{"class":40},[34,168086,168087,168089,168091,168093],{"class":36,"line":613},[34,168088,31950],{"class":63},[34,168090,801],{"class":40},[34,168092,6497],{"class":156},[34,168094,807],{"class":40},[34,168096,168097],{"class":36,"line":618},[34,168098,3053],{"emptyLinePlaceholder":726},[34,168100,168101],{"class":36,"line":628},[34,168102,3053],{"emptyLinePlaceholder":726},[34,168104,168105],{"class":36,"line":640},[34,168106,161532],{"class":40},[108,168108,158775],{},[24,168110,168112],{"className":31029,"code":168111,"language":31031,"meta":29,"style":29},"say_hello = log(say_hello)\n",[31,168113,168114],{"__ignoreMap":29},[34,168115,168116,168119,168121],{"class":36,"line":37},[34,168117,168118],{"class":40},"say_hello ",[34,168120,153],{"class":87},[34,168122,168123],{"class":40}," log(say_hello)\n",[108,168125,168126],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168128,168130],{"id":168129},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[24,168132,168134],{"className":31029,"code":168133,"language":31031,"meta":29,"style":29},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[31,168135,168136,168144,168161,168171,168190,168200,168207,168211,168217,168221,168225,168229,168237,168247,168251,168255],{"__ignoreMap":29},[34,168137,168138,168140,168142],{"class":36,"line":37},[34,168139,32598],{"class":87},[34,168141,87821],{"class":149},[34,168143,168016],{"class":40},[34,168145,168146,168148,168150,168152,168154,168157,168159],{"class":36,"line":51},[34,168147,31452],{"class":87},[34,168149,168023],{"class":149},[34,168151,801],{"class":40},[34,168153,1250],{"class":87},[34,168155,168156],{"class":40},"args, ",[34,168158,11314],{"class":87},[34,168160,167167],{"class":40},[34,168162,168163,168165,168167,168169],{"class":36,"line":60},[34,168164,33102],{"class":63},[34,168166,801],{"class":40},[34,168168,168034],{"class":156},[34,168170,807],{"class":40},[34,168172,168173,168176,168178,168181,168183,168185,168187],{"class":36,"line":76},[34,168174,168175],{"class":40},"        result ",[34,168177,153],{"class":87},[34,168179,168180],{"class":40}," func(",[34,168182,1250],{"class":87},[34,168184,168156],{"class":40},[34,168186,11314],{"class":87},[34,168188,168189],{"class":40},"kwargs)\n",[34,168191,168192,168194,168196,168198],{"class":36,"line":93},[34,168193,33102],{"class":63},[34,168195,801],{"class":40},[34,168197,168050],{"class":156},[34,168199,807],{"class":40},[34,168201,168202,168204],{"class":36,"line":99},[34,168203,15405],{"class":87},[34,168205,168206],{"class":40}," result\n",[34,168208,168209],{"class":36,"line":353},[34,168210,3053],{"emptyLinePlaceholder":726},[34,168212,168213,168215],{"class":36,"line":359},[34,168214,4743],{"class":87},[34,168216,168063],{"class":40},[34,168218,168219],{"class":36,"line":579},[34,168220,3053],{"emptyLinePlaceholder":726},[34,168222,168223],{"class":36,"line":589},[34,168224,3053],{"emptyLinePlaceholder":726},[34,168226,168227],{"class":36,"line":601},[34,168228,168076],{"class":149},[34,168230,168231,168233,168235],{"class":36,"line":613},[34,168232,32598],{"class":87},[34,168234,5862],{"class":149},[34,168236,151594],{"class":40},[34,168238,168239,168241,168243,168245],{"class":36,"line":618},[34,168240,4743],{"class":87},[34,168242,11522],{"class":40},[34,168244,1276],{"class":87},[34,168246,151605],{"class":40},[34,168248,168249],{"class":36,"line":628},[34,168250,3053],{"emptyLinePlaceholder":726},[34,168252,168253],{"class":36,"line":640},[34,168254,3053],{"emptyLinePlaceholder":726},[34,168256,168257,168259,168261,168263,168265,168267],{"class":36,"line":2301},[34,168258,31066],{"class":63},[34,168260,167101],{"class":40},[34,168262,1241],{"class":63},[34,168264,13088],{"class":40},[34,168266,1495],{"class":63},[34,168268,31148],{"class":40},[108,168270,168271,168272,101648,168274,168276],{},"这个写法使用 ",[31,168273,167033],{},[31,168275,167148],{}," 接收原函数的所有参数。",[14,168278,168280],{"id":168279},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[108,168282,123922],{},[752,168284,168285,168288,168291],{},[755,168286,168287],{},"给定一组学生数据。",[755,168289,168290],{},"封装函数，根据传入规则筛选学生。",[755,168292,168293],{},"筛选及格、优秀、未成年学生。",[108,168295,10688],{},[24,168297,168299],{"className":31029,"code":168298,"language":31031,"meta":29,"style":29},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[31,168300,168301,168309,168337,168365,168393,168397,168401,168405,168415,168423,168433,168440,168445,168451,168455,168459,168483,168506,168529,168533,168540,168547],{"__ignoreMap":29},[34,168302,168303,168305,168307],{"class":36,"line":37},[34,168304,160217],{"class":40},[34,168306,153],{"class":87},[34,168308,56090],{"class":40},[34,168310,168311,168313,168315,168317,168319,168321,168323,168325,168327,168329,168331,168333,168335],{"class":36,"line":51},[34,168312,148886],{"class":40},[34,168314,63317],{"class":156},[34,168316,67],{"class":40},[34,168318,150389],{"class":156},[34,168320,13088],{"class":40},[34,168322,69759],{"class":156},[34,168324,67],{"class":40},[34,168326,1445],{"class":63},[34,168328,13088],{"class":40},[34,168330,151973],{"class":156},[34,168332,67],{"class":40},[34,168334,1782],{"class":63},[34,168336,5583],{"class":40},[34,168338,168339,168341,168343,168345,168347,168349,168351,168353,168355,168357,168359,168361,168363],{"class":36,"line":60},[34,168340,148886],{"class":40},[34,168342,63317],{"class":156},[34,168344,67],{"class":40},[34,168346,151437],{"class":156},[34,168348,13088],{"class":40},[34,168350,69759],{"class":156},[34,168352,67],{"class":40},[34,168354,1420],{"class":63},[34,168356,13088],{"class":40},[34,168358,151973],{"class":156},[34,168360,67],{"class":40},[34,168362,1605],{"class":63},[34,168364,5583],{"class":40},[34,168366,168367,168369,168371,168373,168375,168377,168379,168381,168383,168385,168387,168389,168391],{"class":36,"line":76},[34,168368,148886],{"class":40},[34,168370,63317],{"class":156},[34,168372,67],{"class":40},[34,168374,160232],{"class":156},[34,168376,13088],{"class":40},[34,168378,69759],{"class":156},[34,168380,67],{"class":40},[34,168382,1470],{"class":63},[34,168384,13088],{"class":40},[34,168386,151973],{"class":156},[34,168388,67],{"class":40},[34,168390,1676],{"class":63},[34,168392,5583],{"class":40},[34,168394,168395],{"class":36,"line":93},[34,168396,33897],{"class":40},[34,168398,168399],{"class":36,"line":99},[34,168400,3053],{"emptyLinePlaceholder":726},[34,168402,168403],{"class":36,"line":353},[34,168404,3053],{"emptyLinePlaceholder":726},[34,168406,168407,168409,168412],{"class":36,"line":359},[34,168408,32598],{"class":87},[34,168410,168411],{"class":149}," filter_students",[34,168413,168414],{"class":40},"(students, condition):\n",[34,168416,168417,168419,168421],{"class":36,"line":579},[34,168418,161724],{"class":40},[34,168420,153],{"class":87},[34,168422,52484],{"class":40},[34,168424,168425,168427,168429,168431],{"class":36,"line":589},[34,168426,3854],{"class":87},[34,168428,152638],{"class":40},[34,168430,26695],{"class":87},[34,168432,152643],{"class":40},[34,168434,168435,168437],{"class":36,"line":601},[34,168436,3150],{"class":87},[34,168438,168439],{"class":40}," condition(student):\n",[34,168441,168442],{"class":36,"line":613},[34,168443,168444],{"class":40},"            result.append(student)\n",[34,168446,168447,168449],{"class":36,"line":618},[34,168448,4743],{"class":87},[34,168450,168206],{"class":40},[34,168452,168453],{"class":36,"line":628},[34,168454,3053],{"emptyLinePlaceholder":726},[34,168456,168457],{"class":36,"line":640},[34,168458,3053],{"emptyLinePlaceholder":726},[34,168460,168461,168463,168465,168468,168470,168473,168475,168477,168479,168481],{"class":36,"line":2301},[34,168462,166202],{"class":40},[34,168464,153],{"class":87},[34,168466,168467],{"class":40}," filter_students(students, ",[34,168469,167387],{"class":87},[34,168471,168472],{"class":40}," s: s[",[34,168474,151973],{"class":156},[34,168476,5096],{"class":40},[34,168478,2364],{"class":87},[34,168480,158338],{"class":63},[34,168482,807],{"class":40},[34,168484,168485,168488,168490,168492,168494,168496,168498,168500,168502,168504],{"class":36,"line":2307},[34,168486,168487],{"class":40},"excellent ",[34,168489,153],{"class":87},[34,168491,168467],{"class":40},[34,168493,167387],{"class":87},[34,168495,168472],{"class":40},[34,168497,151973],{"class":156},[34,168499,5096],{"class":40},[34,168501,2364],{"class":87},[34,168503,158289],{"class":63},[34,168505,807],{"class":40},[34,168507,168508,168511,168513,168515,168517,168519,168521,168523,168525,168527],{"class":36,"line":2328},[34,168509,168510],{"class":40},"under_age ",[34,168512,153],{"class":87},[34,168514,168467],{"class":40},[34,168516,167387],{"class":87},[34,168518,168472],{"class":40},[34,168520,69759],{"class":156},[34,168522,5096],{"class":40},[34,168524,41],{"class":87},[34,168526,156786],{"class":63},[34,168528,807],{"class":40},[34,168530,168531],{"class":36,"line":2333},[34,168532,3053],{"emptyLinePlaceholder":726},[34,168534,168535,168537],{"class":36,"line":2347},[34,168536,31066],{"class":63},[34,168538,168539],{"class":40},"(passed)\n",[34,168541,168542,168544],{"class":36,"line":2352},[34,168543,31066],{"class":63},[34,168545,168546],{"class":40},"(excellent)\n",[34,168548,168549,168551],{"class":36,"line":2381},[34,168550,31066],{"class":63},[34,168552,168553],{"class":40},"(under_age)\n",[14,168555,168557],{"id":168556},"_715-易错点","7.15 易错点",[752,168559,168560,168563,168571,168576,168587],{},[755,168561,168562],{},"默认参数不要写可变对象。",[755,168564,168565,168567,168568,168570],{},[31,168566,167033],{}," 是元组，",[31,168569,167148],{}," 是字典。",[755,168572,168573,168575],{},[31,168574,167387],{}," 只适合简单表达式。",[755,168577,168578,101648,168580,168582,168583,168586],{},[31,168579,74675],{},[31,168581,80681],{}," 的结果是迭代器，常用 ",[31,168584,168585],{},"list()"," 转换查看。",[755,168588,168589],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168591,168593],{"id":168592},"_716-本章练习","7.16 本章练习",[752,168595,168596,168603,168609,168614,168619],{},[755,168597,168598,168599,168602],{},"写函数 ",[31,168600,168601],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[755,168604,168598,168605,168608],{},[31,168606,168607],{},"print_user(**kwargs)","，输出用户所有字段。",[755,168610,104996,168611,168613],{},[31,168612,167387],{}," 对学生列表按年龄排序。",[755,168615,104996,168616,168618],{},[31,168617,80681],{}," 找出成绩不及格的学生。",[755,168620,168621],{},"写一个装饰器，统计函数执行前后的提示信息。",[45,168623,168624],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":168626},[168627,168628,168629,168630,168631,168632,168636,168637,168638,168639,168644,168645,168646,168647,168648,168649],{"id":166485,"depth":51,"text":166486},{"id":166599,"depth":51,"text":166600},{"id":166688,"depth":51,"text":166689},{"id":166750,"depth":51,"text":166751},{"id":166896,"depth":51,"text":166897},{"id":167023,"depth":51,"text":167024,"children":168633},[168634,168635],{"id":167027,"depth":60,"text":167028},{"id":167142,"depth":60,"text":167143},{"id":167223,"depth":51,"text":167224},{"id":167381,"depth":51,"text":167382},{"id":167549,"depth":51,"text":167550},{"id":167631,"depth":51,"text":167632,"children":168640},[168641,168642,168643],{"id":167635,"depth":60,"text":167636},{"id":167706,"depth":60,"text":167707},{"id":167783,"depth":60,"text":167784},{"id":167908,"depth":51,"text":167909},{"id":167998,"depth":51,"text":167999},{"id":168129,"depth":51,"text":168130},{"id":168279,"depth":51,"text":168280},{"id":168556,"depth":51,"text":168557},{"id":168592,"depth":51,"text":168593},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166477,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168656,"title":168657,"body":168658,"description":723,"extension":724,"meta":171177,"navigation":726,"path":171178,"seo":171179,"stem":171180,"__hash__":171181},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168659,"toc":171152},[168660,168663,168667,168670,168673,168704,168708,168712,168715,168742,168746,168749,168800,168803,168818,168821,168856,168860,168862,168886,168889,168949,168953,168957,168960,169017,169020,169040,169044,169047,169110,169114,169117,169173,169180,169204,169208,169211,169274,169278,169283,169334,169337,169341,169346,169413,169416,169498,169502,169507,169558,169561,169565,169568,169571,169579,169582,169628,169631,169677,169681,169687,169731,169734,169780,169783,169823,169826,169887,169891,169894,169984,169987,170129,170132,170199,170203,170206,170209,170350,170353,170431,170434,170610,170614,170616,170627,170629,170828,170832,171076,171080,171114,171118,171149],[10,168661,168657],{"id":168662},"_8-文件操作",[14,168664,168666],{"id":168665},"_81-文件操作的意义","8.1 文件操作的意义",[108,168668,168669],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[108,168671,168672],{},"常见文件类型：",[752,168674,168675,168681,168687,168693,168699],{},[755,168676,168677,168680],{},[31,168678,168679],{},".txt","：普通文本。",[755,168682,168683,168686],{},[31,168684,168685],{},".csv","：表格文本。",[755,168688,168689,168692],{},[31,168690,168691],{},".json","：结构化数据。",[755,168694,168695,168698],{},[31,168696,168697],{},".log","：日志文件。",[755,168700,168701,168703],{},[31,168702,146853],{},"：Python 源代码。",[14,168705,168707],{"id":168706},"_82-路径","8.2 路径",[19,168709,168711],{"id":168710},"_821-相对路径","8.2.1 相对路径",[108,168713,168714],{},"相对当前运行目录：",[24,168716,168718],{"className":31029,"code":168717,"language":31031,"meta":29,"style":29},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[31,168719,168720],{"__ignoreMap":29},[34,168721,168722,168724,168726,168728,168730,168732,168734,168736,168738,168740],{"class":36,"line":37},[34,168723,87545],{"class":63},[34,168725,801],{"class":40},[34,168727,147297],{"class":156},[34,168729,13088],{"class":40},[34,168731,147302],{"class":156},[34,168733,13088],{"class":40},[34,168735,147307],{"class":5869},[34,168737,153],{"class":87},[34,168739,147312],{"class":156},[34,168741,807],{"class":40},[19,168743,168745],{"id":168744},"_822-绝对路径","8.2.2 绝对路径",[108,168747,168748],{},"从根目录或盘符开始：",[24,168750,168752],{"className":31029,"code":168751,"language":31031,"meta":29,"style":29},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[31,168753,168754,168777],{"__ignoreMap":29},[34,168755,168756,168758,168760,168763,168765,168767,168769,168771,168773,168775],{"class":36,"line":37},[34,168757,87545],{"class":63},[34,168759,801],{"class":40},[34,168761,168762],{"class":156},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[34,168764,13088],{"class":40},[34,168766,147302],{"class":156},[34,168768,13088],{"class":40},[34,168770,147307],{"class":5869},[34,168772,153],{"class":87},[34,168774,147312],{"class":156},[34,168776,807],{"class":40},[34,168778,168779,168781,168783,168786,168788,168790,168792,168794,168796,168798],{"class":36,"line":51},[34,168780,87545],{"class":63},[34,168782,801],{"class":40},[34,168784,168785],{"class":156},"\"D:\u002Fdata\u002Fdata.txt\"",[34,168787,13088],{"class":40},[34,168789,147302],{"class":156},[34,168791,13088],{"class":40},[34,168793,147307],{"class":5869},[34,168795,153],{"class":87},[34,168797,147312],{"class":156},[34,168799,807],{"class":40},[108,168801,168802],{},"Windows 路径建议写成：",[24,168804,168806],{"className":31029,"code":168805,"language":31031,"meta":29,"style":29},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[31,168807,168808],{"__ignoreMap":29},[34,168809,168810,168813,168815],{"class":36,"line":37},[34,168811,168812],{"class":40},"path ",[34,168814,153],{"class":87},[34,168816,168817],{"class":156}," \"D:\u002Fdata\u002Fdata.txt\"\n",[108,168819,168820],{},"或原始字符串：",[24,168822,168824],{"className":31029,"code":168823,"language":31031,"meta":29,"style":29},"path = r\"D:\\data\\data.txt\"\n",[31,168825,168826],{"__ignoreMap":29},[34,168827,168828,168830,168832,168834,168836,168839,168842,168845,168847,168849,168851,168854],{"class":36,"line":37},[34,168829,168812],{"class":40},[34,168831,153],{"class":87},[34,168833,17773],{"class":87},[34,168835,1046],{"class":156},[34,168837,168838],{"class":48628},"D:",[34,168840,168841],{"class":63},"\\d",[34,168843,168844],{"class":48628},"ata",[34,168846,168841],{"class":63},[34,168848,168844],{"class":48628},[34,168850,1353],{"class":63},[34,168852,168853],{"class":48628},"txt",[34,168855,25786],{"class":156},[14,168857,168859],{"id":168858},"_83-open函数","8.3 open函数",[108,168861,5834],{},[24,168863,168865],{"className":31029,"code":168864,"language":31031,"meta":29,"style":29},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[31,168866,168867],{"__ignoreMap":29},[34,168868,168869,168871,168873,168875,168878,168880,168882,168884],{"class":36,"line":37},[34,168870,46005],{"class":5869},[34,168872,14217],{"class":87},[34,168874,147292],{"class":63},[34,168876,168877],{"class":40},"(文件路径, 打开模式, ",[34,168879,147307],{"class":5869},[34,168881,153],{"class":87},[34,168883,147312],{"class":156},[34,168885,807],{"class":40},[108,168887,168888],{},"常见模式：",[934,168890,168891,168900],{},[937,168892,168893],{},[940,168894,168895,168898],{},[943,168896,168897],{},"模式",[943,168899,26521],{},[980,168901,168902,168911,168920,168929,168939],{},[940,168903,168904,168908],{},[985,168905,168906],{},[31,168907,1465],{},[985,168909,168910],{},"只读，文件不存在会报错",[940,168912,168913,168917],{},[985,168914,168915],{},[31,168916,1590],{},[985,168918,168919],{},"只写，文件不存在会创建，存在会清空",[940,168921,168922,168926],{},[985,168923,168924],{},[31,168925,520],{},[985,168927,168928],{},"追加，文件不存在会创建",[940,168930,168931,168936],{},[985,168932,168933],{},[31,168934,168935],{},"rb",[985,168937,168938],{},"二进制只读",[940,168940,168941,168946],{},[985,168942,168943],{},[31,168944,168945],{},"wb",[985,168947,168948],{},"二进制只写",[14,168950,168952],{"id":168951},"_84-读取文件","8.4 读取文件",[19,168954,168956],{"id":168955},"_841-read","8.4.1 read",[108,168958,168959],{},"一次读取全部内容：",[24,168961,168963],{"className":31029,"code":168962,"language":31031,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[31,168964,168965,168991,169003,169010],{"__ignoreMap":29},[34,168966,168967,168969,168971,168973,168975,168977,168979,168981,168983,168985,168987,168989],{"class":36,"line":37},[34,168968,46005],{"class":5869},[34,168970,14217],{"class":87},[34,168972,147292],{"class":63},[34,168974,801],{"class":40},[34,168976,147297],{"class":156},[34,168978,13088],{"class":40},[34,168980,147302],{"class":156},[34,168982,13088],{"class":40},[34,168984,147307],{"class":5869},[34,168986,153],{"class":87},[34,168988,147312],{"class":156},[34,168990,807],{"class":40},[34,168992,168993,168996,168998,169000],{"class":36,"line":51},[34,168994,168995],{"class":40},"content ",[34,168997,153],{"class":87},[34,168999,148654],{"class":5869},[34,169001,169002],{"class":40},".read()\n",[34,169004,169005,169007],{"class":36,"line":60},[34,169006,31066],{"class":63},[34,169008,169009],{"class":40},"(content)\n",[34,169011,169012,169014],{"class":36,"line":76},[34,169013,46005],{"class":5869},[34,169015,169016],{"class":40},".close()\n",[108,169018,169019],{},"可以指定读取字符数：",[24,169021,169023],{"className":31029,"code":169022,"language":31031,"meta":29,"style":29},"content = file.read(10)\n",[31,169024,169025],{"__ignoreMap":29},[34,169026,169027,169029,169031,169033,169036,169038],{"class":36,"line":37},[34,169028,168995],{"class":40},[34,169030,153],{"class":87},[34,169032,148654],{"class":5869},[34,169034,169035],{"class":40},".read(",[34,169037,1241],{"class":63},[34,169039,807],{"class":40},[19,169041,169043],{"id":169042},"_842-readline","8.4.2 readline",[108,169045,169046],{},"一次读取一行：",[24,169048,169050],{"className":31029,"code":169049,"language":31031,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[31,169051,169052,169078,169082,169093,169100,169104],{"__ignoreMap":29},[34,169053,169054,169056,169058,169060,169062,169064,169066,169068,169070,169072,169074,169076],{"class":36,"line":37},[34,169055,46005],{"class":5869},[34,169057,14217],{"class":87},[34,169059,147292],{"class":63},[34,169061,801],{"class":40},[34,169063,147297],{"class":156},[34,169065,13088],{"class":40},[34,169067,147302],{"class":156},[34,169069,13088],{"class":40},[34,169071,147307],{"class":5869},[34,169073,153],{"class":87},[34,169075,147312],{"class":156},[34,169077,807],{"class":40},[34,169079,169080],{"class":36,"line":51},[34,169081,3053],{"emptyLinePlaceholder":726},[34,169083,169084,169086,169088,169090],{"class":36,"line":60},[34,169085,147753],{"class":40},[34,169087,153],{"class":87},[34,169089,148654],{"class":5869},[34,169091,169092],{"class":40},".readline()\n",[34,169094,169095,169097],{"class":36,"line":76},[34,169096,31066],{"class":63},[34,169098,169099],{"class":40},"(line)\n",[34,169101,169102],{"class":36,"line":93},[34,169103,3053],{"emptyLinePlaceholder":726},[34,169105,169106,169108],{"class":36,"line":99},[34,169107,46005],{"class":5869},[34,169109,169016],{"class":40},[19,169111,169113],{"id":169112},"_843-readlines","8.4.3 readlines",[108,169115,169116],{},"读取所有行，返回列表：",[24,169118,169120],{"className":31029,"code":169119,"language":31031,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[31,169121,169122,169148,169160,169167],{"__ignoreMap":29},[34,169123,169124,169126,169128,169130,169132,169134,169136,169138,169140,169142,169144,169146],{"class":36,"line":37},[34,169125,46005],{"class":5869},[34,169127,14217],{"class":87},[34,169129,147292],{"class":63},[34,169131,801],{"class":40},[34,169133,147297],{"class":156},[34,169135,13088],{"class":40},[34,169137,147302],{"class":156},[34,169139,13088],{"class":40},[34,169141,147307],{"class":5869},[34,169143,153],{"class":87},[34,169145,147312],{"class":156},[34,169147,807],{"class":40},[34,169149,169150,169153,169155,169157],{"class":36,"line":51},[34,169151,169152],{"class":40},"lines ",[34,169154,153],{"class":87},[34,169156,148654],{"class":5869},[34,169158,169159],{"class":40},".readlines()\n",[34,169161,169162,169164],{"class":36,"line":60},[34,169163,31066],{"class":63},[34,169165,169166],{"class":40},"(lines)\n",[34,169168,169169,169171],{"class":36,"line":76},[34,169170,46005],{"class":5869},[34,169172,169016],{"class":40},[108,169174,169175,169176,169179],{},"每一行通常带有换行符，可以用 ",[31,169177,169178],{},"strip()"," 去掉：",[24,169181,169183],{"className":31029,"code":169182,"language":31031,"meta":29,"style":29},"for line in lines:\n    print(line.strip())\n",[31,169184,169185,169197],{"__ignoreMap":29},[34,169186,169187,169189,169192,169194],{"class":36,"line":37},[34,169188,3678],{"class":87},[34,169190,169191],{"class":40}," line ",[34,169193,26695],{"class":87},[34,169195,169196],{"class":40}," lines:\n",[34,169198,169199,169201],{"class":36,"line":51},[34,169200,31950],{"class":63},[34,169202,169203],{"class":40},"(line.strip())\n",[19,169205,169207],{"id":169206},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[108,169209,169210],{},"推荐读取大文件时使用：",[24,169212,169214],{"className":31029,"code":169213,"language":31031,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[31,169215,169216,169242,169246,169258,169264,169268],{"__ignoreMap":29},[34,169217,169218,169220,169222,169224,169226,169228,169230,169232,169234,169236,169238,169240],{"class":36,"line":37},[34,169219,46005],{"class":5869},[34,169221,14217],{"class":87},[34,169223,147292],{"class":63},[34,169225,801],{"class":40},[34,169227,147297],{"class":156},[34,169229,13088],{"class":40},[34,169231,147302],{"class":156},[34,169233,13088],{"class":40},[34,169235,147307],{"class":5869},[34,169237,153],{"class":87},[34,169239,147312],{"class":156},[34,169241,807],{"class":40},[34,169243,169244],{"class":36,"line":51},[34,169245,3053],{"emptyLinePlaceholder":726},[34,169247,169248,169250,169252,169254,169256],{"class":36,"line":60},[34,169249,3678],{"class":87},[34,169251,169191],{"class":40},[34,169253,26695],{"class":87},[34,169255,148654],{"class":5869},[34,169257,4392],{"class":40},[34,169259,169260,169262],{"class":36,"line":76},[34,169261,31950],{"class":63},[34,169263,169203],{"class":40},[34,169265,169266],{"class":36,"line":93},[34,169267,3053],{"emptyLinePlaceholder":726},[34,169269,169270,169272],{"class":36,"line":99},[34,169271,46005],{"class":5869},[34,169273,169016],{"class":40},[14,169275,169277],{"id":169276},"_85-with语句","8.5 with语句",[108,169279,169280,169282],{},[31,169281,108463],{}," 会自动关闭文件，推荐使用。",[24,169284,169286],{"className":31029,"code":169285,"language":31031,"meta":29,"style":29},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[31,169287,169288,169318,169328],{"__ignoreMap":29},[34,169289,169290,169292,169294,169296,169298,169300,169302,169304,169306,169308,169310,169312,169314,169316],{"class":36,"line":37},[34,169291,108463],{"class":87},[34,169293,147292],{"class":63},[34,169295,801],{"class":40},[34,169297,147297],{"class":156},[34,169299,13088],{"class":40},[34,169301,147302],{"class":156},[34,169303,13088],{"class":40},[34,169305,147307],{"class":5869},[34,169307,153],{"class":87},[34,169309,147312],{"class":156},[34,169311,14367],{"class":40},[34,169313,32034],{"class":87},[34,169315,148654],{"class":5869},[34,169317,4392],{"class":40},[34,169319,169320,169322,169324,169326],{"class":36,"line":51},[34,169321,147324],{"class":40},[34,169323,153],{"class":87},[34,169325,148654],{"class":5869},[34,169327,169002],{"class":40},[34,169329,169330,169332],{"class":36,"line":60},[34,169331,31950],{"class":63},[34,169333,169009],{"class":40},[108,169335,169336],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169338,169340],{"id":169339},"_86-写入文件","8.6 写入文件",[108,169342,169343,169345],{},[31,169344,1590],{}," 模式会清空原文件。",[24,169347,169349],{"className":31029,"code":169348,"language":31031,"meta":29,"style":29},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[31,169350,169351,169381,169398],{"__ignoreMap":29},[34,169352,169353,169355,169357,169359,169361,169363,169365,169367,169369,169371,169373,169375,169377,169379],{"class":36,"line":37},[34,169354,108463],{"class":87},[34,169356,147292],{"class":63},[34,169358,801],{"class":40},[34,169360,147297],{"class":156},[34,169362,13088],{"class":40},[34,169364,152477],{"class":156},[34,169366,13088],{"class":40},[34,169368,147307],{"class":5869},[34,169370,153],{"class":87},[34,169372,147312],{"class":156},[34,169374,14367],{"class":40},[34,169376,32034],{"class":87},[34,169378,148654],{"class":5869},[34,169380,4392],{"class":40},[34,169382,169383,169386,169389,169392,169394,169396],{"class":36,"line":51},[34,169384,169385],{"class":5869},"    file",[34,169387,169388],{"class":40},".write(",[34,169390,169391],{"class":156},"\"hello",[34,169393,157026],{"class":63},[34,169395,1046],{"class":156},[34,169397,807],{"class":40},[34,169399,169400,169402,169404,169407,169409,169411],{"class":36,"line":60},[34,169401,169385],{"class":5869},[34,169403,169388],{"class":40},[34,169405,169406],{"class":156},"\"python",[34,169408,157026],{"class":63},[34,169410,1046],{"class":156},[34,169412,807],{"class":40},[108,169414,169415],{},"写入多行：",[24,169417,169419],{"className":31029,"code":169418,"language":31031,"meta":29,"style":29},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[31,169420,169421,169456,169460,169491],{"__ignoreMap":29},[34,169422,169423,169425,169427,169429,169432,169434,169436,169438,169441,169443,169445,169447,169450,169452,169454],{"class":36,"line":37},[34,169424,169152],{"class":40},[34,169426,153],{"class":87},[34,169428,52872],{"class":40},[34,169430,169431],{"class":156},"\"小明,18",[34,169433,157026],{"class":63},[34,169435,1046],{"class":156},[34,169437,13088],{"class":40},[34,169439,169440],{"class":156},"\"小红,17",[34,169442,157026],{"class":63},[34,169444,1046],{"class":156},[34,169446,13088],{"class":40},[34,169448,169449],{"class":156},"\"小刚,19",[34,169451,157026],{"class":63},[34,169453,1046],{"class":156},[34,169455,33897],{"class":40},[34,169457,169458],{"class":36,"line":51},[34,169459,3053],{"emptyLinePlaceholder":726},[34,169461,169462,169464,169466,169468,169471,169473,169475,169477,169479,169481,169483,169485,169487,169489],{"class":36,"line":60},[34,169463,108463],{"class":87},[34,169465,147292],{"class":63},[34,169467,801],{"class":40},[34,169469,169470],{"class":156},"\"students.txt\"",[34,169472,13088],{"class":40},[34,169474,152477],{"class":156},[34,169476,13088],{"class":40},[34,169478,147307],{"class":5869},[34,169480,153],{"class":87},[34,169482,147312],{"class":156},[34,169484,14367],{"class":40},[34,169486,32034],{"class":87},[34,169488,148654],{"class":5869},[34,169490,4392],{"class":40},[34,169492,169493,169495],{"class":36,"line":76},[34,169494,169385],{"class":5869},[34,169496,169497],{"class":40},".writelines(lines)\n",[14,169499,169501],{"id":169500},"_87-追加文件","8.7 追加文件",[108,169503,169504,169506],{},[31,169505,520],{}," 模式不会清空原内容，而是在末尾追加。",[24,169508,169510],{"className":31029,"code":169509,"language":31031,"meta":29,"style":29},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[31,169511,169512,169543],{"__ignoreMap":29},[34,169513,169514,169516,169518,169520,169523,169525,169527,169529,169531,169533,169535,169537,169539,169541],{"class":36,"line":37},[34,169515,108463],{"class":87},[34,169517,147292],{"class":63},[34,169519,801],{"class":40},[34,169521,169522],{"class":156},"\"log.txt\"",[34,169524,13088],{"class":40},[34,169526,165826],{"class":156},[34,169528,13088],{"class":40},[34,169530,147307],{"class":5869},[34,169532,153],{"class":87},[34,169534,147312],{"class":156},[34,169536,14367],{"class":40},[34,169538,32034],{"class":87},[34,169540,148654],{"class":5869},[34,169542,4392],{"class":40},[34,169544,169545,169547,169549,169552,169554,169556],{"class":36,"line":51},[34,169546,169385],{"class":5869},[34,169548,169388],{"class":40},[34,169550,169551],{"class":156},"\"程序启动",[34,169553,157026],{"class":63},[34,169555,1046],{"class":156},[34,169557,807],{"class":40},[108,169559,169560],{},"日志类文件常用追加模式。",[14,169562,169564],{"id":169563},"_88-文件编码","8.8 文件编码",[108,169566,169567],{},"编码决定文字如何保存为字节。",[108,169569,169570],{},"常见编码：",[752,169572,169573,169576],{},[755,169574,169575],{},"UTF-8：推荐。",[755,169577,169578],{},"GBK：部分 Windows 中文文件常见。",[108,169580,169581],{},"读取文件乱码时，可以尝试：",[24,169583,169585],{"className":31029,"code":169584,"language":31031,"meta":29,"style":29},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[31,169586,169587,169618],{"__ignoreMap":29},[34,169588,169589,169591,169593,169595,169597,169599,169601,169603,169605,169607,169610,169612,169614,169616],{"class":36,"line":37},[34,169590,108463],{"class":87},[34,169592,147292],{"class":63},[34,169594,801],{"class":40},[34,169596,147297],{"class":156},[34,169598,13088],{"class":40},[34,169600,147302],{"class":156},[34,169602,13088],{"class":40},[34,169604,147307],{"class":5869},[34,169606,153],{"class":87},[34,169608,169609],{"class":156},"\"gbk\"",[34,169611,14367],{"class":40},[34,169613,32034],{"class":87},[34,169615,148654],{"class":5869},[34,169617,4392],{"class":40},[34,169619,169620,169622,169624,169626],{"class":36,"line":51},[34,169621,147324],{"class":40},[34,169623,153],{"class":87},[34,169625,148654],{"class":5869},[34,169627,169002],{"class":40},[108,169629,169630],{},"写文件时建议统一 UTF-8：",[24,169632,169634],{"className":31029,"code":169633,"language":31031,"meta":29,"style":29},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[31,169635,169636,169666],{"__ignoreMap":29},[34,169637,169638,169640,169642,169644,169646,169648,169650,169652,169654,169656,169658,169660,169662,169664],{"class":36,"line":37},[34,169639,108463],{"class":87},[34,169641,147292],{"class":63},[34,169643,801],{"class":40},[34,169645,147297],{"class":156},[34,169647,13088],{"class":40},[34,169649,152477],{"class":156},[34,169651,13088],{"class":40},[34,169653,147307],{"class":5869},[34,169655,153],{"class":87},[34,169657,147312],{"class":156},[34,169659,14367],{"class":40},[34,169661,32034],{"class":87},[34,169663,148654],{"class":5869},[34,169665,4392],{"class":40},[34,169667,169668,169670,169672,169675],{"class":36,"line":51},[34,169669,169385],{"class":5869},[34,169671,169388],{"class":40},[34,169673,169674],{"class":156},"\"中文内容\"",[34,169676,807],{"class":40},[14,169678,169680],{"id":169679},"_89-pathlib","8.9 pathlib",[108,169682,169683,169686],{},[31,169684,169685],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[24,169688,169690],{"className":31029,"code":169689,"language":31031,"meta":29,"style":29},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[31,169691,169692,169702,169706,169724],{"__ignoreMap":29},[34,169693,169694,169696,169698,169700],{"class":36,"line":37},[34,169695,31388],{"class":87},[34,169697,108941],{"class":40},[34,169699,31043],{"class":87},[34,169701,108946],{"class":40},[34,169703,169704],{"class":36,"line":51},[34,169705,3053],{"emptyLinePlaceholder":726},[34,169707,169708,169710,169712,169714,169717,169719,169721],{"class":36,"line":60},[34,169709,168812],{"class":40},[34,169711,153],{"class":87},[34,169713,109175],{"class":40},[34,169715,169716],{"class":156},"\"data\"",[34,169718,14367],{"class":40},[34,169720,1379],{"class":87},[34,169722,169723],{"class":156}," \"students.txt\"\n",[34,169725,169726,169728],{"class":36,"line":76},[34,169727,31066],{"class":63},[34,169729,169730],{"class":40},"(path)\n",[108,169732,169733],{},"创建目录：",[24,169735,169737],{"className":31029,"code":169736,"language":31031,"meta":29,"style":29},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[31,169738,169739,169749,169753,169766],{"__ignoreMap":29},[34,169740,169741,169743,169745,169747],{"class":36,"line":37},[34,169742,31388],{"class":87},[34,169744,108941],{"class":40},[34,169746,31043],{"class":87},[34,169748,108946],{"class":40},[34,169750,169751],{"class":36,"line":51},[34,169752,3053],{"emptyLinePlaceholder":726},[34,169754,169755,169758,169760,169762,169764],{"class":36,"line":60},[34,169756,169757],{"class":40},"data_dir ",[34,169759,153],{"class":87},[34,169761,109175],{"class":40},[34,169763,169716],{"class":156},[34,169765,807],{"class":40},[34,169767,169768,169771,169774,169776,169778],{"class":36,"line":76},[34,169769,169770],{"class":40},"data_dir.mkdir(",[34,169772,169773],{"class":5869},"exist_ok",[34,169775,153],{"class":87},[34,169777,32127],{"class":63},[34,169779,807],{"class":40},[108,169781,169782],{},"判断文件是否存在：",[24,169784,169786],{"className":31029,"code":169785,"language":31031,"meta":29,"style":29},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[31,169787,169788,169801,169805,169812],{"__ignoreMap":29},[34,169789,169790,169792,169794,169796,169799],{"class":36,"line":37},[34,169791,168812],{"class":40},[34,169793,153],{"class":87},[34,169795,109175],{"class":40},[34,169797,169798],{"class":156},"\"data\u002Fstudents.txt\"",[34,169800,807],{"class":40},[34,169802,169803],{"class":36,"line":51},[34,169804,3053],{"emptyLinePlaceholder":726},[34,169806,169807,169809],{"class":36,"line":60},[34,169808,2191],{"class":87},[34,169810,169811],{"class":40}," path.exists():\n",[34,169813,169814,169816,169818,169821],{"class":36,"line":76},[34,169815,31950],{"class":63},[34,169817,801],{"class":40},[34,169819,169820],{"class":156},"\"文件存在\"",[34,169822,807],{"class":40},[108,169824,169825],{},"读写文本：",[24,169827,169829],{"className":31029,"code":169828,"language":31031,"meta":29,"style":29},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[31,169830,169831,169843,169847,169864,169881],{"__ignoreMap":29},[34,169832,169833,169835,169837,169839,169841],{"class":36,"line":37},[34,169834,168812],{"class":40},[34,169836,153],{"class":87},[34,169838,109175],{"class":40},[34,169840,147297],{"class":156},[34,169842,807],{"class":40},[34,169844,169845],{"class":36,"line":51},[34,169846,3053],{"emptyLinePlaceholder":726},[34,169848,169849,169852,169854,169856,169858,169860,169862],{"class":36,"line":60},[34,169850,169851],{"class":40},"path.write_text(",[34,169853,146377],{"class":156},[34,169855,13088],{"class":40},[34,169857,147307],{"class":5869},[34,169859,153],{"class":87},[34,169861,147312],{"class":156},[34,169863,807],{"class":40},[34,169865,169866,169868,169870,169873,169875,169877,169879],{"class":36,"line":76},[34,169867,168995],{"class":40},[34,169869,153],{"class":87},[34,169871,169872],{"class":40}," path.read_text(",[34,169874,147307],{"class":5869},[34,169876,153],{"class":87},[34,169878,147312],{"class":156},[34,169880,807],{"class":40},[34,169882,169883,169885],{"class":36,"line":93},[34,169884,31066],{"class":63},[34,169886,169009],{"class":40},[14,169888,169890],{"id":169889},"_810-json文件","8.10 JSON文件",[108,169892,169893],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[24,169895,169897],{"className":31029,"code":169896,"language":31031,"meta":29,"style":29},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[31,169898,169899,169905,169909,169917,169927,169937,169945,169949,169953,169978],{"__ignoreMap":29},[34,169900,169901,169903],{"class":36,"line":37},[34,169902,31043],{"class":87},[34,169904,147592],{"class":40},[34,169906,169907],{"class":36,"line":51},[34,169908,3053],{"emptyLinePlaceholder":726},[34,169910,169911,169913,169915],{"class":36,"line":60},[34,169912,149982],{"class":40},[34,169914,153],{"class":87},[34,169916,57],{"class":40},[34,169918,169919,169921,169923,169925],{"class":36,"line":76},[34,169920,147521],{"class":156},[34,169922,67],{"class":40},[34,169924,150389],{"class":156},[34,169926,32117],{"class":40},[34,169928,169929,169931,169933,169935],{"class":36,"line":93},[34,169930,165038],{"class":156},[34,169932,67],{"class":40},[34,169934,1445],{"class":63},[34,169936,32117],{"class":40},[34,169938,169939,169941,169943],{"class":36,"line":99},[34,169940,165049],{"class":156},[34,169942,67],{"class":40},[34,169944,165054],{"class":63},[34,169946,169947],{"class":36,"line":353},[34,169948,241],{"class":40},[34,169950,169951],{"class":36,"line":359},[34,169952,3053],{"emptyLinePlaceholder":726},[34,169954,169955,169957,169959,169962,169964,169966,169968,169970,169972,169974,169976],{"class":36,"line":579},[34,169956,156945],{"class":40},[34,169958,153],{"class":87},[34,169960,169961],{"class":40}," json.dumps(student, ",[34,169963,147638],{"class":5869},[34,169965,153],{"class":87},[34,169967,34638],{"class":63},[34,169969,13088],{"class":40},[34,169971,152513],{"class":5869},[34,169973,153],{"class":87},[34,169975,875],{"class":63},[34,169977,807],{"class":40},[34,169979,169980,169982],{"class":36,"line":589},[34,169981,31066],{"class":63},[34,169983,164572],{"class":40},[108,169985,169986],{},"写入 JSON 文件：",[24,169988,169990],{"className":31029,"code":169989,"language":31031,"meta":29,"style":29},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[31,169991,169992,169998,170002,170010,170038,170066,170070,170074,170104],{"__ignoreMap":29},[34,169993,169994,169996],{"class":36,"line":37},[34,169995,31043],{"class":87},[34,169997,147592],{"class":40},[34,169999,170000],{"class":36,"line":51},[34,170001,3053],{"emptyLinePlaceholder":726},[34,170003,170004,170006,170008],{"class":36,"line":60},[34,170005,160217],{"class":40},[34,170007,153],{"class":87},[34,170009,56090],{"class":40},[34,170011,170012,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036],{"class":36,"line":76},[34,170013,148886],{"class":40},[34,170015,63317],{"class":156},[34,170017,67],{"class":40},[34,170019,150389],{"class":156},[34,170021,13088],{"class":40},[34,170023,69759],{"class":156},[34,170025,67],{"class":40},[34,170027,1445],{"class":63},[34,170029,13088],{"class":40},[34,170031,151973],{"class":156},[34,170033,67],{"class":40},[34,170035,1782],{"class":63},[34,170037,5583],{"class":40},[34,170039,170040,170042,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062,170064],{"class":36,"line":93},[34,170041,148886],{"class":40},[34,170043,63317],{"class":156},[34,170045,67],{"class":40},[34,170047,151437],{"class":156},[34,170049,13088],{"class":40},[34,170051,69759],{"class":156},[34,170053,67],{"class":40},[34,170055,1420],{"class":63},[34,170057,13088],{"class":40},[34,170059,151973],{"class":156},[34,170061,67],{"class":40},[34,170063,1605],{"class":63},[34,170065,5583],{"class":40},[34,170067,170068],{"class":36,"line":99},[34,170069,33897],{"class":40},[34,170071,170072],{"class":36,"line":353},[34,170073,3053],{"emptyLinePlaceholder":726},[34,170075,170076,170078,170080,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100,170102],{"class":36,"line":359},[34,170077,108463],{"class":87},[34,170079,147292],{"class":63},[34,170081,801],{"class":40},[34,170083,152332],{"class":156},[34,170085,13088],{"class":40},[34,170087,152477],{"class":156},[34,170089,13088],{"class":40},[34,170091,147307],{"class":5869},[34,170093,153],{"class":87},[34,170095,147312],{"class":156},[34,170097,14367],{"class":40},[34,170099,32034],{"class":87},[34,170101,148654],{"class":5869},[34,170103,4392],{"class":40},[34,170105,170106,170109,170111,170113,170115,170117,170119,170121,170123,170125,170127],{"class":36,"line":579},[34,170107,170108],{"class":40},"    json.dump(students, ",[34,170110,46005],{"class":5869},[34,170112,13088],{"class":40},[34,170114,147638],{"class":5869},[34,170116,153],{"class":87},[34,170118,34638],{"class":63},[34,170120,13088],{"class":40},[34,170122,152513],{"class":5869},[34,170124,153],{"class":87},[34,170126,875],{"class":63},[34,170128,807],{"class":40},[108,170130,170131],{},"读取 JSON 文件：",[24,170133,170135],{"className":31029,"code":170134,"language":31031,"meta":29,"style":29},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[31,170136,170137,170143,170147,170177,170189,170193],{"__ignoreMap":29},[34,170138,170139,170141],{"class":36,"line":37},[34,170140,31043],{"class":87},[34,170142,147592],{"class":40},[34,170144,170145],{"class":36,"line":51},[34,170146,3053],{"emptyLinePlaceholder":726},[34,170148,170149,170151,170153,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173,170175],{"class":36,"line":60},[34,170150,108463],{"class":87},[34,170152,147292],{"class":63},[34,170154,801],{"class":40},[34,170156,152332],{"class":156},[34,170158,13088],{"class":40},[34,170160,147302],{"class":156},[34,170162,13088],{"class":40},[34,170164,147307],{"class":5869},[34,170166,153],{"class":87},[34,170168,147312],{"class":156},[34,170170,14367],{"class":40},[34,170172,32034],{"class":87},[34,170174,148654],{"class":5869},[34,170176,4392],{"class":40},[34,170178,170179,170181,170183,170185,170187],{"class":36,"line":76},[34,170180,153538],{"class":40},[34,170182,153],{"class":87},[34,170184,148665],{"class":40},[34,170186,46005],{"class":5869},[34,170188,807],{"class":40},[34,170190,170191],{"class":36,"line":93},[34,170192,3053],{"emptyLinePlaceholder":726},[34,170194,170195,170197],{"class":36,"line":99},[34,170196,31066],{"class":63},[34,170198,165496],{"class":40},[14,170200,170202],{"id":170201},"_811-csv文件","8.11 CSV文件",[108,170204,170205],{},"CSV 是逗号分隔值，常用于表格数据。",[108,170207,170208],{},"写入 CSV：",[24,170210,170212],{"className":31029,"code":170211,"language":31031,"meta":29,"style":29},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[31,170213,170214,170221,170225,170233,170251,170267,170283,170287,170291,170331,170345],{"__ignoreMap":29},[34,170215,170216,170218],{"class":36,"line":37},[34,170217,31043],{"class":87},[34,170219,170220],{"class":40}," csv\n",[34,170222,170223],{"class":36,"line":51},[34,170224,3053],{"emptyLinePlaceholder":726},[34,170226,170227,170229,170231],{"class":36,"line":60},[34,170228,160217],{"class":40},[34,170230,153],{"class":87},[34,170232,56090],{"class":40},[34,170234,170235,170238,170240,170242,170244,170246,170249],{"class":36,"line":76},[34,170236,170237],{"class":40},"    [",[34,170239,73730],{"class":156},[34,170241,13088],{"class":40},[34,170243,73763],{"class":156},[34,170245,13088],{"class":40},[34,170247,170248],{"class":156},"\"成绩\"",[34,170250,88466],{"class":40},[34,170252,170253,170255,170257,170259,170261,170263,170265],{"class":36,"line":93},[34,170254,170237],{"class":40},[34,170256,150389],{"class":156},[34,170258,13088],{"class":40},[34,170260,1445],{"class":63},[34,170262,13088],{"class":40},[34,170264,1782],{"class":63},[34,170266,88466],{"class":40},[34,170268,170269,170271,170273,170275,170277,170279,170281],{"class":36,"line":99},[34,170270,170237],{"class":40},[34,170272,151437],{"class":156},[34,170274,13088],{"class":40},[34,170276,1420],{"class":63},[34,170278,13088],{"class":40},[34,170280,1605],{"class":63},[34,170282,88466],{"class":40},[34,170284,170285],{"class":36,"line":353},[34,170286,33897],{"class":40},[34,170288,170289],{"class":36,"line":359},[34,170290,3053],{"emptyLinePlaceholder":726},[34,170292,170293,170295,170297,170299,170302,170304,170306,170308,170310,170312,170314,170316,170319,170321,170323,170325,170327,170329],{"class":36,"line":579},[34,170294,108463],{"class":87},[34,170296,147292],{"class":63},[34,170298,801],{"class":40},[34,170300,170301],{"class":156},"\"students.csv\"",[34,170303,13088],{"class":40},[34,170305,152477],{"class":156},[34,170307,13088],{"class":40},[34,170309,147307],{"class":5869},[34,170311,153],{"class":87},[34,170313,147312],{"class":156},[34,170315,13088],{"class":40},[34,170317,170318],{"class":5869},"newline",[34,170320,153],{"class":87},[34,170322,8305],{"class":156},[34,170324,14367],{"class":40},[34,170326,32034],{"class":87},[34,170328,148654],{"class":5869},[34,170330,4392],{"class":40},[34,170332,170333,170336,170338,170341,170343],{"class":36,"line":589},[34,170334,170335],{"class":40},"    writer ",[34,170337,153],{"class":87},[34,170339,170340],{"class":40}," csv.writer(",[34,170342,46005],{"class":5869},[34,170344,807],{"class":40},[34,170346,170347],{"class":36,"line":601},[34,170348,170349],{"class":40},"    writer.writerows(students)\n",[108,170351,170352],{},"读取 CSV：",[24,170354,170356],{"className":31029,"code":170355,"language":31031,"meta":29,"style":29},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[31,170357,170358,170364,170368,170398,170412,170424],{"__ignoreMap":29},[34,170359,170360,170362],{"class":36,"line":37},[34,170361,31043],{"class":87},[34,170363,170220],{"class":40},[34,170365,170366],{"class":36,"line":51},[34,170367,3053],{"emptyLinePlaceholder":726},[34,170369,170370,170372,170374,170376,170378,170380,170382,170384,170386,170388,170390,170392,170394,170396],{"class":36,"line":60},[34,170371,108463],{"class":87},[34,170373,147292],{"class":63},[34,170375,801],{"class":40},[34,170377,170301],{"class":156},[34,170379,13088],{"class":40},[34,170381,147302],{"class":156},[34,170383,13088],{"class":40},[34,170385,147307],{"class":5869},[34,170387,153],{"class":87},[34,170389,147312],{"class":156},[34,170391,14367],{"class":40},[34,170393,32034],{"class":87},[34,170395,148654],{"class":5869},[34,170397,4392],{"class":40},[34,170399,170400,170403,170405,170408,170410],{"class":36,"line":76},[34,170401,170402],{"class":40},"    reader ",[34,170404,153],{"class":87},[34,170406,170407],{"class":40}," csv.reader(",[34,170409,46005],{"class":5869},[34,170411,807],{"class":40},[34,170413,170414,170416,170419,170421],{"class":36,"line":93},[34,170415,3854],{"class":87},[34,170417,170418],{"class":40}," row ",[34,170420,26695],{"class":87},[34,170422,170423],{"class":40}," reader:\n",[34,170425,170426,170428],{"class":36,"line":99},[34,170427,33102],{"class":63},[34,170429,170430],{"class":40},"(row)\n",[108,170432,170433],{},"使用字典写入：",[24,170435,170437],{"className":31029,"code":170436,"language":31031,"meta":29,"style":29},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[31,170438,170439,170445,170449,170457,170485,170513,170517,170521,170559,170580,170601,170606],{"__ignoreMap":29},[34,170440,170441,170443],{"class":36,"line":37},[34,170442,31043],{"class":87},[34,170444,170220],{"class":40},[34,170446,170447],{"class":36,"line":51},[34,170448,3053],{"emptyLinePlaceholder":726},[34,170450,170451,170453,170455],{"class":36,"line":60},[34,170452,160217],{"class":40},[34,170454,153],{"class":87},[34,170456,56090],{"class":40},[34,170458,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483],{"class":36,"line":76},[34,170460,148886],{"class":40},[34,170462,63317],{"class":156},[34,170464,67],{"class":40},[34,170466,150389],{"class":156},[34,170468,13088],{"class":40},[34,170470,69759],{"class":156},[34,170472,67],{"class":40},[34,170474,1445],{"class":63},[34,170476,13088],{"class":40},[34,170478,151973],{"class":156},[34,170480,67],{"class":40},[34,170482,1782],{"class":63},[34,170484,5583],{"class":40},[34,170486,170487,170489,170491,170493,170495,170497,170499,170501,170503,170505,170507,170509,170511],{"class":36,"line":93},[34,170488,148886],{"class":40},[34,170490,63317],{"class":156},[34,170492,67],{"class":40},[34,170494,151437],{"class":156},[34,170496,13088],{"class":40},[34,170498,69759],{"class":156},[34,170500,67],{"class":40},[34,170502,1420],{"class":63},[34,170504,13088],{"class":40},[34,170506,151973],{"class":156},[34,170508,67],{"class":40},[34,170510,1605],{"class":63},[34,170512,5583],{"class":40},[34,170514,170515],{"class":36,"line":99},[34,170516,33897],{"class":40},[34,170518,170519],{"class":36,"line":353},[34,170520,3053],{"emptyLinePlaceholder":726},[34,170522,170523,170525,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547,170549,170551,170553,170555,170557],{"class":36,"line":359},[34,170524,108463],{"class":87},[34,170526,147292],{"class":63},[34,170528,801],{"class":40},[34,170530,170301],{"class":156},[34,170532,13088],{"class":40},[34,170534,152477],{"class":156},[34,170536,13088],{"class":40},[34,170538,147307],{"class":5869},[34,170540,153],{"class":87},[34,170542,147312],{"class":156},[34,170544,13088],{"class":40},[34,170546,170318],{"class":5869},[34,170548,153],{"class":87},[34,170550,8305],{"class":156},[34,170552,14367],{"class":40},[34,170554,32034],{"class":87},[34,170556,148654],{"class":5869},[34,170558,4392],{"class":40},[34,170560,170561,170564,170566,170568,170570,170572,170574,170576,170578],{"class":36,"line":579},[34,170562,170563],{"class":40},"    fieldnames ",[34,170565,153],{"class":87},[34,170567,52872],{"class":40},[34,170569,63317],{"class":156},[34,170571,13088],{"class":40},[34,170573,69759],{"class":156},[34,170575,13088],{"class":40},[34,170577,151973],{"class":156},[34,170579,33897],{"class":40},[34,170581,170582,170584,170586,170589,170591,170593,170596,170598],{"class":36,"line":589},[34,170583,170335],{"class":40},[34,170585,153],{"class":87},[34,170587,170588],{"class":40}," csv.DictWriter(",[34,170590,46005],{"class":5869},[34,170592,13088],{"class":40},[34,170594,170595],{"class":5869},"fieldnames",[34,170597,153],{"class":87},[34,170599,170600],{"class":40},"fieldnames)\n",[34,170602,170603],{"class":36,"line":601},[34,170604,170605],{"class":40},"    writer.writeheader()\n",[34,170607,170608],{"class":36,"line":613},[34,170609,170349],{"class":40},[14,170611,170613],{"id":170612},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[108,170615,123922],{},[752,170617,170618,170621,170624],{},[755,170619,170620],{},"读取文本文件。",[755,170622,170623],{},"统计每个单词出现次数。",[755,170625,170626],{},"输出出现次数最多的前 10 个单词。",[108,170628,10688],{},[24,170630,170632],{"className":31029,"code":170631,"language":31031,"meta":29,"style":29},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[31,170633,170634,170644,170648,170661,170677,170681,170691,170700,170704,170716,170736,170745,170749,170767,170771,170801,170805,170821],{"__ignoreMap":29},[34,170635,170636,170638,170640,170642],{"class":36,"line":37},[34,170637,31388],{"class":87},[34,170639,108941],{"class":40},[34,170641,31043],{"class":87},[34,170643,108946],{"class":40},[34,170645,170646],{"class":36,"line":51},[34,170647,3053],{"emptyLinePlaceholder":726},[34,170649,170650,170652,170654,170656,170659],{"class":36,"line":60},[34,170651,168812],{"class":40},[34,170653,153],{"class":87},[34,170655,109175],{"class":40},[34,170657,170658],{"class":156},"\"article.txt\"",[34,170660,807],{"class":40},[34,170662,170663,170665,170667,170669,170671,170673,170675],{"class":36,"line":76},[34,170664,168995],{"class":40},[34,170666,153],{"class":87},[34,170668,169872],{"class":40},[34,170670,147307],{"class":5869},[34,170672,153],{"class":87},[34,170674,147312],{"class":156},[34,170676,807],{"class":40},[34,170678,170679],{"class":36,"line":93},[34,170680,3053],{"emptyLinePlaceholder":726},[34,170682,170683,170686,170688],{"class":36,"line":99},[34,170684,170685],{"class":40},"words ",[34,170687,153],{"class":87},[34,170689,170690],{"class":40}," content.lower().split()\n",[34,170692,170693,170696,170698],{"class":36,"line":353},[34,170694,170695],{"class":40},"counter ",[34,170697,153],{"class":87},[34,170699,88498],{"class":40},[34,170701,170702],{"class":36,"line":359},[34,170703,3053],{"emptyLinePlaceholder":726},[34,170705,170706,170708,170711,170713],{"class":36,"line":579},[34,170707,3678],{"class":87},[34,170709,170710],{"class":40}," word ",[34,170712,26695],{"class":87},[34,170714,170715],{"class":40}," words:\n",[34,170717,170718,170721,170723,170726,170729,170731,170734],{"class":36,"line":589},[34,170719,170720],{"class":40},"    word ",[34,170722,153],{"class":87},[34,170724,170725],{"class":40}," word.strip(",[34,170727,170728],{"class":156},"\".,!?;:",[34,170730,156996],{"class":63},[34,170732,170733],{"class":156},"'()[]\"",[34,170735,807],{"class":40},[34,170737,170738,170740,170742],{"class":36,"line":601},[34,170739,3754],{"class":87},[34,170741,39581],{"class":87},[34,170743,170744],{"class":40}," word:\n",[34,170746,170747],{"class":36,"line":613},[34,170748,149013],{"class":87},[34,170750,170751,170754,170756,170759,170761,170763,170765],{"class":36,"line":618},[34,170752,170753],{"class":40},"    counter[word] ",[34,170755,153],{"class":87},[34,170757,170758],{"class":40}," counter.get(word, ",[34,170760,987],{"class":63},[34,170762,14367],{"class":40},[34,170764,1276],{"class":87},[34,170766,56342],{"class":63},[34,170768,170769],{"class":36,"line":628},[34,170770,3053],{"emptyLinePlaceholder":726},[34,170772,170773,170776,170778,170780,170783,170785,170787,170789,170791,170793,170795,170797,170799],{"class":36,"line":640},[34,170774,170775],{"class":40},"items ",[34,170777,153],{"class":87},[34,170779,164105],{"class":63},[34,170781,170782],{"class":40},"(counter.items(), ",[34,170784,154447],{"class":5869},[34,170786,154450],{"class":87},[34,170788,154453],{"class":40},[34,170790,1013],{"class":63},[34,170792,112832],{"class":40},[34,170794,164029],{"class":5869},[34,170796,153],{"class":87},[34,170798,32127],{"class":63},[34,170800,807],{"class":40},[34,170802,170803],{"class":36,"line":2301},[34,170804,3053],{"emptyLinePlaceholder":726},[34,170806,170807,170809,170812,170814,170817,170819],{"class":36,"line":2307},[34,170808,3678],{"class":87},[34,170810,170811],{"class":40}," word, count ",[34,170813,26695],{"class":87},[34,170815,170816],{"class":40}," items[:",[34,170818,1241],{"class":63},[34,170820,166256],{"class":40},[34,170822,170823,170825],{"class":36,"line":2328},[34,170824,31950],{"class":63},[34,170826,170827],{"class":40},"(word, count)\n",[14,170829,170831],{"id":170830},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[24,170833,170835],{"className":31029,"code":170834,"language":31031,"meta":29,"style":29},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[31,170836,170837,170843,170853,170857,170869,170873,170877,170885,170895,170901,170905,170935,170945,170949,170953,170961,170991,171015,171019,171023,171031,171060,171065],{"__ignoreMap":29},[34,170838,170839,170841],{"class":36,"line":37},[34,170840,31043],{"class":87},[34,170842,147592],{"class":40},[34,170844,170845,170847,170849,170851],{"class":36,"line":51},[34,170846,31388],{"class":87},[34,170848,108941],{"class":40},[34,170850,31043],{"class":87},[34,170852,108946],{"class":40},[34,170854,170855],{"class":36,"line":60},[34,170856,3053],{"emptyLinePlaceholder":726},[34,170858,170859,170861,170863,170865,170867],{"class":36,"line":76},[34,170860,152325],{"class":63},[34,170862,14217],{"class":87},[34,170864,109175],{"class":40},[34,170866,152332],{"class":156},[34,170868,807],{"class":40},[34,170870,170871],{"class":36,"line":93},[34,170872,3053],{"emptyLinePlaceholder":726},[34,170874,170875],{"class":36,"line":99},[34,170876,3053],{"emptyLinePlaceholder":726},[34,170878,170879,170881,170883],{"class":36,"line":353},[34,170880,32598],{"class":87},[34,170882,152349],{"class":149},[34,170884,32604],{"class":40},[34,170886,170887,170889,170891,170893],{"class":36,"line":359},[34,170888,3754],{"class":87},[34,170890,39581],{"class":87},[34,170892,152360],{"class":63},[34,170894,152363],{"class":40},[34,170896,170897,170899],{"class":36,"line":579},[34,170898,15405],{"class":87},[34,170900,52484],{"class":40},[34,170902,170903],{"class":36,"line":589},[34,170904,3053],{"emptyLinePlaceholder":726},[34,170906,170907,170909,170911,170913,170915,170917,170919,170921,170923,170925,170927,170929,170931,170933],{"class":36,"line":601},[34,170908,34829],{"class":87},[34,170910,147292],{"class":63},[34,170912,801],{"class":40},[34,170914,152325],{"class":63},[34,170916,13088],{"class":40},[34,170918,147302],{"class":156},[34,170920,13088],{"class":40},[34,170922,147307],{"class":5869},[34,170924,153],{"class":87},[34,170926,147312],{"class":156},[34,170928,14367],{"class":40},[34,170930,32034],{"class":87},[34,170932,148654],{"class":5869},[34,170934,4392],{"class":40},[34,170936,170937,170939,170941,170943],{"class":36,"line":613},[34,170938,15405],{"class":87},[34,170940,148665],{"class":40},[34,170942,46005],{"class":5869},[34,170944,807],{"class":40},[34,170946,170947],{"class":36,"line":618},[34,170948,3053],{"emptyLinePlaceholder":726},[34,170950,170951],{"class":36,"line":628},[34,170952,3053],{"emptyLinePlaceholder":726},[34,170954,170955,170957,170959],{"class":36,"line":640},[34,170956,32598],{"class":87},[34,170958,152459],{"class":149},[34,170960,152462],{"class":40},[34,170962,170963,170965,170967,170969,170971,170973,170975,170977,170979,170981,170983,170985,170987,170989],{"class":36,"line":2301},[34,170964,34829],{"class":87},[34,170966,147292],{"class":63},[34,170968,801],{"class":40},[34,170970,152325],{"class":63},[34,170972,13088],{"class":40},[34,170974,152477],{"class":156},[34,170976,13088],{"class":40},[34,170978,147307],{"class":5869},[34,170980,153],{"class":87},[34,170982,147312],{"class":156},[34,170984,14367],{"class":40},[34,170986,32034],{"class":87},[34,170988,148654],{"class":5869},[34,170990,4392],{"class":40},[34,170992,170993,170995,170997,170999,171001,171003,171005,171007,171009,171011,171013],{"class":36,"line":2307},[34,170994,152498],{"class":40},[34,170996,46005],{"class":5869},[34,170998,13088],{"class":40},[34,171000,147638],{"class":5869},[34,171002,153],{"class":87},[34,171004,34638],{"class":63},[34,171006,13088],{"class":40},[34,171008,152513],{"class":5869},[34,171010,153],{"class":87},[34,171012,875],{"class":63},[34,171014,807],{"class":40},[34,171016,171017],{"class":36,"line":2328},[34,171018,3053],{"emptyLinePlaceholder":726},[34,171020,171021],{"class":36,"line":2333},[34,171022,3053],{"emptyLinePlaceholder":726},[34,171024,171025,171027,171029],{"class":36,"line":2347},[34,171026,160217],{"class":40},[34,171028,153],{"class":87},[34,171030,153543],{"class":40},[34,171032,171033,171036,171038,171040,171042,171044,171046,171048,171050,171052,171054,171056,171058],{"class":36,"line":2352},[34,171034,171035],{"class":40},"students.append({",[34,171037,63317],{"class":156},[34,171039,67],{"class":40},[34,171041,150389],{"class":156},[34,171043,13088],{"class":40},[34,171045,69759],{"class":156},[34,171047,67],{"class":40},[34,171049,1445],{"class":63},[34,171051,13088],{"class":40},[34,171053,151973],{"class":156},[34,171055,67],{"class":40},[34,171057,1782],{"class":63},[34,171059,165653],{"class":40},[34,171061,171062],{"class":36,"line":2381},[34,171063,171064],{"class":40},"save_students(students)\n",[34,171066,171067,171069,171071,171074],{"class":36,"line":2386},[34,171068,31066],{"class":63},[34,171070,801],{"class":40},[34,171072,171073],{"class":156},"\"保存成功\"",[34,171075,807],{"class":40},[14,171077,171079],{"id":171078},"_814-易错点","8.14 易错点",[752,171081,171082,171086,171092,171097,171104,171111],{},[755,171083,171084,169345],{},[31,171085,1590],{},[755,171087,171088,171089,29036],{},"读写中文要指定 ",[31,171090,171091],{},"encoding=\"utf-8\"",[755,171093,171094,171095,29036],{},"打开文件后要关闭，推荐使用 ",[31,171096,108463],{},[755,171098,171099,171100,171103],{},"读取大文件不要直接 ",[31,171101,171102],{},"read()"," 全部内容。",[755,171105,171106,171107,171110],{},"Windows 写 CSV 时建议加 ",[31,171108,171109],{},"newline=\"\"","，避免空行。",[755,171112,171113],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171115,171117],{"id":171116},"_815-本章练习","8.15 本章练习",[752,171119,171120,171127,171132,171135,171138],{},[755,171121,171122,171123,171126],{},"写入一个 ",[31,171124,171125],{},"students.txt","，每行保存一个学生姓名。",[755,171128,104985,171129,171131],{},[31,171130,171125],{}," 并输出所有学生。",[755,171133,171134],{},"把学生列表保存为 JSON 文件。",[755,171136,171137],{},"从 JSON 文件读取学生数据，计算平均分。",[755,171139,171140,171141,171144,171145,171148],{},"写一个日志函数 ",[31,171142,171143],{},"write_log(message)","，每次调用向 ",[31,171146,171147],{},"app.log"," 追加一行。",[45,171150,171151],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":29,"searchDepth":51,"depth":51,"links":171153},[171154,171155,171159,171160,171166,171167,171168,171169,171170,171171,171172,171173,171174,171175,171176],{"id":168665,"depth":51,"text":168666},{"id":168706,"depth":51,"text":168707,"children":171156},[171157,171158],{"id":168710,"depth":60,"text":168711},{"id":168744,"depth":60,"text":168745},{"id":168858,"depth":51,"text":168859},{"id":168951,"depth":51,"text":168952,"children":171161},[171162,171163,171164,171165],{"id":168955,"depth":60,"text":168956},{"id":169042,"depth":60,"text":169043},{"id":169112,"depth":60,"text":169113},{"id":169206,"depth":60,"text":169207},{"id":169276,"depth":51,"text":169277},{"id":169339,"depth":51,"text":169340},{"id":169500,"depth":51,"text":169501},{"id":169563,"depth":51,"text":169564},{"id":169679,"depth":51,"text":169680},{"id":169889,"depth":51,"text":169890},{"id":170201,"depth":51,"text":170202},{"id":170612,"depth":51,"text":170613},{"id":170830,"depth":51,"text":170831},{"id":171078,"depth":51,"text":171079},{"id":171116,"depth":51,"text":171117},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168657,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171183,"title":171184,"body":171185,"description":723,"extension":724,"meta":173371,"navigation":726,"path":173372,"seo":173373,"stem":173374,"__hash__":173375},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171186,"toc":173338},[171187,171190,171194,171197,171200,171292,171294,171313,171318,171322,171325,171328,171357,171364,171367,171371,171374,171403,171405,171457,171463,171516,171520,171618,171621,171688,171692,171749,171751,171757,171761,171766,171772,171863,171868,171872,171875,171953,171956,171994,171998,172116,172119,172123,172126,172171,172174,172178,172183,172189,172239,172242,172273,172277,172281,172311,172315,172350,172354,172389,172429,172433,172449,172452,172456,172460,172539,172543,172584,172588,172643,172647,172681,172685,172715,172724,172731,172737,172794,172797,172805,172808,172812,172819,172822,172828,172831,172848,172853,172857,172863,172876,172879,172916,172919,172930,172933,172947,172950,172964,172968,172975,173008,173011,173013,173019,173022,173026,173028,173034,173039,173212,173216,173279,173283,173307,173311,173335],[10,171188,171184],{"id":171189},"_9-异常模块与包",[14,171191,171193],{"id":171192},"_91-什么是异常","9.1 什么是异常",[108,171195,171196],{},"异常是程序运行过程中出现的错误。",[108,171198,171199],{},"常见异常：",[934,171201,171202,171211],{},[937,171203,171204],{},[940,171205,171206,171209],{},[943,171207,171208],{},"异常",[943,171210,26521],{},[980,171212,171213,171223,171233,171242,171252,171262,171272,171282],{},[940,171214,171215,171220],{},[985,171216,171217],{},[31,171218,171219],{},"NameError",[985,171221,171222],{},"使用了未定义变量",[940,171224,171225,171230],{},[985,171226,171227],{},[31,171228,171229],{},"TypeError",[985,171231,171232],{},"类型不匹配",[940,171234,171235,171239],{},[985,171236,171237],{},[31,171238,155335],{},[985,171240,171241],{},"值不合法",[940,171243,171244,171249],{},[985,171245,171246],{},[31,171247,171248],{},"IndexError",[985,171250,171251],{},"列表索引越界",[940,171253,171254,171259],{},[985,171255,171256],{},[31,171257,171258],{},"KeyError",[985,171260,171261],{},"字典 key 不存在",[940,171263,171264,171269],{},[985,171265,171266],{},[31,171267,171268],{},"FileNotFoundError",[985,171270,171271],{},"文件不存在",[940,171273,171274,171279],{},[985,171275,171276],{},[31,171277,171278],{},"ZeroDivisionError",[985,171280,171281],{},"除数为 0",[940,171283,171284,171289],{},[985,171285,171286],{},[31,171287,171288],{},"ImportError",[985,171290,171291],{},"导入失败",[108,171293,15788],{},[24,171295,171297],{"className":31029,"code":171296,"language":31031,"meta":29,"style":29},"num = int(\"abc\")\n",[31,171298,171299],{"__ignoreMap":29},[34,171300,171301,171303,171305,171307,171309,171311],{"class":36,"line":37},[34,171302,156288],{"class":40},[34,171304,153],{"class":87},[34,171306,3035],{"class":63},[34,171308,801],{"class":40},[34,171310,156381],{"class":156},[34,171312,807],{"class":40},[108,171314,171315,171316,29036],{},"会触发 ",[31,171317,155335],{},[14,171319,171321],{"id":171320},"_92-为什么要处理异常","9.2 为什么要处理异常",[108,171323,171324],{},"如果不处理异常，程序会直接终止。",[108,171326,171327],{},"例如用户输入年龄：",[24,171329,171331],{"className":31029,"code":171330,"language":31031,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[31,171332,171333,171351],{"__ignoreMap":29},[34,171334,171335,171337,171339,171341,171343,171345,171347,171349],{"class":36,"line":37},[34,171336,147047],{"class":40},[34,171338,153],{"class":87},[34,171340,3035],{"class":63},[34,171342,801],{"class":40},[34,171344,669],{"class":63},[34,171346,801],{"class":40},[34,171348,152895],{"class":156},[34,171350,31148],{"class":40},[34,171352,171353,171355],{"class":36,"line":51},[34,171354,31066],{"class":63},[34,171356,156262],{"class":40},[108,171358,171359,171360,171363],{},"用户输入 ",[31,171361,171362],{},"abc","，程序就会报错退出。",[108,171365,171366],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171368,171370],{"id":171369},"_93-try-except","9.3 try except",[108,171372,171373],{},"基础语法：",[24,171375,171377],{"className":31029,"code":171376,"language":31031,"meta":29,"style":29},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[31,171378,171379,171386,171391,171398],{"__ignoreMap":29},[34,171380,171381,171384],{"class":36,"line":37},[34,171382,171383],{"class":87},"try",[34,171385,4392],{"class":40},[34,171387,171388],{"class":36,"line":51},[34,171389,171390],{"class":40},"    可能出错的代码\n",[34,171392,171393,171396],{"class":36,"line":60},[34,171394,171395],{"class":87},"except",[34,171397,4392],{"class":40},[34,171399,171400],{"class":36,"line":76},[34,171401,171402],{"class":40},"    出错后的处理代码\n",[108,171404,15788],{},[24,171406,171408],{"className":31029,"code":171407,"language":31031,"meta":29,"style":29},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[31,171409,171410,171416,171434,171440,171446],{"__ignoreMap":29},[34,171411,171412,171414],{"class":36,"line":37},[34,171413,171383],{"class":87},[34,171415,4392],{"class":40},[34,171417,171418,171420,171422,171424,171426,171428,171430,171432],{"class":36,"line":51},[34,171419,152887],{"class":40},[34,171421,153],{"class":87},[34,171423,3035],{"class":63},[34,171425,801],{"class":40},[34,171427,669],{"class":63},[34,171429,801],{"class":40},[34,171431,152895],{"class":156},[34,171433,31148],{"class":40},[34,171435,171436,171438],{"class":36,"line":60},[34,171437,31950],{"class":63},[34,171439,156262],{"class":40},[34,171441,171442,171444],{"class":36,"line":76},[34,171443,171395],{"class":87},[34,171445,4392],{"class":40},[34,171447,171448,171450,171452,171455],{"class":36,"line":93},[34,171449,31950],{"class":63},[34,171451,801],{"class":40},[34,171453,171454],{"class":156},"\"年龄必须是数字\"",[34,171456,807],{"class":40},[108,171458,171459,171460,171462],{},"不建议裸写 ",[31,171461,171395],{},"，最好指定异常类型。",[24,171464,171466],{"className":31029,"code":171465,"language":31031,"meta":29,"style":29},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[31,171467,171468,171474,171492,171498,171506],{"__ignoreMap":29},[34,171469,171470,171472],{"class":36,"line":37},[34,171471,171383],{"class":87},[34,171473,4392],{"class":40},[34,171475,171476,171478,171480,171482,171484,171486,171488,171490],{"class":36,"line":51},[34,171477,152887],{"class":40},[34,171479,153],{"class":87},[34,171481,3035],{"class":63},[34,171483,801],{"class":40},[34,171485,669],{"class":63},[34,171487,801],{"class":40},[34,171489,152895],{"class":156},[34,171491,31148],{"class":40},[34,171493,171494,171496],{"class":36,"line":60},[34,171495,31950],{"class":63},[34,171497,156262],{"class":40},[34,171499,171500,171502,171504],{"class":36,"line":76},[34,171501,171395],{"class":87},[34,171503,152727],{"class":63},[34,171505,4392],{"class":40},[34,171507,171508,171510,171512,171514],{"class":36,"line":93},[34,171509,31950],{"class":63},[34,171511,801],{"class":40},[34,171513,171454],{"class":156},[34,171515,807],{"class":40},[14,171517,171519],{"id":171518},"_94-捕获多个异常","9.4 捕获多个异常",[24,171521,171523],{"className":31029,"code":171522,"language":31031,"meta":29,"style":29},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[31,171524,171525,171531,171552,171572,171579,171587,171598,171607],{"__ignoreMap":29},[34,171526,171527,171529],{"class":36,"line":37},[34,171528,171383],{"class":87},[34,171530,4392],{"class":40},[34,171532,171533,171536,171538,171540,171542,171544,171546,171548,171550],{"class":36,"line":51},[34,171534,171535],{"class":40},"    nums ",[34,171537,153],{"class":87},[34,171539,52872],{"class":40},[34,171541,1013],{"class":63},[34,171543,13088],{"class":40},[34,171545,875],{"class":63},[34,171547,13088],{"class":40},[34,171549,869],{"class":63},[34,171551,33897],{"class":40},[34,171553,171554,171557,171559,171561,171563,171565,171567,171570],{"class":36,"line":60},[34,171555,171556],{"class":40},"    index ",[34,171558,153],{"class":87},[34,171560,3035],{"class":63},[34,171562,801],{"class":40},[34,171564,669],{"class":63},[34,171566,801],{"class":40},[34,171568,171569],{"class":156},"\"请输入索引:\"",[34,171571,31148],{"class":40},[34,171573,171574,171576],{"class":36,"line":76},[34,171575,31950],{"class":63},[34,171577,171578],{"class":40},"(nums[index])\n",[34,171580,171581,171583,171585],{"class":36,"line":93},[34,171582,171395],{"class":87},[34,171584,152727],{"class":63},[34,171586,4392],{"class":40},[34,171588,171589,171591,171593,171596],{"class":36,"line":99},[34,171590,31950],{"class":63},[34,171592,801],{"class":40},[34,171594,171595],{"class":156},"\"索引必须是整数\"",[34,171597,807],{"class":40},[34,171599,171600,171602,171605],{"class":36,"line":353},[34,171601,171395],{"class":87},[34,171603,171604],{"class":63}," IndexError",[34,171606,4392],{"class":40},[34,171608,171609,171611,171613,171616],{"class":36,"line":359},[34,171610,31950],{"class":63},[34,171612,801],{"class":40},[34,171614,171615],{"class":156},"\"索引越界\"",[34,171617,807],{"class":40},[108,171619,171620],{},"多个异常使用相同处理逻辑：",[24,171622,171624],{"className":31029,"code":171623,"language":31031,"meta":29,"style":29},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[31,171625,171626,171632,171650,171663,171677],{"__ignoreMap":29},[34,171627,171628,171630],{"class":36,"line":37},[34,171629,171383],{"class":87},[34,171631,4392],{"class":40},[34,171633,171634,171636,171638,171640,171642,171644,171646,171648],{"class":36,"line":51},[34,171635,46244],{"class":40},[34,171637,153],{"class":87},[34,171639,3035],{"class":63},[34,171641,801],{"class":40},[34,171643,669],{"class":63},[34,171645,801],{"class":40},[34,171647,156297],{"class":156},[34,171649,31148],{"class":40},[34,171651,171652,171654,171656,171658,171660],{"class":36,"line":60},[34,171653,31950],{"class":63},[34,171655,801],{"class":40},[34,171657,1241],{"class":63},[34,171659,156547],{"class":87},[34,171661,171662],{"class":40}," num)\n",[34,171664,171665,171667,171669,171671,171673,171675],{"class":36,"line":76},[34,171666,171395],{"class":87},[34,171668,2312],{"class":40},[34,171670,155335],{"class":63},[34,171672,13088],{"class":40},[34,171674,171278],{"class":63},[34,171676,31437],{"class":40},[34,171678,171679,171681,171683,171686],{"class":36,"line":93},[34,171680,31950],{"class":63},[34,171682,801],{"class":40},[34,171684,171685],{"class":156},"\"输入不合法\"",[34,171687,807],{"class":40},[14,171689,171691],{"id":171690},"_95-获取异常信息","9.5 获取异常信息",[24,171693,171695],{"className":31029,"code":171694,"language":31031,"meta":29,"style":29},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[31,171696,171697,171703,171717,171728],{"__ignoreMap":29},[34,171698,171699,171701],{"class":36,"line":37},[34,171700,171383],{"class":87},[34,171702,4392],{"class":40},[34,171704,171705,171707,171709,171711,171713,171715],{"class":36,"line":51},[34,171706,46244],{"class":40},[34,171708,153],{"class":87},[34,171710,3035],{"class":63},[34,171712,801],{"class":40},[34,171714,156381],{"class":156},[34,171716,807],{"class":40},[34,171718,171719,171721,171723,171725],{"class":36,"line":60},[34,171720,171395],{"class":87},[34,171722,152727],{"class":63},[34,171724,65242],{"class":87},[34,171726,171727],{"class":40}," e:\n",[34,171729,171730,171732,171734,171736,171739,171741,171743,171745,171747],{"class":36,"line":76},[34,171731,31950],{"class":63},[34,171733,801],{"class":40},[34,171735,851],{"class":87},[34,171737,171738],{"class":156},"\"出错了:",[34,171740,1690],{"class":63},[34,171742,872],{"class":40},[34,171744,1739],{"class":63},[34,171746,1046],{"class":156},[34,171748,807],{"class":40},[108,171750,146958],{},[24,171752,171755],{"className":171753,"code":171754,"language":5840,"meta":29},[5838],"出错了:invalid literal for int() with base 10: 'abc'\n",[31,171756,171754],{"__ignoreMap":29},[14,171758,171760],{"id":171759},"_96-else和finally","9.6 else和finally",[108,171762,171763,171765],{},[31,171764,2355],{},"：没有异常时执行。",[108,171767,171768,171771],{},[31,171769,171770],{},"finally","：无论是否异常都会执行。",[24,171773,171775],{"className":31029,"code":171774,"language":31031,"meta":29,"style":29},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[31,171776,171777,171783,171801,171809,171819,171825,171846,171852],{"__ignoreMap":29},[34,171778,171779,171781],{"class":36,"line":37},[34,171780,171383],{"class":87},[34,171782,4392],{"class":40},[34,171784,171785,171787,171789,171791,171793,171795,171797,171799],{"class":36,"line":51},[34,171786,46244],{"class":40},[34,171788,153],{"class":87},[34,171790,3035],{"class":63},[34,171792,801],{"class":40},[34,171794,669],{"class":63},[34,171796,801],{"class":40},[34,171798,156297],{"class":156},[34,171800,31148],{"class":40},[34,171802,171803,171805,171807],{"class":36,"line":60},[34,171804,171395],{"class":87},[34,171806,152727],{"class":63},[34,171808,4392],{"class":40},[34,171810,171811,171813,171815,171817],{"class":36,"line":76},[34,171812,31950],{"class":63},[34,171814,801],{"class":40},[34,171816,153715],{"class":156},[34,171818,807],{"class":40},[34,171820,171821,171823],{"class":36,"line":93},[34,171822,2355],{"class":87},[34,171824,4392],{"class":40},[34,171826,171827,171829,171831,171833,171836,171838,171840,171842,171844],{"class":36,"line":99},[34,171828,31950],{"class":63},[34,171830,801],{"class":40},[34,171832,851],{"class":87},[34,171834,171835],{"class":156},"\"输入正确:",[34,171837,1690],{"class":63},[34,171839,2319],{"class":40},[34,171841,1739],{"class":63},[34,171843,1046],{"class":156},[34,171845,807],{"class":40},[34,171847,171848,171850],{"class":36,"line":353},[34,171849,171770],{"class":87},[34,171851,4392],{"class":40},[34,171853,171854,171856,171858,171861],{"class":36,"line":359},[34,171855,31950],{"class":63},[34,171857,801],{"class":40},[34,171859,171860],{"class":156},"\"程序结束\"",[34,171862,807],{"class":40},[108,171864,171865,171867],{},[31,171866,171770],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171869,171871],{"id":171870},"_97-抛出异常","9.7 抛出异常",[108,171873,171874],{},"程序可以主动抛出异常。",[24,171876,171878],{"className":31029,"code":171877,"language":31031,"meta":29,"style":29},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[31,171879,171880,171889,171901,171914,171934,171938,171942],{"__ignoreMap":29},[34,171881,171882,171884,171887],{"class":36,"line":37},[34,171883,32598],{"class":87},[34,171885,171886],{"class":149}," set_age",[34,171888,161916],{"class":40},[34,171890,171891,171893,171895,171897,171899],{"class":36,"line":51},[34,171892,3754],{"class":87},[34,171894,16359],{"class":40},[34,171896,41],{"class":87},[34,171898,4746],{"class":63},[34,171900,4392],{"class":40},[34,171902,171903,171905,171907,171909,171912],{"class":36,"line":60},[34,171904,104062],{"class":87},[34,171906,152727],{"class":63},[34,171908,801],{"class":40},[34,171910,171911],{"class":156},"\"年龄不能为负数\"",[34,171913,807],{"class":40},[34,171915,171916,171918,171920,171922,171924,171926,171928,171930,171932],{"class":36,"line":76},[34,171917,31950],{"class":63},[34,171919,801],{"class":40},[34,171921,851],{"class":87},[34,171923,162484],{"class":156},[34,171925,1690],{"class":63},[34,171927,70856],{"class":40},[34,171929,1739],{"class":63},[34,171931,1046],{"class":156},[34,171933,807],{"class":40},[34,171935,171936],{"class":36,"line":93},[34,171937,3053],{"emptyLinePlaceholder":726},[34,171939,171940],{"class":36,"line":99},[34,171941,3053],{"emptyLinePlaceholder":726},[34,171943,171944,171947,171949,171951],{"class":36,"line":353},[34,171945,171946],{"class":40},"set_age(",[34,171948,1327],{"class":87},[34,171950,1013],{"class":63},[34,171952,807],{"class":40},[108,171954,171955],{},"调用者可以捕获：",[24,171957,171959],{"className":31029,"code":171958,"language":31031,"meta":29,"style":29},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[31,171960,171961,171967,171978,171988],{"__ignoreMap":29},[34,171962,171963,171965],{"class":36,"line":37},[34,171964,171383],{"class":87},[34,171966,4392],{"class":40},[34,171968,171969,171972,171974,171976],{"class":36,"line":51},[34,171970,171971],{"class":40},"    set_age(",[34,171973,1327],{"class":87},[34,171975,1013],{"class":63},[34,171977,807],{"class":40},[34,171979,171980,171982,171984,171986],{"class":36,"line":60},[34,171981,171395],{"class":87},[34,171983,152727],{"class":63},[34,171985,65242],{"class":87},[34,171987,171727],{"class":40},[34,171989,171990,171992],{"class":36,"line":76},[34,171991,31950],{"class":63},[34,171993,67637],{"class":40},[14,171995,171997],{"id":171996},"_98-自定义异常","9.8 自定义异常",[24,171999,172001],{"className":31029,"code":172000,"language":31031,"meta":29,"style":29},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[31,172002,172003,172017,172021,172025,172029,172037,172047,172058,172068,172072,172076,172082,172099,172110],{"__ignoreMap":29},[34,172004,172005,172007,172010,172012,172015],{"class":36,"line":37},[34,172006,15347],{"class":87},[34,172008,172009],{"class":149}," BalanceNotEnoughError",[34,172011,801],{"class":40},[34,172013,172014],{"class":63},"Exception",[34,172016,31437],{"class":40},[34,172018,172019],{"class":36,"line":51},[34,172020,150038],{"class":87},[34,172022,172023],{"class":36,"line":60},[34,172024,3053],{"emptyLinePlaceholder":726},[34,172026,172027],{"class":36,"line":76},[34,172028,3053],{"emptyLinePlaceholder":726},[34,172030,172031,172033,172035],{"class":36,"line":93},[34,172032,32598],{"class":87},[34,172034,150687],{"class":149},[34,172036,163313],{"class":40},[34,172038,172039,172041,172043,172045],{"class":36,"line":99},[34,172040,3754],{"class":87},[34,172042,150643],{"class":40},[34,172044,1753],{"class":87},[34,172046,163090],{"class":40},[34,172048,172049,172051,172054,172056],{"class":36,"line":353},[34,172050,104062],{"class":87},[34,172052,172053],{"class":40}," BalanceNotEnoughError(",[34,172055,150738],{"class":156},[34,172057,807],{"class":40},[34,172059,172060,172062,172064,172066],{"class":36,"line":359},[34,172061,4743],{"class":87},[34,172063,163320],{"class":40},[34,172065,1327],{"class":87},[34,172067,150676],{"class":40},[34,172069,172070],{"class":36,"line":579},[34,172071,3053],{"emptyLinePlaceholder":726},[34,172073,172074],{"class":36,"line":589},[34,172075,3053],{"emptyLinePlaceholder":726},[34,172077,172078,172080],{"class":36,"line":601},[34,172079,171383],{"class":87},[34,172081,4392],{"class":40},[34,172083,172084,172086,172088,172091,172093,172095,172097],{"class":36,"line":613},[34,172085,162991],{"class":40},[34,172087,153],{"class":87},[34,172089,172090],{"class":40}," withdraw(",[34,172092,1106],{"class":63},[34,172094,13088],{"class":40},[34,172096,2376],{"class":63},[34,172098,807],{"class":40},[34,172100,172101,172103,172106,172108],{"class":36,"line":618},[34,172102,171395],{"class":87},[34,172104,172105],{"class":40}," BalanceNotEnoughError ",[34,172107,32034],{"class":87},[34,172109,171727],{"class":40},[34,172111,172112,172114],{"class":36,"line":628},[34,172113,31950],{"class":63},[34,172115,67637],{"class":40},[108,172117,172118],{},"入门阶段大多数情况使用内置异常即可。",[14,172120,172122],{"id":172121},"_99-traceback","9.9 traceback",[108,172124,172125],{},"调试时可以输出完整异常堆栈。",[24,172127,172129],{"className":31029,"code":172128,"language":31031,"meta":29,"style":29},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[31,172130,172131,172138,172142,172148,172158,172166],{"__ignoreMap":29},[34,172132,172133,172135],{"class":36,"line":37},[34,172134,31043],{"class":87},[34,172136,172137],{"class":40}," traceback\n",[34,172139,172140],{"class":36,"line":51},[34,172141,3053],{"emptyLinePlaceholder":726},[34,172143,172144,172146],{"class":36,"line":60},[34,172145,171383],{"class":87},[34,172147,4392],{"class":40},[34,172149,172150,172152,172154,172156],{"class":36,"line":76},[34,172151,2638],{"class":63},[34,172153,801],{"class":40},[34,172155,156381],{"class":156},[34,172157,807],{"class":40},[34,172159,172160,172162,172164],{"class":36,"line":93},[34,172161,171395],{"class":87},[34,172163,152727],{"class":63},[34,172165,4392],{"class":40},[34,172167,172168],{"class":36,"line":99},[34,172169,172170],{"class":40},"    traceback.print_exc()\n",[108,172172,172173],{},"日志系统中常把异常堆栈记录到文件。",[14,172175,172177],{"id":172176},"_910-什么是模块","9.10 什么是模块",[108,172179,172180,172181,126613],{},"模块就是一个 ",[31,172182,146853],{},[108,172184,172185,172186,25271],{},"例如创建 ",[31,172187,172188],{},"my_math.py",[24,172190,172192],{"className":31029,"code":172191,"language":31031,"meta":29,"style":29},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[31,172193,172194,172202,172212,172216,172220,172229],{"__ignoreMap":29},[34,172195,172196,172198,172200],{"class":36,"line":37},[34,172197,32598],{"class":87},[34,172199,5862],{"class":149},[34,172201,151594],{"class":40},[34,172203,172204,172206,172208,172210],{"class":36,"line":51},[34,172205,4743],{"class":87},[34,172207,11522],{"class":40},[34,172209,1276],{"class":87},[34,172211,151605],{"class":40},[34,172213,172214],{"class":36,"line":60},[34,172215,3053],{"emptyLinePlaceholder":726},[34,172217,172218],{"class":36,"line":76},[34,172219,3053],{"emptyLinePlaceholder":726},[34,172221,172222,172224,172227],{"class":36,"line":93},[34,172223,32598],{"class":87},[34,172225,172226],{"class":149}," sub",[34,172228,151594],{"class":40},[34,172230,172231,172233,172235,172237],{"class":36,"line":99},[34,172232,4743],{"class":87},[34,172234,11522],{"class":40},[34,172236,1327],{"class":87},[34,172238,151605],{"class":40},[108,172240,172241],{},"在另一个文件中导入：",[24,172243,172245],{"className":31029,"code":172244,"language":31031,"meta":29,"style":29},"import my_math\n\nprint(my_math.add(1, 2))\n",[31,172246,172247,172254,172258],{"__ignoreMap":29},[34,172248,172249,172251],{"class":36,"line":37},[34,172250,31043],{"class":87},[34,172252,172253],{"class":40}," my_math\n",[34,172255,172256],{"class":36,"line":51},[34,172257,3053],{"emptyLinePlaceholder":726},[34,172259,172260,172262,172265,172267,172269,172271],{"class":36,"line":60},[34,172261,31066],{"class":63},[34,172263,172264],{"class":40},"(my_math.add(",[34,172266,1013],{"class":63},[34,172268,13088],{"class":40},[34,172270,875],{"class":63},[34,172272,31148],{"class":40},[14,172274,172276],{"id":172275},"_911-import导入","9.11 import导入",[19,172278,172280],{"id":172279},"_9111-导入模块","9.11.1 导入模块",[24,172282,172284],{"className":31029,"code":172283,"language":31031,"meta":29,"style":29},"import random\n\nprint(random.randint(1, 10))\n",[31,172285,172286,172292,172296],{"__ignoreMap":29},[34,172287,172288,172290],{"class":36,"line":37},[34,172289,31043],{"class":87},[34,172291,45979],{"class":40},[34,172293,172294],{"class":36,"line":51},[34,172295,3053],{"emptyLinePlaceholder":726},[34,172297,172298,172300,172303,172305,172307,172309],{"class":36,"line":60},[34,172299,31066],{"class":63},[34,172301,172302],{"class":40},"(random.randint(",[34,172304,1013],{"class":63},[34,172306,13088],{"class":40},[34,172308,1241],{"class":63},[34,172310,31148],{"class":40},[19,172312,172314],{"id":172313},"_9112-导入指定内容","9.11.2 导入指定内容",[24,172316,172318],{"className":31029,"code":172317,"language":31031,"meta":29,"style":29},"from random import randint\n\nprint(randint(1, 10))\n",[31,172319,172320,172331,172335],{"__ignoreMap":29},[34,172321,172322,172324,172326,172328],{"class":36,"line":37},[34,172323,31388],{"class":87},[34,172325,58439],{"class":40},[34,172327,31043],{"class":87},[34,172329,172330],{"class":40}," randint\n",[34,172332,172333],{"class":36,"line":51},[34,172334,3053],{"emptyLinePlaceholder":726},[34,172336,172337,172339,172342,172344,172346,172348],{"class":36,"line":60},[34,172338,31066],{"class":63},[34,172340,172341],{"class":40},"(randint(",[34,172343,1013],{"class":63},[34,172345,13088],{"class":40},[34,172347,1241],{"class":63},[34,172349,31148],{"class":40},[19,172351,172353],{"id":172352},"_9113-起别名","9.11.3 起别名",[24,172355,172357],{"className":31029,"code":172356,"language":31031,"meta":29,"style":29},"import random as rd\n\nprint(rd.randint(1, 10))\n",[31,172358,172359,172370,172374],{"__ignoreMap":29},[34,172360,172361,172363,172365,172367],{"class":36,"line":37},[34,172362,31043],{"class":87},[34,172364,58439],{"class":40},[34,172366,32034],{"class":87},[34,172368,172369],{"class":40}," rd\n",[34,172371,172372],{"class":36,"line":51},[34,172373,3053],{"emptyLinePlaceholder":726},[34,172375,172376,172378,172381,172383,172385,172387],{"class":36,"line":60},[34,172377,31066],{"class":63},[34,172379,172380],{"class":40},"(rd.randint(",[34,172382,1013],{"class":63},[34,172384,13088],{"class":40},[34,172386,1241],{"class":63},[34,172388,31148],{"class":40},[24,172390,172392],{"className":31029,"code":172391,"language":31031,"meta":29,"style":29},"from random import randint as rint\n\nprint(rint(1, 10))\n",[31,172393,172394,172410,172414],{"__ignoreMap":29},[34,172395,172396,172398,172400,172402,172405,172407],{"class":36,"line":37},[34,172397,31388],{"class":87},[34,172399,58439],{"class":40},[34,172401,31043],{"class":87},[34,172403,172404],{"class":40}," randint ",[34,172406,32034],{"class":87},[34,172408,172409],{"class":40}," rint\n",[34,172411,172412],{"class":36,"line":51},[34,172413,3053],{"emptyLinePlaceholder":726},[34,172415,172416,172418,172421,172423,172425,172427],{"class":36,"line":60},[34,172417,31066],{"class":63},[34,172419,172420],{"class":40},"(rint(",[34,172422,1013],{"class":63},[34,172424,13088],{"class":40},[34,172426,1241],{"class":63},[34,172428,31148],{"class":40},[19,172430,172432],{"id":172431},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[24,172434,172436],{"className":31029,"code":172435,"language":31031,"meta":29,"style":29},"from random import *\n",[31,172437,172438],{"__ignoreMap":29},[34,172439,172440,172442,172444,172446],{"class":36,"line":37},[34,172441,31388],{"class":87},[34,172443,58439],{"class":40},[34,172445,31043],{"class":87},[34,172447,172448],{"class":87}," *\n",[108,172450,172451],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172453,172455],{"id":172454},"_912-常用内置模块","9.12 常用内置模块",[19,172457,172459],{"id":172458},"_9121-random","9.12.1 random",[24,172461,172463],{"className":31029,"code":172462,"language":31031,"meta":29,"style":29},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[31,172464,172465,172471,172475,172489,172508],{"__ignoreMap":29},[34,172466,172467,172469],{"class":36,"line":37},[34,172468,31043],{"class":87},[34,172470,45979],{"class":40},[34,172472,172473],{"class":36,"line":51},[34,172474,3053],{"emptyLinePlaceholder":726},[34,172476,172477,172479,172481,172483,172485,172487],{"class":36,"line":60},[34,172478,31066],{"class":63},[34,172480,172302],{"class":40},[34,172482,1013],{"class":63},[34,172484,13088],{"class":40},[34,172486,1241],{"class":63},[34,172488,31148],{"class":40},[34,172490,172491,172493,172496,172498,172500,172502,172504,172506],{"class":36,"line":76},[34,172492,31066],{"class":63},[34,172494,172495],{"class":40},"(random.choice([",[34,172497,150389],{"class":156},[34,172499,13088],{"class":40},[34,172501,151437],{"class":156},[34,172503,13088],{"class":40},[34,172505,160232],{"class":156},[34,172507,33794],{"class":40},[34,172509,172510,172512,172515,172517,172519,172521,172523,172525,172527,172529,172531,172533,172535,172537],{"class":36,"line":93},[34,172511,31066],{"class":63},[34,172513,172514],{"class":40},"(random.sample([",[34,172516,1013],{"class":63},[34,172518,13088],{"class":40},[34,172520,875],{"class":63},[34,172522,13088],{"class":40},[34,172524,869],{"class":63},[34,172526,13088],{"class":40},[34,172528,1088],{"class":63},[34,172530,13088],{"class":40},[34,172532,1114],{"class":63},[34,172534,112832],{"class":40},[34,172536,875],{"class":63},[34,172538,31148],{"class":40},[19,172540,172542],{"id":172541},"_9122-time","9.12.2 time",[24,172544,172546],{"className":31029,"code":172545,"language":31031,"meta":29,"style":29},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[31,172547,172548,172554,172558,172565,172573],{"__ignoreMap":29},[34,172549,172550,172552],{"class":36,"line":37},[34,172551,31043],{"class":87},[34,172553,32480],{"class":40},[34,172555,172556],{"class":36,"line":51},[34,172557,3053],{"emptyLinePlaceholder":726},[34,172559,172560,172562],{"class":36,"line":60},[34,172561,31066],{"class":63},[34,172563,172564],{"class":40},"(time.time())\n",[34,172566,172567,172569,172571],{"class":36,"line":76},[34,172568,95701],{"class":40},[34,172570,1013],{"class":63},[34,172572,807],{"class":40},[34,172574,172575,172577,172579,172582],{"class":36,"line":93},[34,172576,31066],{"class":63},[34,172578,801],{"class":40},[34,172580,172581],{"class":156},"\"1秒后执行\"",[34,172583,807],{"class":40},[19,172585,172587],{"id":172586},"_9123-datetime","9.12.3 datetime",[24,172589,172591],{"className":31029,"code":172590,"language":31031,"meta":29,"style":29},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[31,172592,172593,172605,172609,172619,172626],{"__ignoreMap":29},[34,172594,172595,172597,172600,172602],{"class":36,"line":37},[34,172596,31388],{"class":87},[34,172598,172599],{"class":40}," datetime ",[34,172601,31043],{"class":87},[34,172603,172604],{"class":40}," datetime\n",[34,172606,172607],{"class":36,"line":51},[34,172608,3053],{"emptyLinePlaceholder":726},[34,172610,172611,172614,172616],{"class":36,"line":60},[34,172612,172613],{"class":40},"now ",[34,172615,153],{"class":87},[34,172617,172618],{"class":40}," datetime.now()\n",[34,172620,172621,172623],{"class":36,"line":76},[34,172622,31066],{"class":63},[34,172624,172625],{"class":40},"(now)\n",[34,172627,172628,172630,172633,172636,172638,172641],{"class":36,"line":93},[34,172629,31066],{"class":63},[34,172631,172632],{"class":40},"(now.strftime(",[34,172634,172635],{"class":156},"\"%Y-%m-",[34,172637,157192],{"class":63},[34,172639,172640],{"class":156}," %H:%M:%S\"",[34,172642,31148],{"class":40},[19,172644,172646],{"id":172645},"_9124-os","9.12.4 os",[24,172648,172650],{"className":31029,"code":172649,"language":31031,"meta":29,"style":29},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[31,172651,172652,172658,172662,172669],{"__ignoreMap":29},[34,172653,172654,172656],{"class":36,"line":37},[34,172655,31043],{"class":87},[34,172657,45956],{"class":40},[34,172659,172660],{"class":36,"line":51},[34,172661,3053],{"emptyLinePlaceholder":726},[34,172663,172664,172666],{"class":36,"line":60},[34,172665,31066],{"class":63},[34,172667,172668],{"class":40},"(os.getcwd())\n",[34,172670,172671,172673,172676,172679],{"class":36,"line":76},[34,172672,31066],{"class":63},[34,172674,172675],{"class":40},"(os.listdir(",[34,172677,172678],{"class":156},"\".\"",[34,172680,31148],{"class":40},[19,172682,172684],{"id":172683},"_9125-sys","9.12.5 sys",[24,172686,172688],{"className":31029,"code":172687,"language":31031,"meta":29,"style":29},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[31,172689,172690,172697,172701,172708],{"__ignoreMap":29},[34,172691,172692,172694],{"class":36,"line":37},[34,172693,31043],{"class":87},[34,172695,172696],{"class":40}," sys\n",[34,172698,172699],{"class":36,"line":51},[34,172700,3053],{"emptyLinePlaceholder":726},[34,172702,172703,172705],{"class":36,"line":60},[34,172704,31066],{"class":63},[34,172706,172707],{"class":40},"(sys.version)\n",[34,172709,172710,172712],{"class":36,"line":76},[34,172711,31066],{"class":63},[34,172713,172714],{"class":40},"(sys.path)\n",[14,172716,172718,172719,172721,172722,1046],{"id":172717},"_913-if-name-main","9.13 if ",[111,172720,80440],{}," == \"",[111,172723,102688],{},[108,172725,172726,172727,172730],{},"模块被直接运行和被导入时，",[31,172728,172729],{},"__name__"," 的值不同。",[108,172732,172733,172734,25271],{},"创建 ",[31,172735,172736],{},"my_module.py",[24,172738,172740],{"className":31029,"code":172739,"language":31031,"meta":29,"style":29},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[31,172741,172742,172750,172760,172764,172768,172780],{"__ignoreMap":29},[34,172743,172744,172746,172748],{"class":36,"line":37},[34,172745,32598],{"class":87},[34,172747,5862],{"class":149},[34,172749,151594],{"class":40},[34,172751,172752,172754,172756,172758],{"class":36,"line":51},[34,172753,4743],{"class":87},[34,172755,11522],{"class":40},[34,172757,1276],{"class":87},[34,172759,151605],{"class":40},[34,172761,172762],{"class":36,"line":60},[34,172763,3053],{"emptyLinePlaceholder":726},[34,172765,172766],{"class":36,"line":76},[34,172767,3053],{"emptyLinePlaceholder":726},[34,172769,172770,172772,172774,172776,172778],{"class":36,"line":93},[34,172771,2191],{"class":87},[34,172773,31871],{"class":63},[34,172775,102189],{"class":87},[34,172777,102192],{"class":156},[34,172779,4392],{"class":40},[34,172781,172782,172784,172786,172788,172790,172792],{"class":36,"line":99},[34,172783,31950],{"class":63},[34,172785,167101],{"class":40},[34,172787,1013],{"class":63},[34,172789,13088],{"class":40},[34,172791,875],{"class":63},[34,172793,31148],{"class":40},[108,172795,172796],{},"作用：",[752,172798,172799,172802],{},[755,172800,172801],{},"直接运行该文件时，执行测试代码。",[755,172803,172804],{},"被其他文件导入时，不执行测试代码。",[108,172806,172807],{},"这是写模块时很常用的习惯。",[14,172809,172811],{"id":172810},"_914-包","9.14 包",[108,172813,172814,172815,172818],{},"包是包含 ",[31,172816,172817],{},"__init__.py"," 的目录，用于组织多个模块。",[108,172820,172821],{},"目录结构：",[24,172823,172826],{"className":172824,"code":172825,"language":5840,"meta":29},[5838],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[31,172827,172825],{"__ignoreMap":29},[108,172829,172830],{},"导入：",[24,172832,172834],{"className":31029,"code":172833,"language":31031,"meta":29,"style":29},"from utils.file_utils import read_file\n",[31,172835,172836],{"__ignoreMap":29},[34,172837,172838,172840,172843,172845],{"class":36,"line":37},[34,172839,31388],{"class":87},[34,172841,172842],{"class":40}," utils.file_utils ",[34,172844,31043],{"class":87},[34,172846,172847],{"class":40}," read_file\n",[108,172849,172850,172852],{},[31,172851,172817],{}," 可以为空，也可以写包初始化逻辑。",[14,172854,172856],{"id":172855},"_915-第三方包","9.15 第三方包",[108,172858,172859,172860,172862],{},"第三方包通过 ",[31,172861,24483],{}," 安装。",[24,172864,172866],{"className":24474,"code":172865,"language":24476,"meta":29,"style":29},"pip install requests\n",[31,172867,172868],{"__ignoreMap":29},[34,172869,172870,172872,172874],{"class":36,"line":37},[34,172871,24483],{"class":149},[34,172873,24486],{"class":156},[34,172875,146599],{"class":156},[108,172877,172878],{},"使用：",[24,172880,172882],{"className":31029,"code":172881,"language":31031,"meta":29,"style":29},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[31,172883,172884,172890,172894,172909],{"__ignoreMap":29},[34,172885,172886,172888],{"class":36,"line":37},[34,172887,31043],{"class":87},[34,172889,146599],{"class":40},[34,172891,172892],{"class":36,"line":51},[34,172893,3053],{"emptyLinePlaceholder":726},[34,172895,172896,172899,172901,172904,172907],{"class":36,"line":60},[34,172897,172898],{"class":40},"response ",[34,172900,153],{"class":87},[34,172902,172903],{"class":40}," requests.get(",[34,172905,172906],{"class":156},"\"https:\u002F\u002Fwww.example.com\"",[34,172908,807],{"class":40},[34,172910,172911,172913],{"class":36,"line":76},[34,172912,31066],{"class":63},[34,172914,172915],{"class":40},"(response.status_code)\n",[108,172917,172918],{},"查看已安装包：",[24,172920,172922],{"className":24474,"code":172921,"language":24476,"meta":29,"style":29},"pip list\n",[31,172923,172924],{"__ignoreMap":29},[34,172925,172926,172928],{"class":36,"line":37},[34,172927,24483],{"class":149},[34,172929,119585],{"class":156},[108,172931,172932],{},"导出项目依赖：",[24,172934,172935],{"className":24474,"code":146794,"language":24476,"meta":29,"style":29},[31,172936,172937],{"__ignoreMap":29},[34,172938,172939,172941,172943,172945],{"class":36,"line":37},[34,172940,24483],{"class":149},[34,172942,146803],{"class":156},[34,172944,26874],{"class":87},[34,172946,146808],{"class":156},[108,172948,172949],{},"安装项目依赖：",[24,172951,172952],{"className":24474,"code":146814,"language":24476,"meta":29,"style":29},[31,172953,172954],{"__ignoreMap":29},[34,172955,172956,172958,172960,172962],{"class":36,"line":37},[34,172957,24483],{"class":149},[34,172959,24486],{"class":156},[34,172961,120269],{"class":63},[34,172963,146808],{"class":156},[14,172965,172967],{"id":172966},"_916-模块搜索路径","9.16 模块搜索路径",[108,172969,172970,172971,172974],{},"Python 导入模块时会在 ",[31,172972,172973],{},"sys.path"," 中查找。",[24,172976,172978],{"className":31029,"code":172977,"language":31031,"meta":29,"style":29},"import sys\n\nfor path in sys.path:\n    print(path)\n",[31,172979,172980,172986,172990,173002],{"__ignoreMap":29},[34,172981,172982,172984],{"class":36,"line":37},[34,172983,31043],{"class":87},[34,172985,172696],{"class":40},[34,172987,172988],{"class":36,"line":51},[34,172989,3053],{"emptyLinePlaceholder":726},[34,172991,172992,172994,172997,172999],{"class":36,"line":60},[34,172993,3678],{"class":87},[34,172995,172996],{"class":40}," path ",[34,172998,26695],{"class":87},[34,173000,173001],{"class":40}," sys.path:\n",[34,173003,173004,173006],{"class":36,"line":76},[34,173005,31950],{"class":63},[34,173007,169730],{"class":40},[108,173009,173010],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[108,173012,158124],{},[24,173014,173017],{"className":173015,"code":173016,"language":5840,"meta":29},[5838],"random.py\njson.py\ntime.py\n",[31,173018,173016],{"__ignoreMap":29},[108,173020,173021],{},"这些文件名可能导致导入异常。",[14,173023,173025],{"id":173024},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[108,173027,172821],{},[24,173029,173032],{"className":173030,"code":173031,"language":5840,"meta":29},[5838],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[31,173033,173031],{"__ignoreMap":29},[108,173035,173036,25271],{},[31,173037,173038],{},"utils\u002Ffile_utils.py",[24,173040,173042],{"className":31029,"code":173041,"language":31031,"meta":29,"style":29},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[31,173043,173044,173050,173060,173064,173068,173078,173088,173096,173102,173106,173133,173143,173147,173151,173161,173187],{"__ignoreMap":29},[34,173045,173046,173048],{"class":36,"line":37},[34,173047,31043],{"class":87},[34,173049,147592],{"class":40},[34,173051,173052,173054,173056,173058],{"class":36,"line":51},[34,173053,31388],{"class":87},[34,173055,108941],{"class":40},[34,173057,31043],{"class":87},[34,173059,108946],{"class":40},[34,173061,173062],{"class":36,"line":60},[34,173063,3053],{"emptyLinePlaceholder":726},[34,173065,173066],{"class":36,"line":76},[34,173067,3053],{"emptyLinePlaceholder":726},[34,173069,173070,173072,173075],{"class":36,"line":93},[34,173071,32598],{"class":87},[34,173073,173074],{"class":149}," read_json",[34,173076,173077],{"class":40},"(path):\n",[34,173079,173080,173083,173085],{"class":36,"line":99},[34,173081,173082],{"class":40},"    path ",[34,173084,153],{"class":87},[34,173086,173087],{"class":40}," Path(path)\n",[34,173089,173090,173092,173094],{"class":36,"line":353},[34,173091,3754],{"class":87},[34,173093,39581],{"class":87},[34,173095,169811],{"class":40},[34,173097,173098,173100],{"class":36,"line":359},[34,173099,15405],{"class":87},[34,173101,52484],{"class":40},[34,173103,173104],{"class":36,"line":579},[34,173105,3053],{"emptyLinePlaceholder":726},[34,173107,173108,173110,173112,173115,173117,173119,173121,173123,173125,173127,173129,173131],{"class":36,"line":589},[34,173109,34829],{"class":87},[34,173111,147292],{"class":63},[34,173113,173114],{"class":40},"(path, ",[34,173116,147302],{"class":156},[34,173118,13088],{"class":40},[34,173120,147307],{"class":5869},[34,173122,153],{"class":87},[34,173124,147312],{"class":156},[34,173126,14367],{"class":40},[34,173128,32034],{"class":87},[34,173130,148654],{"class":5869},[34,173132,4392],{"class":40},[34,173134,173135,173137,173139,173141],{"class":36,"line":601},[34,173136,15405],{"class":87},[34,173138,148665],{"class":40},[34,173140,46005],{"class":5869},[34,173142,807],{"class":40},[34,173144,173145],{"class":36,"line":613},[34,173146,3053],{"emptyLinePlaceholder":726},[34,173148,173149],{"class":36,"line":618},[34,173150,3053],{"emptyLinePlaceholder":726},[34,173152,173153,173155,173158],{"class":36,"line":628},[34,173154,32598],{"class":87},[34,173156,173157],{"class":149}," write_json",[34,173159,173160],{"class":40},"(path, data):\n",[34,173162,173163,173165,173167,173169,173171,173173,173175,173177,173179,173181,173183,173185],{"class":36,"line":640},[34,173164,34829],{"class":87},[34,173166,147292],{"class":63},[34,173168,173114],{"class":40},[34,173170,152477],{"class":156},[34,173172,13088],{"class":40},[34,173174,147307],{"class":5869},[34,173176,153],{"class":87},[34,173178,147312],{"class":156},[34,173180,14367],{"class":40},[34,173182,32034],{"class":87},[34,173184,148654],{"class":5869},[34,173186,4392],{"class":40},[34,173188,173189,173192,173194,173196,173198,173200,173202,173204,173206,173208,173210],{"class":36,"line":2301},[34,173190,173191],{"class":40},"        json.dump(data, ",[34,173193,46005],{"class":5869},[34,173195,13088],{"class":40},[34,173197,147638],{"class":5869},[34,173199,153],{"class":87},[34,173201,34638],{"class":63},[34,173203,13088],{"class":40},[34,173205,152513],{"class":5869},[34,173207,153],{"class":87},[34,173209,875],{"class":63},[34,173211,807],{"class":40},[108,173213,173214,25271],{},[31,173215,155108],{},[24,173217,173219],{"className":31029,"code":173218,"language":31031,"meta":29,"style":29},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[31,173220,173221,173232,173236,173249,173269],{"__ignoreMap":29},[34,173222,173223,173225,173227,173229],{"class":36,"line":37},[34,173224,31388],{"class":87},[34,173226,172842],{"class":40},[34,173228,31043],{"class":87},[34,173230,173231],{"class":40}," read_json, write_json\n",[34,173233,173234],{"class":36,"line":51},[34,173235,3053],{"emptyLinePlaceholder":726},[34,173237,173238,173240,173242,173245,173247],{"class":36,"line":60},[34,173239,160217],{"class":40},[34,173241,153],{"class":87},[34,173243,173244],{"class":40}," read_json(",[34,173246,152332],{"class":156},[34,173248,807],{"class":40},[34,173250,173251,173253,173255,173257,173259,173261,173263,173265,173267],{"class":36,"line":76},[34,173252,171035],{"class":40},[34,173254,63317],{"class":156},[34,173256,67],{"class":40},[34,173258,150389],{"class":156},[34,173260,13088],{"class":40},[34,173262,151973],{"class":156},[34,173264,67],{"class":40},[34,173266,1782],{"class":63},[34,173268,165653],{"class":40},[34,173270,173271,173274,173276],{"class":36,"line":93},[34,173272,173273],{"class":40},"write_json(",[34,173275,152332],{"class":156},[34,173277,173278],{"class":40},", students)\n",[14,173280,173282],{"id":173281},"_918-易错点","9.18 易错点",[752,173284,173285,173288,173293,173298,173301,173304],{},[755,173286,173287],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[755,173289,173290,173291,29036],{},"能指定异常类型就不要裸写 ",[31,173292,171395],{},[755,173294,173295,173297],{},[31,173296,171770],{}," 无论是否出错都会执行。",[755,173299,173300],{},"模块文件名不要和标准库重名。",[755,173302,173303],{},"导入自己写的模块时，要注意运行目录。",[755,173305,173306],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173308,173310],{"id":173309},"_919-本章练习","9.19 本章练习",[752,173312,173313,173316,173319,173325,173332],{},[755,173314,173315],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[755,173317,173318],{},"写函数读取文件，如果文件不存在则返回空字符串。",[755,173320,172733,173321,173324],{},[31,173322,173323],{},"math_utils.py","，实现加减乘除函数并导入使用。",[755,173326,173327,173328,173331],{},"创建一个 ",[31,173329,173330],{},"utils"," 包，把 JSON 读写函数放进去。",[755,173333,173334],{},"写一个程序，捕获除零异常和输入格式异常。",[45,173336,173337],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":29,"searchDepth":51,"depth":51,"links":173339},[173340,173341,173342,173343,173344,173345,173346,173347,173348,173349,173350,173356,173363,173365,173366,173367,173368,173369,173370],{"id":171192,"depth":51,"text":171193},{"id":171320,"depth":51,"text":171321},{"id":171369,"depth":51,"text":171370},{"id":171518,"depth":51,"text":171519},{"id":171690,"depth":51,"text":171691},{"id":171759,"depth":51,"text":171760},{"id":171870,"depth":51,"text":171871},{"id":171996,"depth":51,"text":171997},{"id":172121,"depth":51,"text":172122},{"id":172176,"depth":51,"text":172177},{"id":172275,"depth":51,"text":172276,"children":173351},[173352,173353,173354,173355],{"id":172279,"depth":60,"text":172280},{"id":172313,"depth":60,"text":172314},{"id":172352,"depth":60,"text":172353},{"id":172431,"depth":60,"text":172432},{"id":172454,"depth":51,"text":172455,"children":173357},[173358,173359,173360,173361,173362],{"id":172458,"depth":60,"text":172459},{"id":172541,"depth":60,"text":172542},{"id":172586,"depth":60,"text":172587},{"id":172645,"depth":60,"text":172646},{"id":172683,"depth":60,"text":172684},{"id":172717,"depth":51,"text":173364},"9.13 if name == \"main\"",{"id":172810,"depth":51,"text":172811},{"id":172855,"depth":51,"text":172856},{"id":172966,"depth":51,"text":172967},{"id":173024,"depth":51,"text":173025},{"id":173281,"depth":51,"text":173282},{"id":173309,"depth":51,"text":173310},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171184,"description":723},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173377,"title":173378,"body":173379,"description":173542,"extension":724,"meta":173543,"navigation":726,"path":173544,"seo":173545,"stem":173546,"__hash__":173547},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173380,"toc":173537},[173381,173384,173387,173390,173401,173403,173477,173480,173483,173486,173489,173492,173495,173498,173501,173504,173507],[10,173382,173378],{"id":173383},"python教程",[108,173385,173386],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[108,173388,173389],{},"建议学习环境：",[752,173391,173392,173395,173398],{},[755,173393,173394],{},"Python 版本：Python 3.10 及以上。",[755,173396,173397],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[755,173399,173400],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173402,117708],{"id":117708},[752,173404,173405,173411,173417,173423,173429,173435,173441,173447,173453,173459,173465,173471],{},[755,173406,173407],{},[520,173408,173410],{"href":173409},".\u002Fch1-Python","Python环境与第一个程序",[755,173412,173413],{},[520,173414,173416],{"href":173415},".\u002Fch2","基础语法、变量与字符串",[755,173418,173419],{},[520,173420,173422],{"href":173421},".\u002Fch3","判断语句",[755,173424,173425],{},[520,173426,173428],{"href":173427},".\u002Fch4","循环语句",[755,173430,173431],{},[520,173432,173434],{"href":173433},".\u002Fch5","函数基础",[755,173436,173437],{},[520,173438,173440],{"href":173439},".\u002Fch6","数据容器",[755,173442,173443],{},[520,173444,173446],{"href":173445},".\u002Fch7","函数进阶",[755,173448,173449],{},[520,173450,173452],{"href":173451},".\u002Fch8","文件操作",[755,173454,173455],{},[520,173456,173458],{"href":173457},".\u002Fch9","异常、模块与包",[755,173460,173461],{},[520,173462,173464],{"href":173463},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[755,173466,173467],{},[520,173468,173470],{"href":173469},".\u002Fch11","面向对象基础",[755,173472,173473],{},[520,173474,173476],{"href":173475},".\u002Fch12","综合案例与复习路线",[14,173478,173479],{"id":173479},"学习路线",[108,173481,173482],{},"第一阶段：能运行程序。",[108,173484,173485],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[108,173487,173488],{},"第二阶段：能组织数据。",[108,173490,173491],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[108,173493,173494],{},"第三阶段：能封装逻辑。",[108,173496,173497],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[108,173499,173500],{},"第四阶段：能做小项目。",[108,173502,173503],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173505,173506],{"id":173506},"参考资料",[752,173508,173509,173516,173523,173530],{},[755,173510,173511,173512],{},"黑马程序员 Python 入门教程推荐：",[520,173513,173514],{"href":173514,"rel":173515},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24517],[755,173517,173518,173519],{},"Python 官方中文教程：",[520,173520,173521],{"href":173521,"rel":173522},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24517],[755,173524,173525,173526],{},"Python 标准库文档：",[520,173527,173528],{"href":173528,"rel":173529},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24517],[755,173531,173532,173533],{},"pyecharts 文档：",[520,173534,173535],{"href":173535,"rel":173536},"https:\u002F\u002Fpyecharts.org\u002F",[24517],{"title":29,"searchDepth":51,"depth":51,"links":173538},[173539,173540,173541],{"id":117708,"depth":51,"text":117708},{"id":173479,"depth":51,"text":173479},{"id":173506,"depth":51,"text":173506},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24030},"\u002Fwiki\u002F2024-10-10-python",{"title":173378,"description":173542},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426827]